public static string ProcessAlert(ICondominioRiferimento alert) { //if (ConfigurationManager.AppSettings["IsTest"] != null && bool.Parse(ConfigurationManager.AppSettings["IsTest"])) // return null; var log = LogManager.GetLogger("Sfera"); // Creiamo un oggetto VelocityContext, simile in qualche modo ad HttpContext // Serve per contenere gli oggetti di cui fare il merging nel template var context = new VelocityContext(); var writer = new StringWriter(); Attivita attivita = null; var alertAttivita = alert as AlertAttivita; if (alertAttivita != null) attivita = alertAttivita.Attivita; // Inseriamo i nostri dati in context var referente = alert.Destinatario.GetReferenteEffettivo(alert.GetCondominio(), attivita); if (referente != null && referente.PersonaRiferimento != null) { context.Put("persona", referente.PersonaRiferimento); context.Put("alert", alert); context.Put("condominio", alert.GetCondominio()); DateTime? dataScadenza = null; var alertPremio = alert as AlertPremioContratto; if (alertPremio != null) { context.Put("contratto", alertPremio.ContrattoRiferimento); dataScadenza = ((AssicurazioneContratto)alertPremio.ContrattoRiferimento).ScadenzaPremio; } var alertScadenza = alert as AlertScadenzaContratto; if (alertScadenza != null) { context.Put("contratto", alertScadenza.ContrattoRiferimento); dataScadenza = alertScadenza.ContrattoRiferimento.Scadenza; } if (attivita != null) { dataScadenza = attivita.DataFinePrevista; context.Put("attivita", attivita); } context.Put("dataScadenza", dataScadenza.GetValueOrDefault().ToShortDateString()); try { Template template = null; if (alertScadenza != null) template = Velocity.GetTemplate("alertContrattoTemplate.vm"); else if (alertPremio != null) template = Velocity.GetTemplate("alertPremioTemplate.vm"); else if (alertAttivita != null) template = Velocity.GetTemplate("alertAttivitaTemplate.vm"); if (template != null) template.Merge(context, writer); } catch (ResourceNotFoundException ex) { throw; // il template non è stato trovato } catch (ParseErrorException) { // errore durante il merging del template } } else { log.WarnFormat("Alert NON processabile perchè è fallita l'identificazione del destinatario - {0} - alert:{1}", Library.Utility.GetMethodDescription(), alert.ID); } return writer.GetStringBuilder().ToString(); }
private void notifyEmailAlert(ICondominioRiferimento alert, IDaoFactory daoFactory) { try { if (ConfigurationManager.AppSettings["IsTest"] != null && bool.Parse(ConfigurationManager.AppSettings["IsTest"])) return; if(alert != null) { Attivita attivita = null; var alertAttivita = alert as AlertAttivita; if (alertAttivita != null) attivita = alertAttivita.Attivita; if (alert.GetCondominio() != null && alert.Destinatario != null) { var referente = alert.Destinatario.GetReferenteEffettivo(alert.GetCondominio(), attivita); if (referente != null && referente.Azienda.ID == alert.GetCondominio().Azienda.ID) { if (referente.PersonaRiferimento != null) { var emailAddress = new ContattoCollection(referente.PersonaRiferimento.Contatti).GetFirstContatto<Email>(); if (!string.IsNullOrEmpty(emailAddress?.Valore)) { // Destinatari var destinatari = new List<string>(1); if (ConfigurationManager.AppSettings["IsTest"] != null && bool.Parse(ConfigurationManager.AppSettings["IsTest"])) destinatari.Add("*****@*****.**"); else destinatari.Add(emailAddress.Valore); // Mittente var mittente = ConfigurationManager.AppSettings["MailFrom"]; int? idDelivery = null; if (_delivery != null) idDelivery = _delivery.Id; var result = _messageService.InvioMessaggio(alert.GetCondominio().Azienda.ID, new PersonaMessaggioDTO { ID = referente.PersonaRiferimento.ID, IdDelivery = idDelivery}, alert.GetCondominio(), null, null, null ,null, MotivoMessaggio.ScadenzaContratto, ConfigurationManager.AppSettings["MailSubject"], NVelocityTemplateEngine.ProcessAlert(alert), destinatari, mittente, mittente, null, new ParametriInvioLettera { Asincrono = true })[0]; if (!result.InvioRiuscito) { _log.DebugFormat("Notify: Notifica alert NON ha avuto successo: {0} - il:{1} - ora:{2} - alert:{3}", result.MessaggioInvio, DateTime.Today.ToShortDateString(), DateTime.Now.ToShortTimeString(), alert.ID); } else { if (_delivery == null) _delivery = daoFactory.GetDeliveryPoDao().Find(result.IdDelivery, false); } } } else { _log.DebugFormat("ATTENZIONE: Tentativo di inviare alert ad un referente per il quale non è associata nessuna persona fisica - {0} - idAlert:{1} - idReferente:{2}", Library.Utility.GetMethodDescription(), alert.ID, referente.ID); } } else { _log.DebugFormat("ATTENZIONE: Tentativo di inviare alert a referente di una azienda diversa da quella del contratto - {0} - alert:{1} - referent:{2}", Library.Utility.GetMethodDescription(), alert.ID, referente?.ID.ToString() ?? "<NULL>"); } } } } catch (Exception ex) { _log.ErrorFormat("Errore inaspettato durante la notifica dell'alert - {0} - alert:{1}", ex, Library.Utility.GetMethodDescription(), alert?.ID.ToString() ?? "<NULL>"); throw; } }