protected override void Execute(string itemClicked, AutomazioneParameters parameters, IList<PersonaContattoDTO> personeSelezionate) { var document = new RegistroContabilita(_dataSource, _condominio, _esercizio, _dataIniziale, _dataFinale, _impostazioneReportDTO, _reportKey); switch (itemClicked) { case "PDF": var fileName = $@"{parameters.SelectedPath}\{_condominio.Codice} - {Conversione.ToFileName(_condominio.Descrizione)}.pdf"; document.ExportToPdf(fileName); break; case "Messaggio": PersoneMessaggio = new List<PersonaMessaggioDTO>(personeSelezionate.Count); foreach (var persona in personeSelezionate) { var stream = new MemoryStream(); document.ExportToPdf(stream); var personaMessaggio = new PersonaMessaggioDTO { ID = persona.ID, NomeMessaggio = $"RegistroContabilita_{DateTime.Now.ToString("dd-mm-yyyy")}", OggettoMessaggio = parameters.OggettoMessaggio, DocumentoMessaggio = stream.ToArray(), TestoMessaggio = parameters.TestoMessaggio, TipoIndirizzo = TipoIndirizzo.Recapito, Contatti = new List<ContattoDTO>() }; var email = persona.EmailCertificata; if (string.IsNullOrEmpty(email)) email = persona.Email; personaMessaggio.Contatti.Add(new ContattoDTO { SelectColumn = true, TipoContatto = "Email", Valore = email }); personaMessaggio.Contatti.Add(new ContattoDTO { SelectColumn = true, TipoContatto = "Fax", Valore = persona.Fax }); personaMessaggio.Contatti.Add(new ContattoDTO { SelectColumn = true, TipoContatto = "Cellulare", Valore = persona.Cellulare }); PersoneMessaggio.Add(personaMessaggio); } break; } }
public IList<RisultatoInvioMessaggio> InvioMessaggio(int idAzienda, PersonaMessaggioDTO personaMessaggioDTO, Condominio condominio, int? idUnitaImmobiliare, int? idFornitore, int? idResponsabile, int? idIncaricatoAttivita, MotivoMessaggio motivoMessaggio, string oggetto, string testo, IList<string> destinatari, string mittente, string emailRapportino, IList<DocumentInfo> allegati, ParametriInvioLettera parametriInvioLettera) { try { if (destinatari.Count > 0) { var message = string.Empty; var invioRiuscito = false; var allegatiLista = new List<DocumentInfo>(allegati.Count); Persona persona = null; if (personaMessaggioDTO != null) persona = _daoFactory.GetPersonaDao().Find(personaMessaggioDTO.ID, false); var results = new List<RisultatoInvioMessaggio>(); var result = new eMessageResultSendFAX(); try { int? idCondominio = null; if (condominio != null) idCondominio = condominio.ID; var destinatariSend = new List<string>(); foreach (var item in destinatari) { if (!item.Trim().StartsWith("+39")) destinatariSend.Add("+39" + Conversione.ToPhoneNumber(item)); else destinatariSend.Add(Conversione.ToPhoneNumber(item)); } // ===================================== // Creo le pagine del FAX // ===================================== var nomiFiles = new string[allegati.Count]; var contenutoAllegati = new byte[allegati.Count][]; // ------------------------------------- // Allegati // ------------------------------------- var index = 0; foreach (var documento in allegati) { nomiFiles[index] = documento.FileName + documento.FileExtension; contenutoAllegati[index] = documento.Body; allegatiLista.Add(documento); index++; } // ------------------------------------- // Oggetto // ------------------------------------- decimal? importo = null; var tipoIndirizzo = TipoIndirizzo.Recapito; if (personaMessaggioDTO != null) { importo = personaMessaggioDTO.Importo; tipoIndirizzo = personaMessaggioDTO.TipoIndirizzo; } var parametri = new ParametriStampaUnione(persona != null ? (int?)persona.ID : null, idUnitaImmobiliare, idResponsabile, idIncaricatoAttivita, idFornitore, idCondominio, null, tipoIndirizzo, importo, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null); oggetto = _messaggisticaService.ApplicaStampaUnione(oggetto, parametri, idAzienda); // ===================================== // Invio Messaggio // ===================================== // ------------------------------------- // Invio // ------------------------------------- var service = new Fax { Timeout = 999999999 }; var userService = new Users(); var credenziali = _configurationService.GetLoginInfo(idAzienda); if (credenziali != null && !string.IsNullOrEmpty(credenziali.Value.Utente) && !string.IsNullOrEmpty(credenziali.Value.Password)) { var success = false; try { var resultUsers = userService.Login(credenziali.Value.Utente, credenziali.Value.Password, null); success = resultUsers.success; } catch (Exception ex) { _log.WarnFormat("Errore durante il controllo delle credenziali - {0} - username:{1} - password:{2}", ex, Utility.GetMethodDescription(), credenziali.Value.Utente, credenziali.Value.Password); } if (success) { var identificazioneMittente = _configurationService.GetIdentificazioneMittente(idAzienda, TipoMessaggio.Fax, TipoIndirizzo.Recapito); // Controllo identificazione mittente if (string.IsNullOrEmpty(identificazioneMittente.Numero)) return new List<RisultatoInvioMessaggio> { new RisultatoInvioMessaggio("KO", null, false, "Il fax non può essere inviato perchè non è presente il numero di fax del mittente" + Environment.NewLine + "Inserire il numero nella anagrafica dello studio e riprovare.", new DocumentInfo()) }; if (!string.IsNullOrEmpty(identificazioneMittente.Email)) { if (!string.IsNullOrEmpty(emailRapportino)) emailRapportino += ","; emailRapportino += identificazioneMittente.Email; } // Mittente if (string.IsNullOrEmpty(mittente)) mittente = identificazioneMittente.Nome; if (ConfigurationManager.AppSettings["IsTest"] != null && bool.Parse(ConfigurationManager.AppSettings["IsTest"])) destinatariSend = new List<string> { "+390513371992" }; var parameters = new List<OptionalParameters> { new OptionalParameters { ParameterName = "NotificationEmail", ParameterValue = emailRapportino }, new OptionalParameters { ParameterName = "DeliveryTime", ParameterValue = DateTime.Now.ToString() }, new OptionalParameters { ParameterName = "HeaderFax", ParameterValue = identificazioneMittente.Numero }, new OptionalParameters { ParameterName = "HeaderName", ParameterValue = mittente } }; if (!parametriInvioLettera.Asincrono) result = service.Send(credenziali.Value.Utente, credenziali.Value.Password, destinatariSend.ToArray(), contenutoAllegati, nomiFiles, parameters.ToArray()); else { service.SendAsync(credenziali.Value.Utente, credenziali.Value.Password, destinatariSend.ToArray(), contenutoAllegati, nomiFiles, parameters.ToArray()); invioRiuscito = true; } message += result; _log.InfoFormat("Risultato invio fax:{0} - destinatario:{1}", result, destinatariSend.Aggregate(string.Empty, (current, dest) => current + (dest + ", "))); if (result.SpeditionResult.All(item => item.success)) invioRiuscito = true; } else { _log.WarnFormat("Credenziali non valide - {0} - username:{1} - password:{2}", Utility.GetMethodDescription(), credenziali.Value.Utente, credenziali.Value.Password); } } else { _log.FatalFormat("Errore inaspettato durante l'invio del fax. NON sono presenti le credenziali per l'invio del fax - {0} - oggetto:{1} - destinatario:{2}", Utility.GetMethodDescription(), oggetto, destinatari[0]); message = "KO - Non sono definite le credenziali per l'invio dei fax"; } } catch (Exception ex) { invioRiuscito = false; _log.FatalFormat("Errore inaspettato durante l'invio del fax - {0} - oggetto:{1} - destinatario:{2}", ex, Utility.GetMethodDescription(), oggetto, destinatari[0]); message = "KO - Errore inaspettato durante l'invio del fax"; } if (motivoMessaggio != MotivoMessaggio.ScadenzaContratto && invioRiuscito) { foreach (var singleResult in result.SpeditionResult) { try { string messaggioInvio; if (singleResult.success) { messaggioInvio = string.Format("Fax accodato per l'invio: {0}", singleResult.jobCode); _log.InfoFormat("Invio FAX RIUSCITO - {0} - messageCode: {1} - messaggio: {2} - jobcode: {3} - destinatario: {4}", Utility.GetMethodDescription(), singleResult.messageCode, singleResult.errorDescription, singleResult.jobCode, destinatari.Aggregate(string.Empty, (current, dest) => current + (dest + ";"))); } else { messaggioInvio = "Invio della lettera non riuscito:" + Environment.NewLine + singleResult.errorDescription; _log.WarnFormat("Invio FAX FALLITO - {0} - messageCode: {1} - messaggio: {2} - jobcode: {3} - destinatario: {4}", Utility.GetMethodDescription(), singleResult.messageCode, singleResult.errorDescription, singleResult.jobCode, destinatari.Aggregate(string.Empty, (current, dest) => current + (dest + ";"))); } var resultInvio = new RisultatoInvioMessaggio(singleResult.jobCode, singleResult.messageCode, singleResult.success, messaggioInvio, new DocumentInfo()); var storicoMessaggio = _messaggisticaService.StoricizzaMessaggio(persona, condominio, resultInvio, motivoMessaggio, oggetto, testo, destinatari, mittente, emailRapportino, allegatiLista, TipoMessaggio.Fax); if (storicoMessaggio != null) resultInvio.IdMessaggio = storicoMessaggio.ID; results.Add(resultInvio); } catch (Exception ex) { _log.ErrorFormat("Errore inaspettato durante la storicizzazione del messaggio - {0} - oggetto:{1} - destinatario:{2}", ex, Utility.GetMethodDescription(), oggetto, destinatari[0]); throw; } } } else { if (!invioRiuscito) results.Add(new RisultatoInvioMessaggio("KO", null, false, message, new DocumentInfo())); } return results; } } catch (Exception ex) { var idPersona = "<NULL>"; if (personaMessaggioDTO != null) idPersona = personaMessaggioDTO.ID.ToString(); var idCondominio = "<NULL>"; if (condominio != null) idCondominio = condominio.ID.ToString(); _log.FatalFormat("Errore inaspettato nell'invio del fax - {0} - azienda:{1} - persona:{2} - condominio:{3} - motivoMessaggio:{4} - oggetto:{5} - testo:{6} - destinatari:{7} - mittente:{8} - emailRapportino:{9}", ex, Utility.GetMethodDescription(), idAzienda, idPersona, idCondominio, motivoMessaggio, oggetto, testo, destinatari.Aggregate(string.Empty, (current, dest) => current + (dest + ", ")), mittente, emailRapportino); throw; } return new List<RisultatoInvioMessaggio> { new RisultatoInvioMessaggio(null, null, false, "Non è definito nessun destinatario", new DocumentInfo())}; }
public IList<RisultatoInvioMessaggio> NotificaAIncaricato(int idCondominio, AttivitaDTO attivita, IList<NameValueDTOOfintstring> contatti, string emailRapportino, string mittente, string oggettoMessaggio, string testoMessaggio, IList<DocumentoDTO> documenti, IList<DocumentInfo> allegatiNuovi, int? idModello, ParametriStampaUnione parametriCompilazioneLettera, ParametriInvioLettera parametriInvioLettera, TipoMessaggio tipo, bool aggiornaContatti) { // ----------------------------------------------- // Documenti Allegati // ----------------------------------------------- var idDocumenti = new List<DocumentoMessaggioDTO>(); if (documenti != null) { idDocumenti.AddRange(documenti.Select(documento => new DocumentoMessaggioDTO {Id = documento.ID, IdSpesa = documento.IdSpesa})); } // ----------------------------------------------- // Destinatari // ----------------------------------------------- var persone = new List<PersonaMessaggioDTO>(); var contattiPersona = contatti.GroupBy(item => item.Value); foreach (var item in contattiPersona) { var persona = new PersonaMessaggioDTO(); var listaContatti = new List<ContattoDTO>(); foreach (var valoreContatto in item) { var contatto = new ContattoDTO { Valore = valoreContatto.Name, TipoContatto = tipo.ToString(), SelectColumn = true }; listaContatti.Add(contatto); } persona.ID = item.Key; persona.Contatti = listaContatti; persona.OggettoMessaggio = oggettoMessaggio; persona.TestoMessaggio = testoMessaggio; persona.NomeMessaggio = $"MessaggioAttivita_{DateTime.Now.ToString("dd-mm-yyyy")}"; if (tipo == TipoMessaggio.Lettera) persona.TipoIndirizzo = item.Any(contatto => contatto.Name == "Residenza") ? TipoIndirizzo.Residenza : TipoIndirizzo.Recapito; persone.Add(persona); } var idAttivita = 0; if (attivita != null) { idAttivita = attivita.ID; parametriCompilazioneLettera.Descrizione = attivita.Note; } var result = GetServiceClient().NotificaAIncaricato(idAttivita, MotivoMessaggio.NotificaAttivita, persone, oggettoMessaggio, testoMessaggio, mittente, emailRapportino, idDocumenti, new List<DocumentInfo>(allegatiNuovi), tipo, idModello, parametriCompilazioneLettera, parametriInvioLettera, aggiornaContatti, idCondominio, GetUserInfo()); CloseService(); // Apro eventuali documenti if (parametriInvioLettera.Aggregazione == AggregazioneDocumentiEnum.DocumentoUnico) _manageDocumentService.Open(result.MessaggioGenerato, null, true, MergeFieldType.Default); else { foreach (var risultatoInvioMessaggio in result.RisultatoInvio) { if (risultatoInvioMessaggio.Messaggio.Body != null) _manageDocumentService.Open(risultatoInvioMessaggio.Messaggio, null, true, MergeFieldType.Default); } } return result.RisultatoInvio; }
public IList<RisultatoInvioMessaggio> InvioMessaggio(int idAzienda, PersonaMessaggioDTO personaMessaggioDTO, Condominio condominio, int? idUnitaImmobiliare, int? idFornitore, int? idResponsabile, int? idIncaricatoAttivita, MotivoMessaggio motivoMessaggio, string oggetto, string testo, IList<string> destinatari, string mittente, string emailRapportino, IList<DocumentInfo> allegati, ParametriInvioLettera parametriInvioLettera) { // ========================================================= // Disabilito l'invio asincrono per problemi di gestione con Sertea // diversi messaggi non sono stati inviati bugid#3823 // ========================================================= parametriInvioLettera.Asincrono = false; var message = string.Empty; var invioRiuscito = false; Persona persona = null; if(personaMessaggioDTO != null) persona = _daoFactory.GetPersonaDao().Find(personaMessaggioDTO.ID, false); _persona = persona; _condominio = condominio; _motivoMessaggio = motivoMessaggio; _oggetto = oggetto; _testo = testo; _destinatari = destinatari; _mittente = mittente; _emailRapportino = emailRapportino; var results = new List<RisultatoInvioMessaggio>(); var result = new eMessageResultSendSMS(); try { var destinatariSend = new List<string>(); if (destinatari.Count > 0 && !destinatari.All(string.IsNullOrEmpty)) { foreach (var item in destinatari) { if (!string.IsNullOrEmpty(item)) { if (!item.Trim().StartsWith("+39")) destinatariSend.Add("+39" + Library.Conversione.ToPhoneNumber(item)); else destinatariSend.Add(Library.Conversione.ToPhoneNumber(item)); } } if (destinatariSend.Any()) { // ===================================== // Applico la stampa unione // ===================================== if (personaMessaggioDTO != null) { int? idCondominio = null; if (condominio != null) idCondominio = condominio.ID; var parametri = new ParametriStampaUnione(persona.ID, idUnitaImmobiliare, idResponsabile, idIncaricatoAttivita, idFornitore, idCondominio, null, personaMessaggioDTO.TipoIndirizzo, personaMessaggioDTO.Importo, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null); oggetto = _messagisticaService.ApplicaStampaUnione(oggetto, parametri, idAzienda); testo = _messagisticaService.ApplicaStampaUnione(testo, parametri, idAzienda); } // ===================================== // Invio Messaggio // ===================================== var credenziali = _configurationService.GetLoginInfo(idAzienda); if (credenziali != null && !string.IsNullOrEmpty(credenziali.Value.Utente) && !string.IsNullOrEmpty(credenziali.Value.Password)) { var userService = new it.emessage.users.Users(); var success = false; try { var resultUsers = userService.Login(credenziali.Value.Utente, credenziali.Value.Password, null); success = resultUsers.success; } catch (Exception ex) { _log.WarnFormat("Errore durante il controllo delle credenziali - {0} - username:{1} - password:{2} - azienda:{3}", ex, Library.Utility.GetMethodDescription(), credenziali.Value.Utente, credenziali.Value.Password, idAzienda); } if (success) { var service = new Sms {Timeout = 999999999}; var identificazioneMittente = _configurationService.GetIdentificazioneMittente(idAzienda, TipoMessaggio.Sms, TipoIndirizzo.Recapito); if (!string.IsNullOrEmpty(identificazioneMittente.Email)) emailRapportino += "," + identificazioneMittente.Email; // Mittente if (string.IsNullOrEmpty(mittente)) mittente = identificazioneMittente.Nome; if (!string.IsNullOrEmpty(mittente) && mittente.Length > 11) mittente = mittente.Substring(0, 11); if (ConfigurationManager.AppSettings["IsTest"] != null && bool.Parse(ConfigurationManager.AppSettings["IsTest"])) destinatariSend = new List<string> {"+393382958239"}; var parameters = new List<OptionalParameters> { new OptionalParameters { ParameterName = "NotificationEmail", ParameterValue = emailRapportino }, new OptionalParameters { ParameterName = "DeliveryTime", ParameterValue = DateTime.Now.ToString() } }; // --------------------------------------- // Invio NON Asincrono // --------------------------------------- if (!parametriInvioLettera.Asincrono) { if (motivoMessaggio != MotivoMessaggio.ScadenzaContratto) { try { if (string.IsNullOrEmpty(parametriInvioLettera.Tipo)) parametriInvioLettera.Tipo = "NORMAL"; result = service.Send(credenziali.Value.Utente, credenziali.Value.Password, mittente, destinatariSend.ToArray(), testo, parametriInvioLettera.Tipo, parameters.ToArray()); } catch (Exception ex) { _log.FatalFormat("Errore inaspettato durante l'invio del sms - INVIO DIRETTO - {0} - oggetto:{1} - destinatari:{2} - testo:{3} - azienda:{4} - tipo:{5} - parameters:{6} - mittente:{7} - utente:{8}", ex, Library.Utility.GetMethodDescription(), oggetto, destinatariSend.Aggregate(string.Empty, (current, dest) => current + (dest + ", ")), testo, idAzienda, parametriInvioLettera.Tipo, parameters.Aggregate(string.Empty, (current, param) => current + (param + ", ")), mittente, credenziali.Value.Utente); throw; } } _log.InfoFormat("Risultato invio sms:{0} - destinatario:{1} - azienda:{2}", result, destinatariSend.Aggregate(string.Empty, (current, dest) => current + (dest + ", ")), idAzienda); if (result != null) { message += result; if (result.success) invioRiuscito = true; } } // --------------------------------------- // Invio Asincrono // --------------------------------------- else { try { service.SendCompleted += serviceSendCompleted; service.SendAsync(credenziali.Value.Utente, credenziali.Value.Password, mittente, destinatariSend.ToArray(), testo, parametriInvioLettera.Tipo, parameters.ToArray()); } catch (Exception ex) { _log.FatalFormat("Errore inaspettato durante l'invio del sms - INVIO ASINCRONO - {0} - oggetto:{1} - destinatari:{2} - testo:{3} - azienda:{4} - tipo:{5} - parameters:{6} - mittente:{7} - utente:{8}", ex, Library.Utility.GetMethodDescription(), oggetto, destinatariSend.Aggregate(string.Empty, (current, dest) => current + (dest + ", ")), testo, idAzienda, parametriInvioLettera.Tipo, parameters.Aggregate(string.Empty, (current, param) => current + (param + ", ")), mittente, credenziali.Value.Utente); throw; } // Se invio asincrono suppongo sia andato a buon fine invioRiuscito = true; results.Add(new RisultatoInvioMessaggio("N.D.", "N.D.", true, "Tutti gli sms sono stati accodati per l'invio", new DocumentInfo())); } if (invioRiuscito) { // ===================================== // Controllo rapportino // ===================================== if (parametriInvioLettera.Tipo == "NOTIFICATION") { // Crea un trigger che parte tra 10 minuti e ogni minuto per 30 volte controlla le mail in arrivo. Trigger trigger = new PeriodicTrigger(DateTime.UtcNow.AddSeconds(10), null, TimeSpan.FromMinutes(1), 30); var jobSpec = new JobSpec("Controllo rapportino", "Verifica e salvataggio email contenente rapportino di conferma di invio SMS", "ConfermaRicezioneMessaggio", trigger); _scheduler.CreateJob(jobSpec, CreateJobConflictAction.Replace); _scheduler.Start(); } } } else { _log.WarnFormat("Credenziali non valide - {0} - username:{1} - password:{2} - azienda:{3}", Library.Utility.GetMethodDescription(), credenziali.Value.Utente, credenziali.Value.Password, idAzienda); } } else { _log.FatalFormat("Errore inaspettato durante l'invio del sms. NON sono presenti le credenziali per l'invio del sms - {0} - oggetto:{1} - destinatari:{2} - azienda:{3}", Library.Utility.GetMethodDescription(), oggetto, destinatari.Aggregate(string.Empty, (current, dest) => current + (dest + ", ")), idAzienda); message = "KO - Non sono definite le credenziali per l'invio dei sms"; } } else { _log.WarnFormat("Errore inaspettato durante l'invio del sms. NON è definito nessun destinatario - {0} - oggetto:{1} - destinatari:{2} - azienda:{3}", Library.Utility.GetMethodDescription(), oggetto, destinatari.Aggregate(string.Empty, (current, dest) => current + (dest + ", ")), idAzienda); message = "KO - Non è definito nessun destinatario"; } } else { _log.WarnFormat("Errore inaspettato durante l'invio del sms. NON è definito nessun destinatario - {0} - oggetto:{1} - destinatari:{2} - azienda:{3}", Library.Utility.GetMethodDescription(), oggetto, destinatari.Aggregate(string.Empty, (current, dest) => current + (dest + ", ")), idAzienda); message = "KO - Non è definito nessun destinatario"; } } catch (Exception ex) { invioRiuscito = false; _log.ErrorFormat("Errore inaspettato durante l'invio del sms - {0} - oggetto:{1} - destinatari:{2} - azienda:{3}", ex, Library.Utility.GetMethodDescription(), oggetto, destinatari.Aggregate(string.Empty, (current, dest) => current + (dest + ", ")), idAzienda); message = "KO - Errore inaspettato durante l'invio del sms"; } // =================================================================== // Storicizzazione dei messaggi solo se l'invio non è stato asicrono // =================================================================== if (!parametriInvioLettera.Asincrono && motivoMessaggio != MotivoMessaggio.ScadenzaContratto && invioRiuscito) { results = elaboraResult(result, results); } else { if(!invioRiuscito) results.Add(new RisultatoInvioMessaggio("KO", null, false, message, new DocumentInfo())); } return results; }
protected override void Execute(string itemClicked, AutomazioneParameters parameters) { var dataSource = reportViewer1.LocalReport.DataSources[0].Value; switch (itemClicked) { case "PDF": foreach (var itemDataSource in _datiSituazioneContabile) { loadReportDataSource(new List<SituazioneCondominoContabileDTO> { itemDataSource }); var pdf = SetPDF(); var fileName = parameters.SelectedPath + $@"\{itemDataSource.OrdinePersona} - {itemDataSource.NominativoPersona}.pdf"; try { File.WriteAllBytes(fileName, pdf); } catch (DirectoryNotFoundException) { CommonMessages.DisplayWarning("Non è possibile l'esportazione pdf perchè la cartella selezionata non è valida"); } catch (Exception ex) { _log.ErrorFormat("Errore nell'esportazione pdf - {0} - azienda:{1}", ex, Gipasoft.Library.Utility.GetMethodDescription(), Security.Login.Instance.CurrentLogin().Azienda); CommonMessages.DisplayWarning($"Errore nell'esportazione pdf.{Environment.NewLine}Si prega di riprovare"); } } break; case "Messaggio": PersoneMessaggio = new List<PersonaMessaggioDTO>(_datiSituazioneContabile.Count); foreach (var persona in _persone) { var datiSituazioneContabilePersona = _datiSituazioneContabile.Where(item => item.IdPersona == persona.ID).ToList(); loadReportDataSource(datiSituazioneContabilePersona); var pdf = SetPDF(); var personaMessaggio = new PersonaMessaggioDTO { ID = persona.ID, NomeMessaggio = $"SituazionePersonale_{DateTime.Now.ToString("dd-mm-yyyy")}", OggettoMessaggio = parameters.OggettoMessaggio, DocumentoMessaggio = pdf, TestoMessaggio = parameters.TestoMessaggio, TipoIndirizzo = persona.Indirizzo.RecapitoResidenza, Importo = datiSituazioneContabilePersona.Sum(item => item.ImportoDare.GetValueOrDefault() + item.ImportoAvere.GetValueOrDefault()), Contatti = new List<ContattoDTO>() }; // var email = persona.EmailCertificata; var email = string.Empty; if (string.IsNullOrEmpty(email)) email = persona.Email; personaMessaggio.Contatti.Add(new ContattoDTO { SelectColumn = true, TipoContatto = "Email", Valore = email }); personaMessaggio.Contatti.Add(new ContattoDTO { SelectColumn = true, TipoContatto = "Fax", Valore = persona.Fax }); personaMessaggio.Contatti.Add(new ContattoDTO { SelectColumn = true, TipoContatto = "Cellulare", Valore = persona.Cellulare }); PersoneMessaggio.Add(personaMessaggio); } break; } loadReportDataSource((IEnumerable<SituazioneCondominoContabileDTO>)dataSource); }
public IList<RisultatoInvioMessaggio> InvioMessaggio(int idAzienda, PersonaMessaggioDTO personaMessaggioDTO, Condominio condominio, int? idUnitaImmobiliare, int? idFornitore, int? idResponsabile, int? idIncaricatoAttivita, MotivoMessaggio motivoMessaggio, string oggetto, string testo, IList<string> destinatari, string mittente, string emailRapportino, IList<DocumentInfo> allegati, ParametriInvioLettera parametriInvioLettera) { if (destinatari.Count > 0) { var logDocuments = true; var results = new List<RisultatoInvioMessaggio>(); var allegatiLista = new List<DocumentInfo>(allegati.Count + 1); Persona persona = null; if(personaMessaggioDTO != null) persona = _daoFactory.GetPersonaDao().Find(personaMessaggioDTO.ID, false); try { // ===================================== // Creo le pagine della Lettera // ===================================== var nomiFiles = new string[allegati.Count]; var contenutoAllegati = new byte[allegati.Count][]; // ------------------------------------- // Allegati // ------------------------------------- var index = 0; foreach (var documento in allegati) { nomiFiles[index] = documento.FileName + documento.FileExtension; contenutoAllegati[index] = _converter.ConvertToPdf(documento).ToArray(); allegatiLista.Add(documento); index++; } // ===================================== // Invio Messaggio // ===================================== // ------------------------------------- // Invio // ------------------------------------- var credenziali = _configurationService.GetLoginInfo(idAzienda); if (credenziali != null && !string.IsNullOrEmpty(credenziali.Value.Utente) && !string.IsNullOrEmpty(credenziali.Value.Password)) { var userService = new it.emessage.users.Users(); var success = false; try { var resultUsers = userService.Login(credenziali.Value.Utente, credenziali.Value.Password, null); success = resultUsers.success; } catch (Exception ex) { _log.WarnFormat("Errore durante il controllo delle credenziali - {0} - username:{1} - password:{2}", ex, Library.Utility.GetMethodDescription(), credenziali.Value.Utente, credenziali.Value.Password); } if (success) { var tipoIndirizzo = TipoIndirizzo.Recapito; if (personaMessaggioDTO != null) tipoIndirizzo = personaMessaggioDTO.TipoIndirizzo; var identificazioneMittente = _configurationService.GetIdentificazioneMittente(idAzienda, TipoMessaggio.Fax, tipoIndirizzo); // Controllo identificazione mittente if (string.IsNullOrEmpty(identificazioneMittente.Indirizzo)) return new List<RisultatoInvioMessaggio> { new RisultatoInvioMessaggio("KO", null, false, "La lettera non può essere inviata perchè non è presente l'INDIRIZZO POSTALE del mittente" + Environment.NewLine + "Inserire l'informazione mancante nella anagrafica dello studio e riprovare.", new DocumentInfo()) }; if (string.IsNullOrEmpty(identificazioneMittente.Cap)) return new List<RisultatoInvioMessaggio> { new RisultatoInvioMessaggio("KO", null, false, "La lettera non può essere inviata perchè non è presente il CAP del mittente" + Environment.NewLine + "Inserire l'informazione mancante nella anagrafica dello studio e riprovare.", new DocumentInfo()) }; if (string.IsNullOrEmpty(identificazioneMittente.Comune)) return new List<RisultatoInvioMessaggio> { new RisultatoInvioMessaggio("KO", null, false, "La lettera non può essere inviata perchè non è presente il COMUNE del mittente" + Environment.NewLine + "Inserire l'informazione mancante nella anagrafica dello studio e riprovare.", new DocumentInfo()) }; if (string.IsNullOrEmpty(identificazioneMittente.Provincia)) return new List<RisultatoInvioMessaggio> { new RisultatoInvioMessaggio("KO", null, false, "La lettera non può essere inviata perchè non è presente la PROVINCIA del mittente" + Environment.NewLine + "Inserire l'informazione mancante nella anagrafica dello studio e riprovare.", new DocumentInfo()) }; if (string.IsNullOrEmpty(identificazioneMittente.Stato)) return new List<RisultatoInvioMessaggio> { new RisultatoInvioMessaggio("KO", null, false, "La lettera non può essere inviata perchè non è presente lo STATO del mittente" + Environment.NewLine + "Inserire l'informazione mancante nella anagrafica dello studio e riprovare.", new DocumentInfo()) }; // Controllo destinatari foreach (var dest in destinatari) { var destinatarioAry = dest.Split('¥'); var recipient = new Contact { Company = destinatarioAry[0], FirstName = destinatarioAry[1], LastName = destinatarioAry[2], Address = destinatarioAry[3], City = destinatarioAry[4], State = destinatarioAry[5], ZipCode = destinatarioAry[6], Country = destinatarioAry[7] }; if (string.IsNullOrEmpty(recipient.Address)) return new List<RisultatoInvioMessaggio> { new RisultatoInvioMessaggio("KO", null, false, string.Format("La lettera non può essere inviata perchè non è presente l'INDIRIZZO POSTALE di '{0} {1} {2}' {3} Inserire l'informazione mancante nella anagrafica del destinatario e riprovare.", recipient.Company, recipient.FirstName, recipient.LastName, Environment.NewLine), new DocumentInfo()) }; if (string.IsNullOrEmpty(recipient.ZipCode)) return new List<RisultatoInvioMessaggio> { new RisultatoInvioMessaggio("KO", null, false, string.Format("La lettera non può essere inviata perchè non è presente il CAP di '{0} {1} {2}' {3} Inserire l'informazione mancante nella anagrafica del destinatario e riprovare.", recipient.Company, recipient.FirstName, recipient.LastName, Environment.NewLine), new DocumentInfo()) }; if (string.IsNullOrEmpty(recipient.City)) return new List<RisultatoInvioMessaggio> { new RisultatoInvioMessaggio("KO", null, false, string.Format("La lettera non può essere inviata perchè non è presente il COMUNE di '{0} {1} {2}' {3} Inserire l'informazione mancante nella anagrafica del destinatario e riprovare.", recipient.Company, recipient.FirstName, recipient.LastName, Environment.NewLine), new DocumentInfo()) }; if (string.IsNullOrEmpty(recipient.State)) return new List<RisultatoInvioMessaggio> { new RisultatoInvioMessaggio("KO", null, false, string.Format("La lettera non può essere inviata perchè non è presente la PROVINCIA di '{0} {1} {2}' {3} Inserire l'informazione mancante nella anagrafica del destinatario e riprovare.", recipient.Company, recipient.FirstName, recipient.LastName, Environment.NewLine), new DocumentInfo()) }; if (string.IsNullOrEmpty(recipient.Country)) return new List<RisultatoInvioMessaggio> { new RisultatoInvioMessaggio("KO", null, false, string.Format("La lettera non può essere inviata perchè non è presente lo STATO di '{0} {1} {2}' {3} Inserire l'informazione mancante nella anagrafica del destinatario e riprovare.", recipient.Company, recipient.FirstName, recipient.LastName, Environment.NewLine), new DocumentInfo()) }; } if (!string.IsNullOrEmpty(identificazioneMittente.Email)) { if (!string.IsNullOrEmpty(emailRapportino)) emailRapportino += ","; emailRapportino += identificazioneMittente.Email; } // Mittente if (string.IsNullOrEmpty(mittente)) mittente = identificazioneMittente.Nome; if (ConfigurationManager.AppSettings["IsTest"] != null && bool.Parse(ConfigurationManager.AppSettings["IsTest"])) destinatari = new List<string> { "Giorgio Parmeggiani¥Giorgio¥Parmeggiani¥via Larga 36¥Bologna¥BO¥40138¥ITALIA" }; var sender = new Contact { Address = identificazioneMittente.Indirizzo, City = identificazioneMittente.Comune, Company = identificazioneMittente.RagioneSociale, State = identificazioneMittente.Provincia, FirstName = identificazioneMittente.Nome, LastName = identificazioneMittente.Cognome, ZipCode = identificazioneMittente.Cap, Country = identificazioneMittente.Stato }; var recipients = new Contact[destinatari.Count]; var indexRecipients = 0; foreach (var dest in destinatari) { var destinatarioAry = dest.Split('¥'); var recipient = new Contact { Company = destinatarioAry[0], FirstName = destinatarioAry[1], LastName = destinatarioAry[2], Address = destinatarioAry[3], City = destinatarioAry[4], State = destinatarioAry[5], ZipCode = destinatarioAry[6], Country = destinatarioAry[7] }; recipients[indexRecipients] = recipient; indexRecipients++; } // Parametri spedizione var parameters = new OptionalParameters[4]; parameters[0] = new OptionalParameters { ParameterName = "NotificationEmail", ParameterValue = emailRapportino }; parameters[1] = new OptionalParameters { ParameterName = "ColourPrint", ParameterValue = parametriInvioLettera.Colore.ToString() }; parameters[2] = new OptionalParameters { ParameterName = "OnlyFrontPrint", ParameterValue = (!parametriInvioLettera.FronteRetro).ToString() }; parameters[3] = new OptionalParameters { ParameterName = "CreateFirstPage", ParameterValue = parametriInvioLettera.PaginaIniziale.ToString() }; var service = new Letter { Timeout = 999999999 }; eMessageResultSendLetter resultSend; try { var directoryName = string.Empty; if (logDocuments) { directoryName = $"{AppDomain.CurrentDomain.BaseDirectory}temp/{Guid.NewGuid()}"; if (!Directory.Exists(directoryName)) Directory.CreateDirectory(directoryName); for (var i = 0; i < contenutoAllegati.Length; i++) { var nomeFile = $"{directoryName}/{i.ToString().PadLeft(3, '0')}_{nomiFiles[i]}"; using (var file = new FileStream(nomeFile, FileMode.Create, FileAccess.Write)) { file.Write(contenutoAllegati[i], 0, contenutoAllegati[i].Length); } } } var pdfMerge = new PdfMerge(); var fileUnico = pdfMerge.Merge(contenutoAllegati, false); var contentToSend = new byte[1][]; contentToSend[0] = fileUnico; var nomiFilesToSend = new string[1]; nomiFilesToSend[0] = motivoMessaggio.ToString(); if (!string.IsNullOrEmpty(oggetto)) nomiFilesToSend[0] += $"_{oggetto.ToFileName()}"; if (string.IsNullOrEmpty(nomiFilesToSend[0])) nomiFilesToSend[0] = "document"; nomiFilesToSend[0] += ".pdf"; if (logDocuments) { var nomeFileUnico = $"{directoryName}/{nomiFilesToSend[0]}"; using (var file = new FileStream(nomeFileUnico, FileMode.Create, FileAccess.Write)) { file.Write(fileUnico, 0, fileUnico.Length); } } if (ConfigurationManager.AppSettings["IsTest"] != null && bool.Parse(ConfigurationManager.AppSettings["IsTest"])) resultSend = null; else resultSend = service.Send(credenziali.Value.Utente, credenziali.Value.Password, sender, recipients, parametriInvioLettera.Tipo, contentToSend, nomiFilesToSend, parameters); } catch (System.Web.Services.Protocols.SoapException ex) { return new[]{ new RisultatoInvioMessaggio(null, null, false, ex.Message, new DocumentInfo()) }; } catch (Exception ex) { _log.ErrorFormat("Errore inaspettato nell'invio della lettera - {0}", ex, Library.Utility.GetMethodDescription()); throw; } if (resultSend != null) { foreach (var eMessageSpeditionResult in resultSend.SpeditionResult) { string messaggioInvio; if (eMessageSpeditionResult.success) { messaggioInvio = string.Format("Lettera accodata per l'invio: {0}", eMessageSpeditionResult.jobCode); _log.InfoFormat("Invio lettera RIUSCITO - {0} - messageCode: {1} - messaggio: {2} - jobcode: {3} - destinatario: {4}", Library.Utility.GetMethodDescription(), eMessageSpeditionResult.messageCode, eMessageSpeditionResult.errorDescription, eMessageSpeditionResult.jobCode, destinatari.Aggregate(string.Empty, (current, dest) => current + (dest + ";"))); } else { messaggioInvio = "Invio della lettera non riuscito:" + Environment.NewLine + eMessageSpeditionResult.errorDescription; _log.WarnFormat("Invio lettera FALLITO - {0} - messageCode: {1} - messaggio: {2} - jobcode: {3} - destinatario: {4}", Library.Utility.GetMethodDescription(), eMessageSpeditionResult.messageCode, eMessageSpeditionResult.errorDescription, eMessageSpeditionResult.jobCode, destinatari.Aggregate(string.Empty, (current, dest) => current + (dest + ";"))); } var resultInvio = new RisultatoInvioMessaggio(eMessageSpeditionResult.jobCode, eMessageSpeditionResult.messageCode, eMessageSpeditionResult.success, messaggioInvio, new DocumentInfo()); var storicoMessaggio = _messaggisticaService.StoricizzaMessaggio(persona, condominio, resultInvio, motivoMessaggio, oggetto, testo, destinatari, mittente, emailRapportino, allegatiLista, TipoMessaggio.Lettera); if (storicoMessaggio != null) resultInvio.IdMessaggio = storicoMessaggio.ID; results.Add(resultInvio); } } } else { _log.WarnFormat("Credenziali non valide - {0} - username:{1} - password:{2} - azienda:{3}", Library.Utility.GetMethodDescription(), credenziali.Value.Utente, credenziali.Value.Password, idAzienda); } } else { _log.ErrorFormat("Errore inaspettato durante l'invio della lettera. NON sono presenti le credenziali per l'invio della lettera - {0} - oggetto:{1} - destinatario:{2} - azienda:{3}", Library.Utility.GetMethodDescription(), oggetto, destinatari[0], idAzienda); var message = string.Format("KO - Non sono definite le credenziali per l'invio della lettera.{0}Inserire le credenziali corrette nel pannello Messaggistica dell'anagrafica dello studio", Environment.NewLine); return new List<RisultatoInvioMessaggio> { new RisultatoInvioMessaggio("KO", string.Empty, false, message, new DocumentInfo()) }; } } catch (Exception ex) { _log.ErrorFormat("Errore inaspettato durante l'invio della lettera - {0} - oggetto:{1} - destinatario:{2} - azienda:{3}", ex, Library.Utility.GetMethodDescription(), oggetto, destinatari[0], Security.Login.Instance.CurrentLogin().Azienda); throw; } return results; } return new List<RisultatoInvioMessaggio> { new RisultatoInvioMessaggio("KO", string.Empty, false, "Non è definito nessun destinatario", new DocumentInfo()) }; }
protected override void Execute(string itemClicked, AutomazioneParameters parameters) { var dataSource = reportViewer1.LocalReport.DataSources[0].Value; switch (itemClicked) { case "PDF": foreach (var certificazioneDataSource in _datiCertificazione) { try { loadReportDataSource(new List<DatiCertificazioneDTO> { certificazioneDataSource }); var pdf = SetPDF(); var fileName = parameters.SelectedPath + @"\" + Conversione.ToFileName(string.Format(@"{0} - {1}.pdf", certificazioneDataSource.IdCondominio.ToString().PadLeft(6, '0'), certificazioneDataSource.IdFornitore.ToString().PadLeft(6, '0'))); File.WriteAllBytes(fileName, pdf); } catch (Exception ex) { _log.ErrorFormat("Errore durante la suddivisione in singoli PDF della lettera di sollecito - {0} - condominio:{1} - fornitore:{2} - azienda:{3}", ex, Utility.GetMethodDescription(), certificazioneDataSource.IdCondominio, certificazioneDataSource.IdFornitore, Security.Login.Instance.CurrentLogin().Azienda); throw; } } break; case "Messaggio": PersoneMessaggio = new List<PersonaMessaggioDTO>(_datiCertificazione.Count); foreach (var itemDataSource in _datiCertificazione) { loadReportDataSource(new List<DatiCertificazioneDTO> { itemDataSource }); var pdf = SetPDF(); var personaMessaggio = new PersonaMessaggioDTO { ID = itemDataSource.IdPersona, NomeMessaggio = string.Format("Certificazione_{0}", DateTime.Now.ToString("dd-mm-yyyy")), OggettoMessaggio = parameters.OggettoMessaggio, DocumentoMessaggio = pdf, TestoMessaggio = parameters.TestoMessaggio, TipoIndirizzo = TipoIndirizzo.Recapito , Importo = itemDataSource.Dettaglio.Sum(item => item.ImportoRitenuta), Contatti = new List<ContattoDTO>() }; var persona = _personaService.GetCacheById(itemDataSource.IdPersona); if (persona != null) { var mail = persona.EmailCertificata; if (string.IsNullOrEmpty(mail)) mail = persona.Email; personaMessaggio.Contatti.Add(new ContattoDTO { SelectColumn = true, TipoContatto = "Email", Valore = mail }); personaMessaggio.Contatti.Add(new ContattoDTO { SelectColumn = true, TipoContatto = "Fax", Valore = persona.Fax }); personaMessaggio.Contatti.Add(new ContattoDTO { SelectColumn = true, TipoContatto = "Cellulare", Valore = persona.Cellulare }); } PersoneMessaggio.Add(personaMessaggio); } break; } loadReportDataSource((IEnumerable<DatiCertificazioneDTO>)dataSource); }
protected override void Execute(string itemClicked, AutomazioneParameters parameters) { var dataSource = reportViewer1.LocalReport.DataSources[0].Value; switch (itemClicked) { case "PDF": foreach (var itemDataSource in _datiSituazioneContabile) { loadReportDataSource(new List<SituazioneSoggettoCondominioDTO> { itemDataSource }); var pdf = SetPDF(); var fileName = parameters.SelectedPath + $@"\{itemDataSource.OrdineUnitaImmobiliare} - {Gipasoft.Library.Conversione.ToFileName(itemDataSource.DisplayNominativo)}.pdf"; try { File.WriteAllBytes(fileName, pdf); } catch (DirectoryNotFoundException ex) { CommonMessages.DisplayWarning($"Non è possibile creare il file pdf nella cartella selezionata.{Environment.NewLine}Verificare che la cartela sia ancora esistente"); } catch (Exception ex) { _log.ErrorFormat("Errore nella creazione del pdf - {0} - azienda:{1}", ex, Gipasoft.Library.Utility.GetMethodDescription(), Security.Login.Instance.CurrentLogin().Azienda); CommonMessages.DisplayWarning($"Errore nella creazione del file pdf.{Environment.NewLine}Verificare che il percorso selezionato sia corretto"); } } break; case "Messaggio": PersoneMessaggio = new List<PersonaMessaggioDTO>(_datiSituazioneContabile.Count); foreach (var itemDataSource in _datiSituazioneContabile) { var source = itemDataSource; var datiRatePersona = _datiRate.Where(item => item.IdPersona == source.IdPersona); var datiVersamentiPersona = _datiVersamenti.Where(item => item.IdPersona == source.IdPersona); var importo = datiRatePersona.Sum(item => item.Importo) - datiVersamentiPersona.Sum(item => item.Importo); loadReportDataSource(new List<SituazioneSoggettoCondominioDTO> { itemDataSource }); var pdf = SetPDF(); var personaMessaggio = new PersonaMessaggioDTO { ID = itemDataSource.IdPersona, NomeMessaggio = $"SituazioneCondomino_{DateTime.Now.ToString("dd-mm-yyyy")}", OggettoMessaggio = parameters.OggettoMessaggio, DocumentoMessaggio = pdf, TestoMessaggio = parameters.TestoMessaggio, TipoIndirizzo = TipoIndirizzo.Recapito, Importo = importo, Contatti = new List<ContattoDTO>() }; var persona = getPersonaService().GetCacheById(itemDataSource.IdPersona); if (persona != null) { var email = persona.EmailCertificata; if (string.IsNullOrEmpty(email)) email = persona.Email; personaMessaggio.Contatti.Add(new ContattoDTO { SelectColumn = true, TipoContatto = "Email", Valore = email }); personaMessaggio.Contatti.Add(new ContattoDTO { SelectColumn = true, TipoContatto = "Fax", Valore = persona.Fax }); personaMessaggio.Contatti.Add(new ContattoDTO { SelectColumn = true, TipoContatto = "Cellulare", Valore = persona.Cellulare }); } PersoneMessaggio.Add(personaMessaggio); } break; } loadReportDataSource((IEnumerable<SituazioneSoggettoCondominioDTO>)dataSource); }
protected override void Execute(string itemClicked, AutomazioneParameters parameters) { var dataSource = reportViewer1.LocalReport.DataSources[0].Value; switch (itemClicked) { case "PDF": foreach (var singleDataSource in _dataSource) { try { loadReportDataSource(new List<ImportiPersonaDTO> { singleDataSource }); var pdf = SetPDF(); var fileName = parameters.SelectedPath + @"\" + Conversione.ToFileName($@"{_condominio.ID.ToString().PadLeft(6, '0')} - {singleDataSource.ID.ToString().PadLeft(6, '0')}.pdf"); try { File.WriteAllBytes(fileName, pdf); } catch (DirectoryNotFoundException ex) { CommonMessages.DisplayWarning($"Attenzione la cartella {fileName} non è stata trovata.{Environment.NewLine}Si prega di correggere l'errore e di riprovare"); } catch (Exception ex) { CommonMessages.DisplayWarning(string.Format("Attenzione si è verificato un errore inaspettato:{1}{0}{1}Si prega di correggere l'errore e di riprovare", ex.Message, Environment.NewLine)); } } catch (Exception ex) { _log.ErrorFormat("Errore durante la suddivisione in singoli PDF della lettera di sollecito - {0} - condominio:{1} - persona:{2} - azienda:{3}", ex, Utility.GetMethodDescription(), _condominio.ID, singleDataSource.ID, Security.Login.Instance.CurrentLogin().Azienda); throw; } } break; case "Messaggio": PersoneMessaggio = new List<PersonaMessaggioDTO>(_dataSource.Count); foreach (var itemDataSource in _dataSource) { var persona = _personaService.GetCacheById(itemDataSource.ID); if (persona != null) { loadReportDataSource(new List<ImportiPersonaDTO> { itemDataSource }); var pdf = SetPDF(); var personaMessaggio = new PersonaMessaggioDTO { ID = persona.ID, NomeMessaggio = $"LetteraDetrazione_{DateTime.Now.ToString("dd-mm-yyyy")}", OggettoMessaggio = parameters.OggettoMessaggio, DocumentoMessaggio = pdf, TestoMessaggio = parameters.TestoMessaggio, TipoIndirizzo = TipoIndirizzo.Recapito, Importo = itemDataSource.Importo, Contatti = new List<ContattoDTO>() }; var mail = persona.EmailCertificata; if (string.IsNullOrEmpty(mail)) mail = persona.Email; personaMessaggio.Contatti.Add(new ContattoDTO { SelectColumn = true, TipoContatto = "Email", Valore = mail }); personaMessaggio.Contatti.Add(new ContattoDTO { SelectColumn = true, TipoContatto = "Fax", Valore = persona.Fax }); personaMessaggio.Contatti.Add(new ContattoDTO { SelectColumn = true, TipoContatto = "Cellulare", Valore = persona.Cellulare }); PersoneMessaggio.Add(personaMessaggio); } } break; } loadReportDataSource((IEnumerable<ImportiPersonaDTO>)dataSource); }
protected override void Execute(string itemClicked, AutomazioneParameters parameters) { try { var dataSource = reportViewer1.LocalReport.DataSources[0].Value; switch (itemClicked) { case "PDF": foreach (var sollecitoDataSource in _datiSollecito) { try { loadReportDataSource(new List<TestataSollecitoDTO> {sollecitoDataSource}); var pdf = SetPDF(); var fileName = parameters.SelectedPath + @"\" + Conversione.ToFileName(string.Format(@"{0} - {1}.pdf", sollecitoDataSource.Ordine, sollecitoDataSource.Nominativo)); File.WriteAllBytes(fileName, pdf); } catch (IOException ex) { _log.ErrorFormat("Errore durante la suddivisione in singoli PDF della lettera di sollecito - {0} - sollecito:{1} - azienda:{2}", ex, Utility.GetMethodDescription(), sollecitoDataSource.Id, Security.Login.Instance.CurrentLogin().Azienda); CommonMessages.DisplayWarning("Errore nella creazione dei file pdf, verificare che la cartella selezionata sia ancora accessibile e riprovare."); return; } catch (Exception ex) { _log.ErrorFormat("Errore durante la suddivisione in singoli PDF della lettera di sollecito - {0} - sollecito:{1} - azienda:{2}", ex, Utility.GetMethodDescription(), sollecitoDataSource.Id, Security.Login.Instance.CurrentLogin().Azienda); throw; } } break; case "Messaggio": PersoneMessaggio = new List<PersonaMessaggioDTO>(_datiSollecito.Count); foreach (var sollecitoDataSource in _datiSollecito) { loadReportDataSource(new List<TestataSollecitoDTO> { sollecitoDataSource }); var pdf = SetPDF(); var personaMessaggio = new PersonaMessaggioDTO { ID = sollecitoDataSource.IdPersona, NomeMessaggio = string.Format("Promemoria_{0}", DateTime.Now.ToString("dd-MM-yyyy")), OggettoMessaggio = parameters.OggettoMessaggio, DocumentoMessaggio = pdf, TestoMessaggio = parameters.TestoMessaggio, TipoIndirizzo = sollecitoDataSource.TipoIndirizzo, Importo = sollecitoDataSource.ImportoTotaleDaVersare, Contatti = new List<ContattoDTO>() }; if (_condominiDaSollecitare != null) { var personaDaSollecitare = _condominiDaSollecitare.FirstOrDefault(item => item != null && item.IdPersona == sollecitoDataSource.IdPersona); if (personaDaSollecitare != null) { var email = personaDaSollecitare.EmailCertificata; if (string.IsNullOrEmpty(email)) email = personaDaSollecitare.Email; personaMessaggio.Contatti.Add(new ContattoDTO { SelectColumn = true, TipoContatto = "Email", Valore = email }); personaMessaggio.Contatti.Add(new ContattoDTO { SelectColumn = true, TipoContatto = "Fax", Valore = personaDaSollecitare.Fax }); personaMessaggio.Contatti.Add(new ContattoDTO { SelectColumn = true, TipoContatto = "Cellulare", Valore = personaDaSollecitare.Cellulare }); } PersoneMessaggio.Add(personaMessaggio); } else { _log.DebugFormat("Condomini da sollecitare a null - {0} - itemClicked:{1} - condominio:{2} - azienda:{3}", Utility.GetMethodDescription(), itemClicked, _condominio != null ? _condominio.ID.ToString() : "<NULL>", Security.Login.Instance.CurrentLogin().Azienda); } } break; } loadReportDataSource((IEnumerable<TestataSollecitoDTO>)dataSource); } catch (Exception ex) { _log.ErrorFormat("Errore nell'esecuzione della stampa - {0} - itemClicked:{1} - condominio:{2} - azienda:{3}", ex, Utility.GetMethodDescription(), itemClicked, _condominio != null ? _condominio.ID.ToString() : "<NULL>", Security.Login.Instance.CurrentLogin().Azienda); throw; } }
protected override void Execute(string itemClicked, AutomazioneParameters parameters, IList<PersonaContattoDTO> personeSelezionate) { var document = new RicevutaRata(_note, _firma, _aziendaService); if (_banca != null) { document.Parameters["banca"].Value = _banca.Descrizione; document.Parameters["coordinateBancarie"].Value = _banca.Iban; } document.Parameters["dataRicevuta"].Value = _dataRicevuta; var amministratore = _aziendaService.GetAmministratore(); if (amministratore != null) document.Parameters["nomeAmministratore"].Value = $"{amministratore.Nome} {amministratore.Cognome}"; switch (itemClicked) { case "PDF": foreach (var itemDataSource in _dataSource) { document.DataSource = new List<RataEmissioneDTO> { itemDataSource }; document.CreateDocument(); var fileName = $@"{parameters.SelectedPath}\{itemDataSource.OrdineUnitaImmobiliare} - {itemDataSource.ID.ToString().PadLeft(8, '0')} - {Conversione.ToFileName(itemDataSource.DescrizioneSoggettoCondominio)}.pdf"; document.ExportToPdf(fileName); } break; case "Messaggio": PersoneMessaggio = new List<PersonaMessaggioDTO>(_dataSource.Count); foreach (var persona in personeSelezionate) { var itemDataSource = _dataSource.Where(item => item.IdPersona == persona.ID).ToList(); if (itemDataSource.Any()) { document.DataSource = itemDataSource; document.CreateDocument(); var stream = new MemoryStream(); document.ExportToPdf(stream); var personaMessaggio = new PersonaMessaggioDTO { ID = itemDataSource.FirstOrDefault().IdPersona, NomeMessaggio = $"RicevutaRata_{DateTime.Now.ToString("dd-mm-yyyy")}", OggettoMessaggio = parameters.OggettoMessaggio, DocumentoMessaggio = stream.ToArray(), TestoMessaggio = parameters.TestoMessaggio, TipoIndirizzo = TipoIndirizzo.Recapito, Importo = itemDataSource.Sum(item => item.Importo), Contatti = new List<ContattoDTO>() }; if (persona != null) { var email = persona.EmailCertificata; if (string.IsNullOrEmpty(email)) email = persona.Email; personaMessaggio.Contatti.Add(new ContattoDTO { SelectColumn = true, TipoContatto = "Email", Valore = email }); personaMessaggio.Contatti.Add(new ContattoDTO { SelectColumn = true, TipoContatto = "Fax", Valore = persona.Fax }); personaMessaggio.Contatti.Add(new ContattoDTO { SelectColumn = true, TipoContatto = "Cellulare", Valore = persona.Cellulare }); } PersoneMessaggio.Add(personaMessaggio); } } break; } }
/// <summary> /// Funzione per l'invio del messaggio email /// </summary> /// <param name="idAzienda">Identificativo dell'azienda</param> /// <param name="personaMessaggioDTO">DTO contenente l'identificativo della persona alla quale il messaggio viene inviato e altre informazioni utili all'invio del messaggio</param> /// <param name="condominio">Condominio a cui appartiene la persona destinataria del messaggio può non essere definito</param> /// <param name="idUnitaImmobiliare">Identificativo dell'unità immobiliare</param> /// <param name="idIncaricatoAttivita">Identificativo del soggetto incaricato allo svolgimento dell'attività</param> /// <param name="motivoMessaggio">Indica il motivo che ha portato all'invio del messaggio (es: Sollecito)</param> /// <param name="oggetto">Oggetto del messaggio</param> /// <param name="testo">Testo del messaggio</param> /// <param name="destinatari">Destinatari del messaggio</param> /// <param name="mittente">Mittente del messaggio</param> /// <param name="emailRapportino">Se presente è l'indirizzo email a cui saranno inviate eventuali risposte, altrimenti viene usato il mittente</param> /// <param name="allegati">Eventuali allegati del messaggio</param> /// <param name="parametriInvioLettera">Parametri er l'invio della lettera: Se tipo è <value>alert</value> il messaggio viene inviato creando un messaggio di tipo alert (solo outlook) - <value>Asincrono</value>: indica se deve essere eseguito un invio asincrono</param> /// <param name="idFornitore">Identificativo del fornitore</param> /// <param name="idResponsabile">Identificativo del responsabile dell'attività</param> /// <returns>Restituisce una lista di: codice dell'invio, eventuali messaggi, il flag che indica se l'invio è riuscito e il corpo, sotto forma di array di byte, del messaggio in formato standard 'eml'</returns> public IList<RisultatoInvioMessaggio> InvioMessaggio(int idAzienda, PersonaMessaggioDTO personaMessaggioDTO, Condominio condominio, int? idUnitaImmobiliare, int? idFornitore, int? idResponsabile, int? idIncaricatoAttivita, MotivoMessaggio motivoMessaggio, string oggetto, string testo, IList<string> destinatari, string mittente, string emailRapportino, IList<DocumentInfo> allegati, ParametriInvioLettera parametriInvioLettera) { var message = string.Empty; var invioRiuscito = true; // Impostazioni Azienda var impostazioniAzienda = _daoFactory.GetImpostazioniAziendaDao().GetByAzienda(idAzienda) ?? new ImpostazioniAzienda(_daoFactory.GetAziendaDao().Find(idAzienda, false)); // Applico la stampa unione Persona persona = null; if(personaMessaggioDTO != null) { int? idCondominio = null; if (condominio != null) idCondominio = condominio.ID; persona = _daoFactory.GetPersonaDao().GetById(personaMessaggioDTO.ID, false); var parametri = new ParametriStampaUnione(persona.ID, idUnitaImmobiliare, idResponsabile, idIncaricatoAttivita, idFornitore, idCondominio, null, personaMessaggioDTO.TipoIndirizzo, personaMessaggioDTO.Importo, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null); oggetto = _messaggisticaService.ApplicaStampaUnione(oggetto, parametri, idAzienda); testo = _messaggisticaService.ApplicaStampaUnione(testo, parametri, idAzienda); } // Mittente if (string.IsNullOrEmpty(mittente)) { var identificazioneMittente = _configurationService.GetIdentificazioneMittente(idAzienda, TipoMessaggio.Email, TipoIndirizzo.Recapito); mittente = identificazioneMittente.Nome; } if (string.IsNullOrEmpty(mittente) && !string.IsNullOrEmpty(emailRapportino)) mittente = emailRapportino; else if (string.IsNullOrEmpty(mittente)) message = "Non è possibile inviare un messaggio senza aver definito il mittente"; var fullPathFile = string.Empty; var messaggio = new DocumentInfo(); // ======================================================== // Crezione del mail message solo se NON si tratta di messaggi automatici // ======================================================== var referenceId = Guid.NewGuid().ToString(); if (motivoMessaggio != MotivoMessaggio.ScadenzaContratto && motivoMessaggio != MotivoMessaggio.NotificaResponsabileAttivita) { var mailMessage = new MailMessage(); if (string.IsNullOrEmpty(message) && !string.IsNullOrEmpty(mittente)) { try { mailMessage.From = new MailAddress(mittente); } catch (Exception ex) { invioRiuscito = false; message = "Mittente errato: " + mittente; _log.ErrorFormat("Errore inaspettato durante l'invio della mail - IMPOSTAZIONE MITTENTE - {0} - mittente:{1} - oggetto:{2} - destinatario:{3}", ex, Utility.GetMethodDescription(), mittente, oggetto, destinatari[0]); } if (invioRiuscito) { foreach (var destinatario in destinatari.Distinct()) { try { if (!string.IsNullOrEmpty(destinatario)) { if (!destinatario.Trim().Contains(" ")) { // Se il destinatario è uno solo uso il campo 'To' se invece è più di uno uso l'undisclosed recipient per evitare di // avere in chiaro tutti i destinatari dei messaggi if (ConfigurationManager.AppSettings["IsTest"] != null && bool.Parse(ConfigurationManager.AppSettings["IsTest"])) { if (destinatari.Count > 1) mailMessage.Bcc.Add("*****@*****.**"); else mailMessage.To.Add("*****@*****.**"); } else { if (destinatari.Count > 1) mailMessage.Bcc.Add(destinatario.Trim()); else mailMessage.To.Add(destinatario.Trim()); } } else { invioRiuscito = false; message = "L'email del destinatario non può contenere spazi: " + destinatario; _log.WarnFormat("Errore inaspettato durante l'invio della mail - EMAIL DESTINATARIO CON SPAZI - {0} - destinatario:{1} - mittente:{2} - oggetto:{3}", Utility.GetMethodDescription(), destinatario, mittente, oggetto); } } } catch (Exception ex) { invioRiuscito = false; message = "Destinatario errato: " + destinatario; _log.WarnFormat("Errore inaspettato durante l'invio della mail - IMPOSTAZIONE DESTINATARIO - {0} - destinatario:{1} - mittente:{2} - oggetto:{3}", ex, Utility.GetMethodDescription(), destinatario, mittente, oggetto); } } if (mailMessage.To.Count == 0 && mailMessage.Bcc.Count == 0) { invioRiuscito = false; message = persona == null ? "Non sono presenti destinatari validi." : $"Non sono presenti destinatari validi: {persona.DisplayName}"; _log.WarnFormat("Errore inaspettato durante l'invio della mail - {0} - {1} - mittente:{2} - oggetto:{3}", message.ToUpper(), Utility.GetMethodDescription(), mittente, oggetto); } if (invioRiuscito) { mailMessage.Subject = oggetto; mailMessage.Body = testo; if (testo.Contains('<') && testo.Contains('>')) mailMessage.IsBodyHtml = true; // Trucco per ottenere un messaggio di tipo "Alert" per outlook if (parametriInvioLettera.Tipo == "alert") mailMessage.Headers.Add("message-id", "<3BD50098E401463AA228377848493927-1>"); if (allegati != null) { foreach (var documento in allegati) { if (documento.Body != null) { var fileExtension = documento.FileExtension; if (string.IsNullOrEmpty(fileExtension)) { var extension = _fileTypeDetector.GetFileExtension(new MemoryStream(documento.Body)); if (!string.IsNullOrEmpty(extension)) fileExtension = $".{extension}".ToLower(); } if (!string.IsNullOrEmpty(fileExtension)) { string mimeType; var mimeTypeList = _daoFactory.GetMimeTypeDao().GetByExtension(fileExtension); if (mimeTypeList.Count > 0) { mimeType = mimeTypeList[0].Tipo; // add the attachment from a stream var memStream = new MemoryStream(documento.Body); var streamWriter = new StreamWriter(memStream); streamWriter.Flush(); // this is quite important memStream.Position = 0; var ct = new ContentType(mimeType) { Name = documento.FileName + fileExtension }; var attachment = new Attachment(memStream, ct); mailMessage.Attachments.Add(attachment); } else { _log.ErrorFormat("Il documento allegato non è stato riconosciuto - {0} - documento:{1} - fileName:{2} - extension:{3}", Utility.GetMethodDescription(), documento.FileId, documento.FileName, fileExtension); } } } else { _log.WarnFormat("ATTENZIONE: Tentativo di allegare un documento vuoto - {0} - documento:{1} - azienda:{2}", Utility.GetMethodDescription(), documento.FileId, idAzienda); } } } if (motivoMessaggio != MotivoMessaggio.ScadenzaContratto && motivoMessaggio != MotivoMessaggio.NotificaResponsabileAttivita) { try { mailMessage.DeliveryNotificationOptions = DeliveryNotificationOptions.OnSuccess | DeliveryNotificationOptions.OnFailure; string destinatarioRicevuta; switch (impostazioniAzienda.ControlloRapportinoMessaggistica) { case ControlloRapportino.Mittente: destinatarioRicevuta = mittente; break; case ControlloRapportino.Automatico: destinatarioRicevuta = "*****@*****.**"; break; case ControlloRapportino.IndirizzoSpecifico: destinatarioRicevuta = impostazioniAzienda.EmailControlloRapportinoMessaggistica; break; default: destinatarioRicevuta = mittente; break; } mailMessage.Headers.Add("Return-Receipt-To", destinatarioRicevuta); mailMessage.Headers.Add("Disposition-Notification-To", destinatarioRicevuta); mailMessage.Headers.Add("X-Confirm-Reading-To", destinatarioRicevuta); // ======================================================== // Salvare il messaggio in formato .eml // ======================================================== var emailStream = new MemoryStream(); mailMessage.MessageId = referenceId; mailMessage.Save(emailStream, MessageFormat.Eml); messaggio.Body = emailStream.ToArray(); messaggio.FileName = $"Email_{DateTime.Now.ToString("dd-mm-yyyy")}.eml"; messaggio.FileExtension = ".eml"; // Aggiungo la mail generata alla lista degli allegati // ---------------------------------------------------- var documentMessage = _documentService.SaveDocument(messaggio.Body, messaggio.FileName, messaggio.FileExtension, null, idAzienda); if (documentMessage.Documento != null) { fullPathFile = documentMessage.FilePath; var checksum = documentMessage.Documento.Checksum; messaggio.FileId = checksum; if (allegati == null) allegati = new List<DocumentInfo>(); allegati.Add(messaggio); } } catch (Exception ex) { invioRiuscito = false; message = "Si sono verificati problemi nel salvataggio del file EML :" + Environment.NewLine + ex.Message; _log.FatalFormat("Errore inaspettato durante il salvataggio del file eml - {0} - oggetto:{1} - destinatario:{2}", ex, Utility.GetMethodDescription(), oggetto, destinatari.Aggregate("<NESSUNO>", (current, dest) => current + (dest + ", "))); } } } } } else invioRiuscito = false; } // ======================================================== // Invio del messaggio // ======================================================== Delivery delivery = null; if (invioRiuscito) { try { var deliveryMessages = new List<DeliveryMessage>(destinatari.Count); if (motivoMessaggio == MotivoMessaggio.ScadenzaContratto || motivoMessaggio == MotivoMessaggio.NotificaResponsabileAttivita) { foreach (var destinatario in destinatari) { var deliveryMessage = new DeliveryMessage(new System.Net.Mail.MailAddress(destinatario, destinatario), oggetto, testo, referenceId); deliveryMessages.Add(deliveryMessage); } } else { var nominativo = string.Empty; if (persona != null) nominativo = persona.DisplayName; var destinatario = string.Join(",", destinatari); deliveryMessages.Add(new DeliveryMessage(fullPathFile, nominativo, destinatario, referenceId)); } // Se non viene passato in input creo una nuova delivery delivery = new Delivery(idAzienda, motivoMessaggio.ToString(), deliveryMessages, new System.Net.Mail.MailAddress(mittente)); if (personaMessaggioDTO != null && personaMessaggioDTO.IdDelivery != null) delivery.Id = personaMessaggioDTO.IdDelivery.Value; _mailService.Send(delivery); } catch (Exception ex) { invioRiuscito = false; message = "Si sono verificati problemi nell'invio del messaggio :" + Environment.NewLine + ex.Message; _log.ErrorFormat("Errore inaspettato durante l'invio della mail - {0} - oggetto:{1} - testo:{2} - destinatario:{3} - nominativo:{4} - emlFile:{5}", ex, Utility.GetMethodDescription(), oggetto, testo, destinatari.Aggregate("<NESSUNO>", (current, dest) => current + (dest + ", ")), persona != null ? persona.DisplayName : "<NULL>", fullPathFile); } } if (invioRiuscito) { var destinatarioStr = string.Empty; foreach (var dest in destinatari) { if (!string.IsNullOrEmpty(destinatarioStr)) destinatarioStr += ","; destinatarioStr += dest; } message = persona == null ? $"La mail è stata correttamente accodata: {destinatarioStr}" : $"La mail è stata correttamente accodata: {persona.DisplayName} - {destinatarioStr}"; // ===================================== // Controllo rapportino // ===================================== //// Crea un trigger che parte tra 10 minuti e ogni minuto per 30 volte controlla le mail in arrivo. //Trigger trigger = new PeriodicTrigger(DateTime.UtcNow.AddSeconds(10), null, TimeSpan.FromMinutes(1), 30); //// Create a job specification for my job. //var jobSpec = new JobSpec("Controllo rapportino", "Verifica e salvataggio email contenente rapportino di conferma di invio FAX", "ConfermaRicezioneMessaggio", trigger); ////jobSpec.JobData = jobData; //// Create a job. If it already exists in the persistent store then automatically update //// its definition to reflect the provided job specification. This is a good idea when using //// a scheduler cluster because the job is guaranteed to be created exactly once and kept up //// to date without it ever being accidentally deleted by one instance while another instance //// is processing it. //_scheduler.CreateJob(jobSpec, CreateJobConflictAction.Replace); //// Start the scheduler. //_scheduler.Start(); } var risultatoInvio = new RisultatoInvioMessaggio(referenceId, referenceId, invioRiuscito, message, new DocumentInfo()); try { if (invioRiuscito) { if (motivoMessaggio != MotivoMessaggio.ScadenzaContratto && motivoMessaggio != MotivoMessaggio.NotificaResponsabileAttivita) { var allegatiMessaggio = new List<DocumentInfo>(); if (allegati != null) allegatiMessaggio = allegati.ToList(); var storicoMessaggio = _messaggisticaService.StoricizzaMessaggio(persona, condominio, risultatoInvio, motivoMessaggio, oggetto, testo, destinatari, mittente, emailRapportino, allegatiMessaggio, TipoMessaggio.Email); if (storicoMessaggio != null) risultatoInvio.IdMessaggio = storicoMessaggio.ID; } risultatoInvio.IdDelivery = delivery.Id; } } catch(Exception ex) { _log.ErrorFormat("Errore inaspettato durante la storicizzazione del messaggio - {0} - oggetto:{1} - destinatario:{2}", ex, Utility.GetMethodDescription(), oggetto, destinatari.Aggregate("<NESSUNO>", (current, dest) => current + (dest + ", "))); throw; } return new List<RisultatoInvioMessaggio> { risultatoInvio}; }
protected override void Execute(string itemClicked, AutomazioneParameters parameters, IList<PersonaContattoDTO> personeSelezionate) { var document = new BilancioAnnuale(_dataSource, _condominio, _esercizio, _parameters, _impostazioneReportDTO, _reportKey); switch (itemClicked) { case "PDF": var fileName = string.Format(@"{0}\{1} - {2}.pdf", parameters.SelectedPath, _condominio.Codice, Conversione.ToFileName(_condominio.Descrizione)); try { document.ExportToPdf(fileName); } catch (IOException ex) { fileName = string.Format(@"{0}\{1} - {2}_{3}.pdf", parameters.SelectedPath, _condominio.Codice, Conversione.ToFileName(_condominio.Descrizione), Guid.NewGuid()); document.ExportToPdf(fileName); throw; } break; case "Messaggio": PersoneMessaggio = new List<PersonaMessaggioDTO>(personeSelezionate.Count); foreach (var persona in personeSelezionate) { var stream = new MemoryStream(); document.ExportToPdf(stream); var personaMessaggio = new PersonaMessaggioDTO { ID = persona.ID, NomeMessaggio = string.Format("RipartoConsuntivo_{0}", DateTime.Now.ToString("dd-mm-yyyy")), OggettoMessaggio = parameters.OggettoMessaggio, DocumentoMessaggio = stream.ToArray(), TestoMessaggio = parameters.TestoMessaggio, TipoIndirizzo = TipoIndirizzo.Recapito, Contatti = new List<ContattoDTO>() }; var email = persona.EmailCertificata; if (string.IsNullOrEmpty(email)) email = persona.Email; personaMessaggio.Contatti.Add(new ContattoDTO { SelectColumn = true, TipoContatto = "Email", Valore = email }); personaMessaggio.Contatti.Add(new ContattoDTO { SelectColumn = true, TipoContatto = "Fax", Valore = persona.Fax }); personaMessaggio.Contatti.Add(new ContattoDTO { SelectColumn = true, TipoContatto = "Cellulare", Valore = persona.Cellulare }); PersoneMessaggio.Add(personaMessaggio); } break; } }
public IList<RisultatoInvioMessaggio> InvioMessaggio(int idAzienda, PersonaMessaggioDTO personaMessaggioDTO, Condominio condominio, int? idUnitaImmobiliare, int? idFornitore, int? idResponsabile, int? idIncaricatoAttivita, MotivoMessaggio motivoMessaggio, string oggetto, string testo, IList<string> destinatari, string mittente, string emailRapportino, IList<DocumentInfo> allegati, ParametriInvioLettera parametriInvioLettera) { if (destinatari.Count > 0) { if(allegati.Count == 0) return new List<RisultatoInvioMessaggio> { new RisultatoInvioMessaggio(null, null, false, "Non è presente nessun messaggio da inviare", new DocumentInfo()) }; _parametriInvioLettera = parametriInvioLettera; var results = new List<RisultatoInvioMessaggio>(); var allegatiLista = new List<DocumentInfo>(allegati.Count + 1); Persona persona = null; if (personaMessaggioDTO != null) persona = _daoFactory.GetPersonaDao().Find(personaMessaggioDTO.ID, false); try { // ===================================== // Elaborazione documenti allegati // ===================================== var nomiFiles = new string[allegati.Count]; var contenutoAllegati = new byte[allegati.Count][]; // ------------------------------------- // Allegati // ------------------------------------- var index = 0; foreach (var documento in allegati) { var body = documento.Body; var fileExtension = documento.FileExtension; var fileName = documento.FileName; // Se richiesto converto l'allegato in PDF if (parametriInvioLettera.FormatoDocumento == FormatoDocumentoEnum.Pdf) { try { var doc = new Document(new MemoryStream(documento.Body)); var pdfStream = new MemoryStream(); doc.Save(pdfStream, SaveFormat.Pdf); body = pdfStream.ToArray(); fileExtension = ".pdf"; } catch (UnsupportedFileFormatException ex) { _log.WarnFormat("Formato file non supportato - {0} - fileId:{1} - fileName:{2} - extension:{3}", ex, Utility.GetMethodDescription(), documento.FileId, documento.FileName, documento.FileExtension); } catch (Exception ex) { _log.ErrorFormat("Formato file non supportato - {0} - fileId:{1} - fileName:{2} - extension:{3}", ex, Utility.GetMethodDescription(), documento.FileId, documento.FileName, documento.FileExtension); } } nomiFiles[index] = fileName + fileExtension; contenutoAllegati[index] = body; // Se NON creo un file singolo i singoli documenti li allego al messaggio if(parametriInvioLettera.Aggregazione == AggregazioneDocumentiEnum.DocumentiSeparati) allegatiLista.Add(new DocumentInfo(body, documento.FileId, fileName, fileExtension)); index++; } var nomeFile = string.Empty; // ===================================== // Creazione dello zip // ===================================== byte[] messaggio = null; if (parametriInvioLettera.Aggregazione == AggregazioneDocumentiEnum.DocumentiSeparati) { // ------------------------------------------ // Singolo ZIP con tutti i documenti per persona // ------------------------------------------ var stream = new MemoryStream(); using (var zipFile = new ZipFile()) { for (var i = 0; i < index; i++) { var zipEntry = zipFile.AddEntry(nomiFiles[i], contenutoAllegati[i]); } zipFile.Save(stream); } stream.Position = 0; // ------------------------------------------ // Aggiungo allo zip unico // ------------------------------------------ if (_fileSingolo == null) _fileSingolo = new ZipFile(); nomeFile = persona != null ? $"{(_fileSingolo.Count + 1).ToString().PadLeft(3, '0')} - {persona.ID.ToString().PadLeft(8, '0')} - {persona.DisplayName}.zip" : oggetto; _fileSingolo.AddEntry(nomeFile, stream); messaggio = stream.ToArray(); } else { if (index > 0) { // Se è presente più di un allegato eseguo veramente un merge, altrimenti, per evitare problemi // di orientamento e dimensione del pdf finale, se ho un solo allegato prendo questo come documento finale if (index > 1) { if (parametriInvioLettera.FormatoDocumento == FormatoDocumentoEnum.Pdf) { var pdfMerge = new PdfMerge { EnablePagination = parametriInvioLettera.RinumeraPagine }; IList<byte[]> documenti = new List<byte[]>(contenutoAllegati.Length); for (var i = 0; i < index; i++) { if (nomiFiles[i].EndsWith(".pdf")) documenti.Add(contenutoAllegati[i]); } messaggio = pdfMerge.Merge(documenti, true); } else { // The document that the other documents will be appended to. var doc = new Document(); // We should call this method to clear this document of any existing content. doc.RemoveAllChildren(); for (var i = 0; i < index; i++) { try { // Open the document to join. var srcDoc = new Document(new MemoryStream(contenutoAllegati[i])); // Append the source document at the end of the destination document. doc.AppendDocument(srcDoc, ImportFormatMode.UseDestinationStyles); // In automation you were required to insert a new section break at this point, however in Aspose.Words we // don't need to do anything here as the appended document is imported as separate sectons already. // If this is the second document or above being appended then unlink all headers footers in this section // from the headers and footers of the previous section. if (i > 1) doc.Sections[i].HeadersFooters.LinkToPrevious(false); } catch (UnsupportedFileFormatException ex) { _log.WarnFormat("Documento con formato non riconosciuto - {0} - index:{1}", ex, Utility.GetMethodDescription(), index); } } var saveFormat = SaveFormat.Doc; if(parametriInvioLettera.FormatoDocumento == FormatoDocumentoEnum.Docx) saveFormat = SaveFormat.Docx; using (var stream = new MemoryStream()) { doc.Save(stream, saveFormat); messaggio = stream.ToArray(); } } } else messaggio = contenutoAllegati[0]; // ---------------------------------------------------------------- // Aggiungo allo zip unico se richiesto un file unico per persona // ---------------------------------------------------------------- if (parametriInvioLettera.Aggregazione == AggregazioneDocumentiEnum.DocumentoUnicoPerPersona) { if (_fileSingolo == null) _fileSingolo = new ZipFile(); nomeFile = persona != null ? $"{(_fileSingolo.Count + 1).ToString().PadLeft(3, '0')} - {persona.ID.ToString().PadLeft(8, '0')} - {persona.DisplayName}.{parametriInvioLettera.FormatoDocumento.ToString().ToLower()}" : oggetto; if (string.IsNullOrEmpty(nomeFile) && nomiFiles.Length > 0 && !string.IsNullOrEmpty(nomiFiles[0])) nomeFile = nomiFiles[0]; if (string.IsNullOrEmpty(nomeFile)) nomeFile = $"Documento.{parametriInvioLettera.FormatoDocumento.ToString().ToLower()}"; _fileSingolo.AddEntry(nomeFile, messaggio); } else { if (parametriInvioLettera.FormatoDocumento == FormatoDocumentoEnum.Pdf) { var pdfMerge = new PdfMerge { EnablePagination = parametriInvioLettera.RinumeraPagine }; if (_documentoSingolo != null) pdfMerge.AddDocument(_documentoSingolo); pdfMerge.AddDocument(messaggio); using (var stream = new MemoryStream()) { pdfMerge.Merge(stream, true); _documentoSingolo = stream.ToArray(); } } else { var doc = new Document(); doc.RemoveAllChildren(); if (_documentoSingolo != null) { var singleDoc = new Document(new MemoryStream(_documentoSingolo)); doc.AppendDocument(singleDoc, ImportFormatMode.UseDestinationStyles); } var newDoc = new Document(new MemoryStream(messaggio)); doc.AppendDocument(newDoc, ImportFormatMode.UseDestinationStyles); doc.Sections[0].HeadersFooters.LinkToPrevious(false); var saveFormat = SaveFormat.Doc; if (parametriInvioLettera.FormatoDocumento == FormatoDocumentoEnum.Docx) saveFormat = SaveFormat.Docx; using (var stream = new MemoryStream()) { doc.Save(stream, saveFormat); _documentoSingolo = stream.ToArray(); } } } } } if (messaggio != null) { var fileExtension = $".{parametriInvioLettera.FormatoDocumento.ToString().ToLower()}"; var documentMessage = _documentService.SaveDocument(messaggio, nomeFile, fileExtension, null, idAzienda); if (documentMessage.Documento != null) { var checkSumMessaggio = documentMessage.Documento.Checksum; var destinatarioMessaggio = "Tutti"; if (persona != null) destinatarioMessaggio = persona.DisplayName; var messaggioInvio = $"Messaggio preparato per l'invio: {destinatarioMessaggio}"; var document = new DocumentInfo(); var nomeDocumento = persona != null ? $"Lettera {motivoMessaggio} {DateTime.Today:d MMMM yyyy} - {persona.DisplayName}" : $"Lettera {motivoMessaggio} {DateTime.Today:d MMMM yyyy}"; if (parametriInvioLettera.ApriFileGenerato) { document = new DocumentInfo(messaggio, checkSumMessaggio, nomeDocumento, fileExtension) { BodyText = oggetto }; allegatiLista.Add(document); } var resultInvio = new RisultatoInvioMessaggio(checkSumMessaggio, checkSumMessaggio, true, messaggioInvio, document); var storicoMessaggio = _messaggisticaService.StoricizzaMessaggio(persona, condominio, resultInvio, motivoMessaggio, oggetto, testo, destinatari, mittente, emailRapportino, allegatiLista, TipoMessaggio.Manuale); if (storicoMessaggio != null) resultInvio.IdMessaggio = storicoMessaggio.ID; results.Add(resultInvio); } } } catch (Exception ex) { _log.ErrorFormat("Errore inaspettato durante la creazione del messaggio - {0} - oggetto:{1} - destinatario:{2}", ex, Utility.GetMethodDescription(), oggetto, destinatari[0]); throw; } return results; } return new List<RisultatoInvioMessaggio> { new RisultatoInvioMessaggio(null, null, false, "Non è definito nessun destinatario", new DocumentInfo()) }; }