private static Email ComposeDynamicEmail(EmailInformation emailInfo, object newEmailObject) { dynamic email = null; if (newEmailObject.GetType() == typeof(InvitationEmail)) { email = ComposeEmail(emailInfo, "Invitation"); //Attach a file AddAttachAttachment(email, emailInfo); } else if (newEmailObject.GetType() == typeof(EmailInfoChangeEmail)) { //write changed Info email email = ComposeEmail(emailInfo, "EmailInfoChange"); //Attach a file AddAttachAttachment(email, emailInfo); } else if (newEmailObject.GetType() == typeof(CancellationEmail)) { //Write Cancellation Email email = ComposeEmail(emailInfo, "Cancellation"); } return email; }
private static Email ComposeDynamicEmail(EmailInformation emailInfo, object newEmailObject) { dynamic email = null; if (newEmailObject.GetType() == typeof(InvitationEmail)) { email = ComposeEmail(emailInfo, "Invitation"); //Attach a file AddAttachAttachment(email, emailInfo); } else if (newEmailObject.GetType() == typeof(EmailInfoChangeEmail)) { //write changed Info email email = ComposeEmail(emailInfo, "EmailInfoChange"); //Attach a file AddAttachAttachment(email, emailInfo); } else if (newEmailObject.GetType() == typeof(CancellationEmail)) { //Write Cancellation Email email = ComposeEmail(emailInfo, "Cancellation"); } return(email); }
public static void ScheduleParticipantListEmail(EmailInformation emailInfo, DateTime listDate) { const string jobDescription = "Send list"; var currentEvent = emailInfo.CurrentEvent; RemoveOldListJob(currentEvent, jobDescription); var listJobId = BackgroundJob.Schedule(() => PostalEmailManager.SendListEmail(emailInfo, new ParticipantListEmail()), listDate); AddJobsIntoEvent(listJobId, currentEvent.Id, jobDescription); }
private static Event GetCurrentEvent(EmailInformation emailInfo) { Event currentEvent = null; try { currentEvent = Db.Events.Where(e => e.Id == emailInfo.CurrentEvent.Id) .Include(e => e.Participants) .FirstOrDefault(); } catch (Exception exception) { Console.WriteLine(exception.Message); ErrorLog.GetDefault(System.Web.HttpContext.Current).Log(new Error(new Exception(exception.Message))); } return(currentEvent); }
public static void SendListEmail(EmailInformation emailInfo, object emailObject) { var currentEvent = GetCurrentEvent(emailInfo); if (currentEvent == null) { //using Error log Class const string errorMessage = "Event returned null, no list of participants have been sent to the Organizer"; ErrorLog.GetDefault(System.Web.HttpContext.Current).Log(new Error(new Exception(errorMessage))); return; } var participants = currentEvent.Participants.ToList(); var allParticipant = participants.Count(); var respondedParticipants = participants.Count(p => p.Responce); var attendingParticipant = participants.Count(p => p.Availability); var notAttendingParticipant = allParticipant - attendingParticipant; dynamic email = new Email("ParticipantList"); email.To = emailInfo.OrganizerEmail; //ToDo:change the email of the sender email.From = "*****@*****.**"; email.EmailSubject = "Participants summary" + " " + emailInfo.CurrentEvent.Title; email.EventTitle = emailInfo.CurrentEvent.Title; email.OrganizerName = emailInfo.OrganizerName; email.AllParticipants = allParticipant; email.ParticipantAttending = attendingParticipant; email.ParticipantNotAttending = notAttendingParticipant; email.ParticipantsResponded = respondedParticipants; email.EventDetailsUrl = emailInfo.EventDetailsUrl; email.attendindParticipants = participants.Where(p => p.Availability); SendCorespondingEmail(email); }
private static dynamic ComposeEmail(EmailInformation emailInfo, string emailView) { dynamic email = new Email(emailView); email.To = emailInfo.ParticipantEmail; email.From = emailInfo.OrganizerEmail; email.Subject = emailInfo.CurrentEvent.Title + emailInfo.EmailSubject; email.EventTitle = emailInfo.CurrentEvent.Title; email.EventLocation = emailInfo.CurrentEvent.Location; email.EventsId = emailInfo.CurrentEvent.Id; email.StartDate = emailInfo.CurrentEvent.StartDate.GetValueOrDefault(); email.GetListDate = emailInfo.CurrentEvent.ListDate.GetValueOrDefault(); email.ParticipantId = emailInfo.ParticipantId; email.OrganizerName = emailInfo.OrganizerName; email.ResponseUrl = emailInfo.ResponseUrl; email.EventDetailsUrl = emailInfo.EventDetailsUrl; return(email); }
public Attachment CreateAttachment(EmailInformation emailInformation) { var eventToSend = emailInformation.CurrentEvent; var startDate = eventToSend.StartDate.GetValueOrDefault().ToUniversalTime(); var endDate = startDate.Add(TimeSpan.FromHours(4)); //Build attachment var stringBuilder = new StringBuilder(); stringBuilder.AppendLine("BEGIN:VCALENDAR"); stringBuilder.AppendLine("PRODID:-//Invitation"); stringBuilder.AppendLine("VERSION:2.0"); stringBuilder.AppendLine("METHOD:REQUEST"); stringBuilder.AppendLine("BEGIN:VEVENT"); stringBuilder.AppendLine("SUMMARY;LANGUAGE=en-us:" + eventToSend.Title); stringBuilder.AppendLine(String.Format("DTSTART:{0:yyyyMMddTHHmmssZ}", startDate)); //Verify if the time is local time stringBuilder.AppendLine(String.Format("DTSTAMP:{0:yyyyMMddTHHmmssZ}", DateTime.UtcNow)); stringBuilder.AppendLine(String.Format("DTEND:{0:yyyyMMddTHHmmssZ}", endDate)); stringBuilder.AppendLine(String.Format("LOCATION: {0}", eventToSend.Location)); stringBuilder.AppendLine(String.Format("UID:{0}", Guid.NewGuid())); stringBuilder.AppendLine(String.Format("DESCRIPTION:{0}", eventToSend.Description)); stringBuilder.AppendLine(String.Format("X-ALT-DESC;FMTTYPE=text/html:{0}", eventToSend.Title)); stringBuilder.AppendLine(String.Format("SUMMARY:{0}", eventToSend.Title)); stringBuilder.AppendLine(String.Format("ORGANIZER:MAILTO:{0}", emailInformation.OrganizerEmail)); //stringBuilder.AppendLine(string.Format("ATTENDEE;CN=\"{0}\";RSVP=TRUE:mailto:{1}", email.SenderLastName, email.From)); stringBuilder.AppendLine("BEGIN:VALARM"); stringBuilder.AppendLine("TRIGGER:-PT15M"); stringBuilder.AppendLine("ACTION:DISPLAY"); stringBuilder.AppendLine("DESCRIPTION:Reminder"); stringBuilder.AppendLine("END:VALARM"); stringBuilder.AppendLine("END:VEVENT"); stringBuilder.AppendLine("END:VCALENDAR"); //store it in Memory stream var bytes = Encoding.ASCII.GetBytes(stringBuilder.ToString()); MemoryStream stream = null; using (stream) { stream = new MemoryStream(bytes); } var contentType = new ContentType("text/calender"); // ReSharper disable once PossibleNullReferenceException contentType.Parameters.Add("method", "REQUEST"); contentType.Parameters.Add("name", String.Format("{0}'s_Invitation.ics", eventToSend.Title)); //create attachment var attachment = new Attachment(stream, contentType); //return Attachment return attachment; }
public static void SendListEmail(EmailInformation emailInfo, object emailObject) { var currentEvent = GetCurrentEvent(emailInfo); if (currentEvent == null) { //using Error log Class const string errorMessage = "Event returned null, no list of participants have been sent to the Organizer"; ErrorLog.GetDefault(System.Web.HttpContext.Current).Log(new Error(new Exception(errorMessage))); return; } var participants = currentEvent.Participants.ToList(); var allParticipant = participants.Count(); var respondedParticipants = participants.Count(p => p.Response); var numberOfAttendingParticipant = participants.Count(p => p.Availability); var notAttendingParticipant = allParticipant - numberOfAttendingParticipant; dynamic email = new Email("ParticipantList"); email.To = emailInfo.ParticipantEmail; email.From = "*****@*****.**"; email.EmailSubject = "Participants summary" + " " + emailInfo.CurrentEvent.Title; email.EventTitle = emailInfo.CurrentEvent.Title; email.OrganizerName = emailInfo.OrganizerName; email.AllParticipants = allParticipant; email.ParticipantAttending = numberOfAttendingParticipant; email.ParticipantNotAttending = notAttendingParticipant; email.ParticipantsResponded = respondedParticipants; email.EventDetailsUrl = emailInfo.EventDetailsUrl; email.attendindParticipants = participants.Where(p=>p.Availability); SendCorespondingEmail(email); }
private static void AddAttachAttachment(dynamic email, EmailInformation emailInfo) { var emailAttachment = _service.CreateAttachment(emailInfo); email.Attach(emailAttachment); }
public static void SendEmail(EmailInformation emailInfo, object newEmailObject) { var email = ComposeDynamicEmail(emailInfo, newEmailObject); SendCorespondingEmail(email); }
private static dynamic ComposeEmail(EmailInformation emailInfo, string emailView) { dynamic email = new Email(emailView); email.To = emailInfo.ParticipantEmail; email.From = "*****@*****.**"; email.Subject = emailInfo.CurrentEvent.Title + emailInfo.EmailSubject; email.EventTitle = emailInfo.CurrentEvent.Title; email.EventLocation = emailInfo.CurrentEvent.Location; email.EventsId = emailInfo.CurrentEvent.Id; email.StartDate = emailInfo.CurrentEvent.StartDate.GetValueOrDefault(); email.GetListDate = emailInfo.CurrentEvent.ListDate.GetValueOrDefault(); email.ParticipantId = emailInfo.ParticipantId; email.OrganizerName = emailInfo.OrganizerName; email.ResponseUrl = emailInfo.ResponseUrl; email.EventDetailsUrl = emailInfo.EventDetailsUrl; return email; }
private static Event GetCurrentEvent(EmailInformation emailInfo) { Event currentEvent = null; try { currentEvent = Db.Events.Where(e => e.Id == emailInfo.CurrentEvent.Id) .Include(e => e.Participants) .FirstOrDefault(); } catch (Exception exception) { Console.WriteLine(exception.Message); ErrorLog.GetDefault(System.Web.HttpContext.Current).Log(new Error(new Exception(exception.Message))); } return currentEvent; }
public ActionResult DeleteConfirmed(int id) { var user = _service.GetUser(); var @event = _db.Events.Include(ev => ev.Participants) .FirstOrDefault(e => (e.Id == id) && (e.SchedulerUserId == UserId)); //if event hasn't occured notify users of cancellation if (_service.EventHasNotPassed(@event)) { var currentEvent = _db.Events.Where(e => e.Id == @event.Id) .Include(e => e.Participants).FirstOrDefault(); if (currentEvent == null) { return View("error"); } var participants = currentEvent.Participants.ToList(); foreach (var participant in participants) { var emailInfo = new EmailInformation { CurrentEvent = @event, OrganizerEmail = user.UserName, OrganizerName = user.FirstName, EmailSubject = " cancellation", ParticipantEmail = participant.Email, ParticipantId = participant.Id }; PostalEmailManager.SendEmail(emailInfo, new CancellationEmail()); } //Remove Scheduled emails for deleted Event JobManager.RemoveScheduledJobs(currentEvent); } _db.Events.Remove(@event); _db.SaveChanges(); return RedirectToAction("Index"); }
public ActionResult Edit([Bind(Include = "Id,Title,Location,Description,StartDate,EndDate,ReminderDate,ListDate,SchedulerUserId")] Event eventToEdit, int? id) { var results = eventToEdit.StartDate.GetValueOrDefault().CompareTo(eventToEdit.ListDate.GetValueOrDefault()); if (results < 0) { ModelState.AddModelError("dateError", "Enter date before Starting date"); } if (!ModelState.IsValid) { return View(eventToEdit); } _db.Entry(eventToEdit).State = EntityState.Modified; _db.SaveChanges(); var remanderDate = Service.GetRemanderDate(eventToEdit); var listDate = Service.GetListDate(eventToEdit); //Remove scheduled jobs of this event JobManager.RemoveScheduledJobs(eventToEdit); #region Send update emails to participants //Get Participants var currentEvent = _db.Events .Where(e => e.Id == eventToEdit.Id) .Include(e => e.Participants) .FirstOrDefault(); if (currentEvent == null) { return View("Error"); } var participants = currentEvent.Participants.ToList(); var user = _service.GetUser(); EmailInformation emailInfo = null; var emails = new List<EmailInformation>(); //There is no participants if (participants.Count == 0) { return RedirectToAction("Index"); } foreach (var participant in participants) { var participantId = participant.Id; var detailsUrl = Url.Action("Details", "Response", new RouteValueDictionary(new { id = currentEvent.Id }), "https"); var responseUrl = Url.Action("Response", "Response", new RouteValueDictionary(new { id = currentEvent.Id, pId = participantId }), "https"); emailInfo = new EmailInformation { CurrentEvent = currentEvent, OrganizerName = user.FirstName + " " + user.LastName, OrganizerEmail = user.UserName, ParticipantId = participantId, ParticipantEmail = participant.Email, EmailSubject = " changes.", ResponseUrl = responseUrl, EventDetailsUrl = detailsUrl }; emails.Add(emailInfo); //Notify Participant using postal PostalEmailManager.SendEmail(emailInfo, new EmailInfoChangeEmail()); } #endregion //Schedule remainders only when there is a remainder date if (eventToEdit.ReminderDate != null) { JobManager.ScheduleRemainderEmail(emails, (DateTime)remanderDate); } //Schedule new emails for edited Job JobManager.ScheduleParticipantListEmail(emailInfo, listDate); //JobManager.AddJobsIntoEvent(eventToEdit.Id,"Send List"); return RedirectToAction("Index"); }