/// <summary> /// Oggetto utilizzato per loggare la creazione delle spedizioni e i successivi invii /// </summary> /// <param name="delivery">Spedizione di riferimento</param> /// <param name="testo">Testo da loggare</param> /// <param name="nota">Eventuale nota</param> public DeliveryLog(DeliveryPo delivery, string testo, string nota = null) : base() { Testo = testo; Nota = nota; Data = DateTime.Now; Delivery = delivery; if(Delivery != null) { if(Delivery.Logs == null) Delivery.Logs = new HashSet<DeliveryLog>(); Delivery.Logs.Add(this); } }
/// <summary> /// Elabora l'oggetto <paramref name="delivery"/> accodando tutti messaggi presenti nella collection Messages /// </summary> /// <param name="delivery">Oggetto contenente tutti i messaggi da inviare</param> public void Send(Delivery delivery) { var recipients = new List<DeliveryMessagePo>(delivery.Messages.Count); DeliveryPo deliveryPo = null; if(delivery.Id > 0) deliveryPo = _daoFactory.GetDeliveryPoDao().Find(delivery.Id, false); if(deliveryPo == null) deliveryPo = new DeliveryPo(delivery.IdAzienda, delivery.Type, recipients, delivery.Sender, delivery.Cc, delivery.Bcc, delivery.ReplyTo, delivery.MaxRetry, delivery.Test); foreach (var deliveryMessage in delivery.Messages) { var deliveryMessagePo = !string.IsNullOrEmpty(deliveryMessage.EmlFile) ? new DeliveryMessagePo(deliveryPo, deliveryMessage.EmlFile, deliveryMessage.NominativoTo, deliveryMessage.EmailTo, deliveryMessage.ReferenceId) : new DeliveryMessagePo(deliveryPo, deliveryMessage.To, deliveryMessage.Subject, deliveryMessage.Body, deliveryMessage.ReferenceId); recipients.Add(deliveryMessagePo); } _daoFactory.GetDeliveryPoDao().SaveOrUpdate(deliveryPo); deliveryPo.State = StatoDelivery.DaSpedire; delivery.Id = deliveryPo.Id; var log = new DeliveryLog(deliveryPo, $"E' stata accodata una spedizione del tipo '{delivery.Type}' contenente {delivery.Messages.Count} messaggi - #{deliveryPo.Id}"); }
public bool Execute(JobExecutionContext context) { try { // ========================================================== // Gruppi di aziende // ========================================================== var gruppiAziende = SferaAziendeCache.Instance.Aziende.GroupBy(item => item.Gruppo); foreach (var item in gruppiAziende) { _log.DebugFormat("Inizio ALERT PREMIO: {0}", item.Key); var container = getContainerFromKey(item.Key); var daoFactory = container.Resolve<IDaoFactory>(); _messageService = container.Resolve<IMessageService>("messageservice.email"); _messageService.SetDaoFactory(daoFactory); var impostazioniAzienda = daoFactory.GetImpostazioniAziendaDao().GetAll(); var alertDao = daoFactory.GetAlertPremioContrattoDao(); var alertColl = alertDao.GetAll(); foreach (var alert in alertColl) { if (alert.ToNotify) { try { var impostazioneAzienda = impostazioniAzienda.FirstOrDefault(imp => imp.Azienda.ID == alert.ContrattoRiferimento.CondominioRiferimento.Azienda.ID); if(impostazioneAzienda == null || impostazioneAzienda.AlertScadenzaPremioContrattoAbilitato) notifySingleAlert(alert, daoFactory); } catch (Exception ex) { _log.ErrorFormat("Notify: Errore Alert PREMIO - Vedi messaggio successivo per dettagli - {0}", ex, Library.Utility.GetMethodDescription()); _log.ErrorFormat("Notify: Errore Alert PREMIO - {0} - contratto:{1} - alert:{2} - azienda:{3}", ex, Library.Utility.GetMethodDescription(), alert.ContrattoRiferimento.ID, alert.ID, alert.ContrattoRiferimento.CondominioRiferimento.Azienda.ID); } } } _log.DebugFormat("Inizio ALERT SCADENZA: {0}", item.Key); var alertContrattoDao = daoFactory.GetAlertScadenzaContrattoDao(); var alertContrattoColl = alertContrattoDao.GetAll(); foreach (var alert in alertContrattoColl) { if (alert.ToNotify) { try { var impostazioneAzienda = impostazioniAzienda.FirstOrDefault(imp => imp.Azienda.ID == alert.ContrattoRiferimento.CondominioRiferimento.Azienda.ID); if (impostazioneAzienda == null || impostazioneAzienda.AlertScadenzaContrattoAbilitato) notifySingleAlert(alert, daoFactory); } catch (Exception ex) { _log.ErrorFormat("Notify: Errore Alert CONTRATTO - Vedi messaggio successivo per dettagli - {0}", ex, Library.Utility.GetMethodDescription()); _log.ErrorFormat("Notify: Errore Alert CONTRATTO - {0} - contratto:{1} - alert:{2} - azienda:{3}", ex, Library.Utility.GetMethodDescription(), alert.ContrattoRiferimento.ID, alert.ID, alert.ContrattoRiferimento.CondominioRiferimento.Azienda.ID); } } } _log.DebugFormat("Inizio ALERT ATTIVITA': {0}", item.Key); var listaAlertAttivita = daoFactory.GetAlertAttivitaDao().GetAll(); foreach (var alert in listaAlertAttivita) { if (alert.ToNotify) { try { var impostazioneAzienda = impostazioniAzienda.FirstOrDefault(imp => imp.Azienda.ID == alert.Attivita.AziendaID); if (impostazioneAzienda == null || impostazioneAzienda.AlertAttivitaAbilitato) notifySingleAlert(alert, daoFactory); } catch (Exception ex) { _log.ErrorFormat("Notify: Errore Alert ATTIVITA' - Vedi messaggio successivo per dettagli - {0}", ex, Library.Utility.GetMethodDescription()); _log.ErrorFormat("Notify: Errore Alert ATTIVITA' - {0} - attività:{1} - alert:{2} - azienda:{3}", ex, Library.Utility.GetMethodDescription(), alert.Attivita.ID, alert.ID, alert.Attivita.AziendaID); } } } _log.DebugFormat("Inizio FINE: {0}", item.Key); daoFactory.GetAlertAttivitaDao().CommitChanges(); _delivery = null; } } catch (Exception ex) { _log.Error("Notify: Errore generico", ex); return false; } _log.InfoFormat("Notify: Notifica alert terminata con successo il: {0} - Ora:{1}", DateTime.Today.ToShortDateString(), DateTime.Now.ToShortTimeString()); return true; }
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; } }