private string GenerateRecurrenceRuleForSMTP(MeetingNotificationItemEntity meetingNotificationItem) { switch (meetingNotificationItem.RecurrencePattern) { case MeetingRecurrencePattern.Daily: return(this.DailySMTP(meetingNotificationItem)); case MeetingRecurrencePattern.Weekly: return(this.WeeklySMTP(meetingNotificationItem)); case MeetingRecurrencePattern.Monthly: return(this.MonthlySMTP(meetingNotificationItem)); case MeetingRecurrencePattern.Yearly: return(this.YearlySMTP(meetingNotificationItem)); case MeetingRecurrencePattern.None: break; default: break; } return(string.Empty); }
/// <inheritdoc/> public async Task <IList <MeetingNotificationItemEntity> > DownloadMeetingInvite(IList <MeetingNotificationItemEntity> meetingNotificationItemEntities, string applicationName) { var traceProps = new Dictionary <string, string>(); traceProps[AIConstants.Application] = applicationName; traceProps[AIConstants.MeetingNotificationCount] = meetingNotificationItemEntities?.Count.ToString(CultureInfo.InvariantCulture); this.logger.TraceInformation($"Started {nameof(this.DownloadMeetingInvite)} method of {nameof(MailAttachmentRepository)}.", traceProps); IList <MeetingNotificationItemEntity> notificationEntities = new List <MeetingNotificationItemEntity>(); if (!(meetingNotificationItemEntities is null) && meetingNotificationItemEntities.Count > 0) { foreach (var item in meetingNotificationItemEntities) { MeetingNotificationItemEntity notificationEntity = item; var blobPath = this.GetBlobPath(applicationName, item.NotificationId, ApplicationConstants.MeetingNotificationsFolderName); var encryptedData = await this.cloudStorageClient.DownloadBlobAsync(blobPath).ConfigureAwait(false); var decryptedData = this.encryptionService.Decrypt(encryptedData); var blobEmailData = JsonConvert.DeserializeObject <BlobEmailData>(decryptedData); notificationEntity.Attachments = blobEmailData.Attachments; notificationEntity.Body = blobEmailData.Body; notificationEntity.TemplateData = blobEmailData.TemplateData; notificationEntities.Add(notificationEntity); } } this.logger.TraceInformation($"Finished {nameof(this.DownloadMeetingInvite)} method of {nameof(MailAttachmentRepository)}.", traceProps); return(notificationEntities); }
/// <inheritdoc/> public async Task <MeetingInviteMessage> GetMeetingNotificationMessage(string applicationName, string notificationId) { var traceprops = new Dictionary <string, string>(); traceprops[AIConstants.Application] = applicationName; traceprops[AIConstants.NotificationIds] = notificationId; this.logger.TraceInformation($"Started {nameof(this.GetNotificationMessage)} method in {nameof(NotificationReportManager)}.", traceprops); try { MeetingNotificationItemEntity notification = await this.emailNotificationRepository.GetMeetingNotificationItemEntity(notificationId, applicationName).ConfigureAwait(false); if (notification != null) { MessageBody body = await this.GetNotificationMessageBodyAsync(applicationName, notification).ConfigureAwait(false); this.logger.TraceInformation($"Completed {nameof(this.GetNotificationMessage)} method in {nameof(NotificationReportManager)}.", traceprops); return(notification.ToMeetingInviteReportMessage(body)); } else { throw new ArgumentNullException(notificationId, "No MeetingInvite entity found for the input notification id: "); } } catch (Exception ex) { this.logger.WriteException(ex); throw; } }
/// <summary> /// Converts <see cref="MeetingNotificationItemCosmosDbEntity"/> to a <see cref="MeetingNotificationItemEntity"/>. /// </summary> /// <param name="meetingNotificationItemDbEntity"> MeetingNotificationItemCosmosDbEntity. </param> /// <returns><see cref="MeetingNotificationItemEntity"/>.</returns> public static MeetingNotificationItemEntity ConvertToMeetingNotificationItemEntity(this MeetingNotificationItemCosmosDbEntity meetingNotificationItemDbEntity) { if (meetingNotificationItemDbEntity is null) { return(null); } MeetingNotificationItemEntity meetingNotificationItemEntity = new MeetingNotificationItemEntity(); meetingNotificationItemEntity.Application = meetingNotificationItemDbEntity.Application; meetingNotificationItemEntity.NotificationId = meetingNotificationItemDbEntity.NotificationId; meetingNotificationItemEntity.RequiredAttendees = meetingNotificationItemDbEntity.RequiredAttendees; meetingNotificationItemEntity.OptionalAttendees = meetingNotificationItemDbEntity.OptionalAttendees; meetingNotificationItemEntity.Application = meetingNotificationItemDbEntity.Application; meetingNotificationItemEntity.ErrorMessage = meetingNotificationItemDbEntity.ErrorMessage; meetingNotificationItemEntity.DayofMonth = meetingNotificationItemDbEntity.DayofMonth; meetingNotificationItemEntity.DayOfWeekByMonth = meetingNotificationItemDbEntity.DayOfWeekByMonth; meetingNotificationItemEntity.DaysOfWeek = meetingNotificationItemDbEntity.DaysOfWeek; meetingNotificationItemEntity.IsAllDayEvent = meetingNotificationItemDbEntity.IsAllDayEvent; meetingNotificationItemEntity.From = meetingNotificationItemDbEntity.From; meetingNotificationItemEntity.IsCancel = meetingNotificationItemDbEntity.IsCancel; meetingNotificationItemEntity.IsOnlineMeeting = meetingNotificationItemDbEntity.IsOnlineMeeting; meetingNotificationItemEntity.NotificationId = meetingNotificationItemDbEntity.NotificationId; meetingNotificationItemEntity.Priority = meetingNotificationItemDbEntity.Priority == null ? NotificationPriority.Low : (NotificationPriority)Enum.Parse(typeof(NotificationPriority), meetingNotificationItemDbEntity.Priority); meetingNotificationItemEntity.IsPrivate = meetingNotificationItemDbEntity.IsPrivate; meetingNotificationItemEntity.IsResponseRequested = meetingNotificationItemDbEntity.IsResponseRequested; meetingNotificationItemEntity.Status = meetingNotificationItemDbEntity.Status == null ? NotificationItemStatus.Queued : (NotificationItemStatus)Enum.Parse(typeof(NotificationItemStatus), meetingNotificationItemDbEntity.Status); meetingNotificationItemEntity.Subject = meetingNotificationItemDbEntity.Subject; meetingNotificationItemEntity.Location = meetingNotificationItemDbEntity.Location; meetingNotificationItemEntity.Timestamp = meetingNotificationItemDbEntity.Timestamp; meetingNotificationItemEntity.MonthOfYear = meetingNotificationItemDbEntity.MonthOfYear; meetingNotificationItemEntity.TrackingId = meetingNotificationItemDbEntity.TrackingId; meetingNotificationItemEntity.TryCount = meetingNotificationItemDbEntity.TryCount; meetingNotificationItemEntity.ETag = meetingNotificationItemDbEntity.ETag; meetingNotificationItemEntity.OccurrenceId = meetingNotificationItemDbEntity.OccurrenceId; meetingNotificationItemEntity.Ocurrences = meetingNotificationItemDbEntity.Ocurrences; meetingNotificationItemEntity.RecurrencePattern = meetingNotificationItemDbEntity.RecurrencePattern == null ? MeetingRecurrencePattern.None : (MeetingRecurrencePattern)Enum.Parse(typeof(MeetingRecurrencePattern), meetingNotificationItemDbEntity.RecurrencePattern); meetingNotificationItemEntity.ReminderMinutesBeforeStart = meetingNotificationItemDbEntity.ReminderMinutesBeforeStart; meetingNotificationItemEntity.TemplateId = meetingNotificationItemDbEntity.TemplateId; meetingNotificationItemEntity.End = meetingNotificationItemDbEntity.End; meetingNotificationItemEntity.Start = meetingNotificationItemDbEntity.Start; meetingNotificationItemEntity.EndDate = meetingNotificationItemDbEntity.EndDate; meetingNotificationItemEntity.SequenceNumber = meetingNotificationItemDbEntity.SequenceNumber; meetingNotificationItemEntity.SendOnUtcDate = meetingNotificationItemDbEntity.SendOnUtcDate; meetingNotificationItemEntity.TrackingId = meetingNotificationItemDbEntity.TrackingId; meetingNotificationItemEntity.TryCount = meetingNotificationItemDbEntity.TryCount; meetingNotificationItemEntity.Timestamp = meetingNotificationItemDbEntity.Timestamp; meetingNotificationItemEntity.RowKey = meetingNotificationItemDbEntity.NotificationId; meetingNotificationItemEntity.PartitionKey = meetingNotificationItemDbEntity.Application; meetingNotificationItemEntity.Interval = meetingNotificationItemDbEntity.Interval; meetingNotificationItemEntity.ICalUid = meetingNotificationItemDbEntity.ICalUid; meetingNotificationItemEntity.ShowAs = meetingNotificationItemDbEntity.ShowAs; meetingNotificationItemEntity.AttachmentReference = meetingNotificationItemDbEntity.AttachmentReference; meetingNotificationItemEntity.EventId = meetingNotificationItemDbEntity.EventId; meetingNotificationItemEntity.EmailAccountUsed = meetingNotificationItemDbEntity.EmailAccountUsed; meetingNotificationItemEntity.Action = meetingNotificationItemDbEntity.Action; meetingNotificationItemEntity.Id = meetingNotificationItemDbEntity.Id; return(meetingNotificationItemEntity); }
private string WeeklySMTP(MeetingNotificationItemEntity meetingNotificationItem) { if (meetingNotificationItem.EndDate.HasValue) { return(string.Format(CultureInfo.InvariantCulture, "RRULE:FREQ=WEEKLY;BYDAY={0};INTERVAL={1};UNTIL={2}", DaysOfWeekToShortNames(GetDaysOfWeek(meetingNotificationItem.DaysOfWeek)), meetingNotificationItem.Interval, meetingNotificationItem.EndDate.Value.ToString(this.strTimeFormat, CultureInfo.InvariantCulture))); } return(string.Format(CultureInfo.InvariantCulture, "RRULE:FREQ=WEEKLY;BYDAY={0};INTERVAL={1};COUNT={2}", DaysOfWeekToShortNames(GetDaysOfWeek(meetingNotificationItem.DaysOfWeek)), meetingNotificationItem.Interval, meetingNotificationItem.Ocurrences.HasValue ? meetingNotificationItem.Ocurrences.Value : 1)); // Default to 1 Occurrence }
private string DailySMTP(MeetingNotificationItemEntity meetingNotificationItem) { if (meetingNotificationItem.EndDate.HasValue) { return(string.Format(CultureInfo.InvariantCulture, "RRULE:FREQ=DAILY;INTERVAL={0};UNTIL={1}", meetingNotificationItem.Interval, meetingNotificationItem.EndDate.Value.ToString(this.strTimeFormat, CultureInfo.InvariantCulture))); } return(string.Format(CultureInfo.InvariantCulture, "RRULE:FREQ=DAILY;INTERVAL={0};COUNT={1}", meetingNotificationItem.Interval, meetingNotificationItem.Ocurrences.HasValue ? meetingNotificationItem.Ocurrences.Value : 1)); // Default to 1 Occurrence }
/// <summary> /// Converts <see cref="EmailNotificationItemEntity"/> to a <see cref="EmailMessage"/>. /// </summary> /// <param name="meetingNotificationItemEntity">Email Notification Item Entity.</param> /// <param name="body">Message Bosy.</param> /// <returns><see cref="EmailMessage"/>.</returns> public static MeetingInviteMessage ToMeetingInviteReportMessage(this MeetingNotificationItemEntity meetingNotificationItemEntity, MessageBody body) { return(meetingNotificationItemEntity != null ? new MeetingInviteMessage() { Subject = meetingNotificationItemEntity.Subject, Body = body?.Content, RequiredAttendees = meetingNotificationItemEntity.RequiredAttendees, Application = meetingNotificationItemEntity.Application, From = meetingNotificationItemEntity.From, NotificationId = meetingNotificationItemEntity.NotificationId, OptionalAttendees = meetingNotificationItemEntity.OptionalAttendees, Attachments = meetingNotificationItemEntity.Attachments?.Select(attachment => new FileAttachment { Name = attachment.FileName, ContentBytes = attachment.FileBase64, IsInline = attachment.IsInline }).ToList(), } : null); }
/// <summary> /// Converts <see cref="MeetingNotificationItemEntity"/> to a <see cref="MeetingInviteReportResponse"/>. /// </summary> /// <param name="meetingNotificationItemEntity"> meetingNotificationItemEntity. </param> /// <returns><see cref="MeetingInviteReportResponse"/>.</returns> public static MeetingInviteReportResponse ToMeetingInviteReportResponse(MeetingNotificationItemEntity meetingNotificationItemEntity) { return(new MeetingInviteReportResponse() { NotificationId = meetingNotificationItemEntity?.NotificationId, Application = meetingNotificationItemEntity?.Application, EmailAccountUsed = meetingNotificationItemEntity?.EmailAccountUsed, TrackingId = meetingNotificationItemEntity?.TrackingId, Status = meetingNotificationItemEntity?.Status.ToString(), Priority = meetingNotificationItemEntity?.Priority.ToString(), TryCount = meetingNotificationItemEntity?.TryCount ?? 0, ErrorMessage = meetingNotificationItemEntity?.ErrorMessage, CreatedDateTime = meetingNotificationItemEntity?.CreatedDateTime ?? DateTime.MinValue, UpdatedDateTime = meetingNotificationItemEntity?.UpdatedDateTime ?? DateTime.MinValue, SendOnUtcDate = meetingNotificationItemEntity?.SendOnUtcDate ?? DateTime.MinValue, RequiredAttendees = meetingNotificationItemEntity?.RequiredAttendees, From = meetingNotificationItemEntity?.From, OptionalAttendees = meetingNotificationItemEntity?.OptionalAttendees, Subject = meetingNotificationItemEntity?.Subject, }); }
private string YearlySMTP(MeetingNotificationItemEntity meetingNotificationItem) { StringBuilder sb = new StringBuilder(); if (string.IsNullOrEmpty(meetingNotificationItem.DaysOfWeek)) { _ = sb.Append(string.Format(CultureInfo.InvariantCulture, "RRULE:FREQ=YEARLY;BYMONTH={0};BYMONTHDAY={1}", meetingNotificationItem.MonthOfYear, meetingNotificationItem.DayofMonth.HasValue ? meetingNotificationItem.DayofMonth.Value : meetingNotificationItem.Start.Day)); } else { _ = sb.Append(string.Format(CultureInfo.InvariantCulture, "RRULE:FREQ=YEARLY;BYDAY={0};BYSETPOS={1};BYMONTH={2}", DaysOfWeekToShortNames(GetDaysOfWeek(meetingNotificationItem.DaysOfWeek)), GetDayOfWeekIndexSMTP(meetingNotificationItem.DayOfWeekByMonth), meetingNotificationItem.MonthOfYear)); } if (meetingNotificationItem.EndDate.HasValue) { _ = sb.Append(string.Format(CultureInfo.InvariantCulture, ";UNTIL={0}", meetingNotificationItem.EndDate.Value.ToString(this.strTimeFormat, CultureInfo.InvariantCulture))); } else { _ = sb.Append(string.Format(CultureInfo.InvariantCulture, ";COUNT={0}", meetingNotificationItem.Ocurrences.HasValue ? meetingNotificationItem.Ocurrences.Value : 1)); // Default to 1 Occurrence } return(sb.ToString()); }
private string MonthlySMTP(MeetingNotificationItemEntity meetingNotificationItem) { StringBuilder sb = new StringBuilder(); if (string.IsNullOrEmpty(meetingNotificationItem.DaysOfWeek)) { _ = sb.Append(string.Format(CultureInfo.InvariantCulture, "RRULE:FREQ=MONTHLY;BYMONTHDAY={0};INTERVAL={1}", meetingNotificationItem.DayofMonth.HasValue ? meetingNotificationItem.DayofMonth.Value : meetingNotificationItem.Start.Day, meetingNotificationItem.Interval)); // If the Day of Month was not specified, use the day of the Start Date. } else { _ = sb.Append(string.Format(CultureInfo.InvariantCulture, "RRULE:FREQ=MONTHLY;BYSETPOS={0};BYDAY={1};INTERVAL={2}", GetDayOfWeekIndexSMTP(meetingNotificationItem.DayOfWeekByMonth), DaysOfWeekToShortNames(GetDaysOfWeek(meetingNotificationItem.DaysOfWeek)), meetingNotificationItem.Interval)); } if (meetingNotificationItem.EndDate.HasValue) { _ = sb.Append(string.Format(CultureInfo.InvariantCulture, ";UNTIL={0}", meetingNotificationItem.EndDate.Value.ToString(this.strTimeFormat, CultureInfo.InvariantCulture))); } else { _ = sb.Append(string.Format(CultureInfo.InvariantCulture, ";COUNT={0}", meetingNotificationItem.Ocurrences.HasValue ? meetingNotificationItem.Ocurrences.Value : 1)); // Default to 1 Occurrence } return(sb.ToString()); }
/// <summary> /// Converts the meeting invite to body. /// </summary> /// <param name="meetingNotificationItem">The meeting notification item.</param> /// <param name="meetingBody">meetingBody.</param> /// <returns>A string for meeting invite.</returns> private string ConvertMeetingInviteToBody(MeetingNotificationItemEntity meetingNotificationItem, string meetingBody) { StringBuilder str = new StringBuilder(); #pragma warning disable IDE0058 // Expression value is never used str.AppendLine("BEGIN:VCALENDAR"); str.AppendLine("PRODID:-//Microsoft Corporation//Outlook 14.0 MIMEDIR//EN"); str.AppendLine("VERSION:2.0"); // if (meetingNotificationItem.IsCancel) // { // str.AppendLine("METHOD:CANCEL"); // str.AppendLine("STATUS:CANCELLED"); // } // else // { str.AppendLine("METHOD:REQUEST"); str.AppendLine("X-MS-OLK-FORCEINSPECTOROPEN:TRUE"); str.AppendLine("BEGIN:VEVENT"); str.AppendLine("DTSTART:" + meetingNotificationItem.Start.ToString(this.strTimeFormat, CultureInfo.InvariantCulture)); str.AppendLine("DTEND:" + meetingNotificationItem.End.ToString(this.strTimeFormat, CultureInfo.InvariantCulture)); // if (meetingNotificationItem.OccurenceId.HasValue) str.AppendLine("RECURRENCE-ID:" + invitation.OccurenceId.Value.ToString(c_strTimeFormat)); str.AppendLine(this.GenerateRecurrenceRuleForSMTP(meetingNotificationItem)); str.AppendLine(string.Format(CultureInfo.InvariantCulture, "UID:{0}", "icauid")); // currently harcoded as meeting invite is not being sent properly, if UID is null/empty str.AppendLine(string.Format(CultureInfo.InvariantCulture, "DESCRIPTION:{0}", meetingBody)); str.AppendLine(string.Format(CultureInfo.InvariantCulture, "X-ALT-DESC;FMTTYPE=text/html:{0}", meetingBody)); str.AppendLine(string.Format(CultureInfo.InvariantCulture, "SUMMARY:{0}", meetingNotificationItem.Subject)); str.AppendLine(string.Format(CultureInfo.InvariantCulture, "LOCATION:{0}", meetingNotificationItem.Location)); str.AppendLine(string.Format(CultureInfo.InvariantCulture, "ORGANIZER:MAILTO:{0}", meetingNotificationItem.From)); if (meetingNotificationItem.SequenceNumber.HasValue) { str.AppendLine(string.Format(CultureInfo.InvariantCulture, "SEQUENCE:{0}", meetingNotificationItem.SequenceNumber.Value)); } if (meetingNotificationItem.IsPrivate) { str.AppendLine("CLASS:PRIVATE"); } foreach (var to in meetingNotificationItem.RequiredAttendees?.Split(Common.Constants.SplitCharacter, System.StringSplitOptions.RemoveEmptyEntries)) { str.AppendLine(string.Format(CultureInfo.InvariantCulture, "ATTENDEE;PARTSTAT=NEEDS-ACTION;ROLE=REQ-PARTICIPANT;CN=\"{0}\";RSVP=FALSE:mailto:{0}", to)); } if (!string.IsNullOrEmpty(meetingNotificationItem.OptionalAttendees)) { foreach (var cc in meetingNotificationItem.OptionalAttendees?.Split(Common.Constants.SplitCharacter, System.StringSplitOptions.RemoveEmptyEntries)) { str.AppendLine(string.Format(CultureInfo.InvariantCulture, "ATTENDEE;PARTSTAT=NEEDS-ACTION;ROLE=OPT-PARTICIPANT;CN=\"{0}\";RSVP=FALSE:mailto:{0}", cc)); } } str.AppendLine("BEGIN:VALARM"); if (!string.IsNullOrEmpty(meetingNotificationItem.ReminderMinutesBeforeStart)) { str.AppendLine(string.Format(CultureInfo.InvariantCulture, "TRIGGER:-P{0}M", meetingNotificationItem.ReminderMinutesBeforeStart)); } str.AppendLine("ACTION:DISPLAY"); str.AppendLine("DESCRIPTION:Reminder"); str.AppendLine("END:VALARM"); str.AppendLine("END:VEVENT"); str.AppendLine("END:VCALENDAR"); #pragma warning restore IDE0058 // Expression value is never used return(str.ToString()); }
/// <summary> /// create Payload for Meeting Invite to be set to Graph API. /// </summary> /// <param name="meetingNotificationEntity"> MeetingNotification Entity Object.</param> /// <param name="applicationName">Application Name for the Meeting Invite.</param> /// <returns>A <see cref="Task"/> representing the result of the asynchronous operation.</returns> private async Task <InvitePayload> CreateInvitePayload(MeetingNotificationItemEntity meetingNotificationEntity, string applicationName) { if (meetingNotificationEntity == null) { return(null); } var payload = new InvitePayload(); var requiredAttendees = meetingNotificationEntity.RequiredAttendees.Split(Common.ApplicationConstants.SplitCharacter, System.StringSplitOptions.RemoveEmptyEntries).Select(e => new Attendee() { EmailAddress = new EmailAddress() { Address = e, }, Type = AttendeeType.Required, }); var optionalAttendees = meetingNotificationEntity.OptionalAttendees?.Split(Common.ApplicationConstants.SplitCharacter, System.StringSplitOptions.RemoveEmptyEntries).Select(e => new Attendee() { EmailAddress = new EmailAddress() { Address = e, }, Type = AttendeeType.Optional, }); payload.Attendees = (optionalAttendees != null ? requiredAttendees.Union(optionalAttendees) : requiredAttendees).ToList(); payload.Body = await this.emailManager.GetMeetingInviteBodyAsync(applicationName, meetingNotificationEntity).ConfigureAwait(false); payload.End = new InviteDateTime() { DateTime = meetingNotificationEntity.End.FormatDate(ApplicationConstants.GraphMeetingInviteDateTimeFormatter), }; payload.Importance = (ImportanceType)Enum.Parse(typeof(ImportanceType), meetingNotificationEntity.Priority.ToString()); payload.IsCancelled = meetingNotificationEntity.IsCancel; payload.IsOnlineMeeting = meetingNotificationEntity.IsOnlineMeeting; payload.IsAllDay = meetingNotificationEntity.IsAllDayEvent; payload.Location = new Location() { DisplayName = meetingNotificationEntity.Location, }; payload.Organizer = new Organizer() { EmailAddress = new EmailAddress() { Address = meetingNotificationEntity.From, }, }; if (meetingNotificationEntity.RecurrencePattern != MeetingRecurrencePattern.None) { var recurrencePattern = new RecurrencePattern() { Type = (RecurrencePatternType)Enum.Parse(typeof(RecurrencePatternType), meetingNotificationEntity.RecurrencePattern.ToString()), Interval = meetingNotificationEntity.Interval, DaysOfWeek = meetingNotificationEntity.DaysOfWeek.GetListFromString <Contracts.Models.Graph.Invite.DayOfTheWeek>(','), DayOfMonth = meetingNotificationEntity.DayofMonth, Month = meetingNotificationEntity.MonthOfYear, }; var recurrenceRangeType = meetingNotificationEntity.EndDate.HasValue ? RecurrenceRangeType.EndDate : meetingNotificationEntity.Ocurrences.HasValue ? RecurrenceRangeType.Numbered : RecurrenceRangeType.NoEnd; var recurrenceRange = new RecurrenceRange() { NumberOfOccurences = meetingNotificationEntity.Ocurrences, EndDate = meetingNotificationEntity.EndDate.HasValue ? meetingNotificationEntity.EndDate?.FormatDate(ApplicationConstants.GraphMeetingInviteRecurrenceRangeDateFormatter) : null, StartDate = meetingNotificationEntity.Start.FormatDate(ApplicationConstants.GraphMeetingInviteRecurrenceRangeDateFormatter), Type = recurrenceRangeType, }; payload.Recurrence = new Recurrence() { Pattern = recurrencePattern, Range = recurrenceRange, }; } payload.ReminderMinutesBeforeStart = Convert.ToInt32(meetingNotificationEntity.ReminderMinutesBeforeStart, CultureInfo.InvariantCulture); payload.Start = new InviteDateTime() { DateTime = meetingNotificationEntity.Start.FormatDate(ApplicationConstants.GraphMeetingInviteDateTimeFormatter), }; payload.Subject = meetingNotificationEntity.Subject; payload.TransactionId = meetingNotificationEntity.NotificationId; payload.HasAttachments = meetingNotificationEntity.Attachments != null && meetingNotificationEntity.Attachments.Any() ? true : false; payload.ICallUid = meetingNotificationEntity.ICalUid; payload.ShowAs = meetingNotificationEntity.ShowAs ?? ApplicationConstants.DefaultInviteStatus; return(payload); }
/// <summary> /// Validates for all attachments sent. /// </summary> /// <param name="res">HttpResponse object after send attachment request using httpclient.</param> /// <param name="item">Meeting Notification Item object.</param> /// <returns>a boolean value for success/failure.</returns> private static bool IsAllAttachmentsSent(IDictionary <string, ResponseData <string> > res, MeetingNotificationItemEntity item) { if (res == null) { return(false); } var successResponse = res.Values.Where(a => a.Status == true); return(successResponse.Count() == item.Attachments.Count()); }
/// <summary> /// Converts <see cref="MeetingNotificationItemEntity"/> to a <see cref="MeetingNotificationItemTableEntity"/>. /// </summary> /// <param name="meetingNotificationItemEntity"> meetingNotificationItemEntity. </param> /// <returns><see cref="MeetingNotificationItemTableEntity"/>.</returns> public static MeetingNotificationItemTableEntity ConvertToMeetingNotificationItemTableEntity(this MeetingNotificationItemEntity meetingNotificationItemEntity) { if (meetingNotificationItemEntity is null) { return(null); } MeetingNotificationItemTableEntity meetingNotificationItemTableEntity = new MeetingNotificationItemTableEntity(); meetingNotificationItemTableEntity.PartitionKey = meetingNotificationItemEntity.Application; meetingNotificationItemTableEntity.RowKey = meetingNotificationItemEntity.NotificationId; meetingNotificationItemTableEntity.Application = meetingNotificationItemEntity.Application; meetingNotificationItemTableEntity.RequiredAttendees = meetingNotificationItemEntity.RequiredAttendees; meetingNotificationItemTableEntity.OptionalAttendees = meetingNotificationItemEntity.OptionalAttendees; meetingNotificationItemTableEntity.Application = meetingNotificationItemEntity.Application; meetingNotificationItemTableEntity.ErrorMessage = meetingNotificationItemEntity.ErrorMessage; meetingNotificationItemTableEntity.DayofMonth = meetingNotificationItemEntity.DayofMonth ?? default; meetingNotificationItemTableEntity.DayOfWeekByMonth = meetingNotificationItemEntity.DayOfWeekByMonth; meetingNotificationItemTableEntity.DaysOfWeek = meetingNotificationItemEntity.DaysOfWeek; meetingNotificationItemTableEntity.EndDate = meetingNotificationItemEntity.EndDate; meetingNotificationItemTableEntity.IsAllDayEvent = meetingNotificationItemEntity.IsAllDayEvent; meetingNotificationItemTableEntity.From = meetingNotificationItemEntity.From; meetingNotificationItemTableEntity.IsCancel = meetingNotificationItemEntity.IsCancel; meetingNotificationItemTableEntity.IsOnlineMeeting = meetingNotificationItemEntity.IsOnlineMeeting; meetingNotificationItemTableEntity.NotificationId = meetingNotificationItemEntity.NotificationId; meetingNotificationItemTableEntity.Priority = meetingNotificationItemEntity.Priority.ToString(); meetingNotificationItemTableEntity.IsPrivate = meetingNotificationItemEntity.IsPrivate; meetingNotificationItemTableEntity.IsResponseRequested = meetingNotificationItemEntity.IsResponseRequested; meetingNotificationItemTableEntity.Status = meetingNotificationItemEntity.Status.ToString(); meetingNotificationItemTableEntity.Subject = meetingNotificationItemEntity.Subject; meetingNotificationItemTableEntity.Location = meetingNotificationItemEntity.Location; meetingNotificationItemTableEntity.Timestamp = meetingNotificationItemEntity.Timestamp; meetingNotificationItemTableEntity.MonthOfYear = meetingNotificationItemEntity.MonthOfYear; meetingNotificationItemTableEntity.TrackingId = meetingNotificationItemEntity.TrackingId; meetingNotificationItemTableEntity.TryCount = meetingNotificationItemEntity.TryCount; meetingNotificationItemTableEntity.ETag = meetingNotificationItemEntity.ETag; meetingNotificationItemTableEntity.OccurrenceId = meetingNotificationItemEntity.OccurrenceId; meetingNotificationItemTableEntity.Ocurrences = meetingNotificationItemEntity.Ocurrences ?? default; meetingNotificationItemTableEntity.RecurrencePattern = meetingNotificationItemEntity.RecurrencePattern.ToString(); meetingNotificationItemTableEntity.ReminderMinutesBeforeStart = meetingNotificationItemEntity.ReminderMinutesBeforeStart; meetingNotificationItemTableEntity.TemplateId = meetingNotificationItemEntity.TemplateId; meetingNotificationItemTableEntity.End = meetingNotificationItemEntity.End; meetingNotificationItemTableEntity.Start = meetingNotificationItemEntity.Start; meetingNotificationItemTableEntity.SequenceNumber = meetingNotificationItemEntity.SequenceNumber ?? default; meetingNotificationItemTableEntity.SendOnUtcDate = meetingNotificationItemEntity.SendOnUtcDate; meetingNotificationItemTableEntity.TrackingId = meetingNotificationItemEntity.TrackingId; meetingNotificationItemTableEntity.TryCount = meetingNotificationItemEntity.TryCount; meetingNotificationItemTableEntity.Timestamp = meetingNotificationItemEntity.Timestamp; meetingNotificationItemTableEntity.RowKey = meetingNotificationItemEntity.NotificationId; meetingNotificationItemTableEntity.PartitionKey = meetingNotificationItemEntity.Application; meetingNotificationItemTableEntity.Interval = meetingNotificationItemEntity.Interval; meetingNotificationItemTableEntity.ICalUid = meetingNotificationItemEntity.ICalUid; meetingNotificationItemTableEntity.AttachmentReference = meetingNotificationItemEntity.AttachmentReference; meetingNotificationItemTableEntity.EmailAccountUsed = meetingNotificationItemEntity.EmailAccountUsed; meetingNotificationItemTableEntity.EventId = meetingNotificationItemEntity.EventId; return(meetingNotificationItemTableEntity); }
/// <summary> /// Gets the notification message body asynchronous. /// </summary> /// <param name="applicationName">Name of the application.</param> /// <param name="notification">The notification.</param> /// <returns>A <see cref="Task{TResult}" /> representing the result of the asynchronous operation.</returns> /// <exception cref="ArgumentNullException"> /// applicationName - applicationName cannot be null or empty. /// or /// notification - notification cannot be null. /// </exception> /// <exception cref="ArgumentException"> /// TemplateData cannot be null or empty. /// or /// Template cannot be found, please provide a valid template and application name. /// </exception> public async Task <MessageBody> GetNotificationMessageBodyAsync(string applicationName, MeetingNotificationItemEntity notification) { this.logger.TraceInformation($"Started {nameof(this.GetNotificationMessageBodyAsync)} method of {nameof(EmailManager)}."); string notificationBody = null; try { if (string.IsNullOrEmpty(applicationName)) { throw new ArgumentNullException(nameof(applicationName), "applicationName cannot be null or empty."); } if (notification is null) { throw new ArgumentNullException(nameof(notification), "notification cannot be null."); } if (string.IsNullOrEmpty(notification.Body) && !string.IsNullOrEmpty(notification.TemplateId)) { if (string.IsNullOrEmpty(notification.TemplateData)) { throw new ArgumentException("TemplateData cannot be null or empty."); } MailTemplate template = await this.templateManager.GetMailTemplate(applicationName, notification.TemplateId).ConfigureAwait(false); if (template == null) { throw new ArgumentException("Template cannot be found, please provide a valid template and application name"); } notificationBody = this.templateMerge.CreateMailBodyUsingTemplate(template.TemplateType, template.Content, notification.TemplateData); } else { if (!string.IsNullOrEmpty(notification.Body)) { notificationBody = notification.Body; } } } catch (Exception ex) { this.logger.WriteException(ex); throw; } MessageBody messageBody = new MessageBody { Content = notificationBody, ContentType = Common.Constants.EmailBodyContentType }; this.logger.TraceInformation($"Finished {nameof(this.GetNotificationMessageBodyAsync)} method of {nameof(EmailManager)}."); return(messageBody); }