예제 #1
0
        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();
        }
예제 #2
0
        private void notifyEmailAlert(ICondominioRiferimento alert, IDaoFactory daoFactory)
        {
            try
            {
                if (ConfigurationManager.AppSettings["IsTest"] != null && bool.Parse(ConfigurationManager.AppSettings["IsTest"]))
                    return;

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

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

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

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

        }