public SendGridMessage PrepareDiaconateEmail(DeaconDuty deacon) { BuildEmailFrom(deacon.FromEmail, deacon.FromName); BuildEmailTo(deacon.Email, deacon.Name); BuildEmailCopy(deacon.Copy); SetUpDeaconTemplate(DeaconDutyTemplate, deacon); return(_message); }
public static async Task RunAsync([TimerTrigger("0 0 15 * * THU")] TimerInfo myTimer, [SendGrid(ApiKey = "CustomSendGridKeyAppSettingName")] IAsyncCollector <SendGridMessage> messageCollector, ILogger log) { log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}"); var connection = Environment.GetEnvironmentVariable("CosmosDBConnection"); try { var cosmosClient = new CosmosClient(connection); const string databaseId = "ministries"; var database = await cosmosClient.CreateDatabaseIfNotExistsAsync(databaseId); var deacon = new DeaconDuty { Month = DateTime.Now.AddMonths(1).ToString("MMMM") }; var meeting = new DeaconMeeting(); await GetCurrentDeacon(database.Database, deacon, meeting); if (string.IsNullOrEmpty(deacon.AttendeeId)) { log.LogInformation("Deacon not found"); } await GetDeaconInformation(database.Database, deacon); if (string.IsNullOrEmpty(deacon.AttendeeId)) { log.LogInformation("Attendee not found"); } var message = new SendGridMessage(); var worker = new MessageWorker(message); deacon.FromEmail = Environment.GetEnvironmentVariable("DeaconDutyFromEmail"); deacon.FromName = Environment.GetEnvironmentVariable("DeaconDutyFromName"); deacon.Copy = Environment.GetEnvironmentVariable("DeaconDutyCopy"); await messageCollector.AddAsync(worker.PrepareDiaconateEmail(deacon)); if (!string.IsNullOrEmpty(meeting.DeaconDate)) { meeting.Email = Environment.GetEnvironmentVariable("DeaconMeetingEmail"); meeting.Name = Environment.GetEnvironmentVariable("DeaconMeetingName"); meeting.FromEmail = Environment.GetEnvironmentVariable("DeaconMeetingFromEmail"); meeting.FromName = Environment.GetEnvironmentVariable("DeaconMeetingFromName"); meeting.Copy = Environment.GetEnvironmentVariable("DeaconMeetingCopy"); await messageCollector.AddAsync(worker.PrepareDiaconateReminderEmail(meeting)); } } catch (Exception e) { log.LogInformation(e.ToString()); } }
private static async Task GetCurrentDeacon(Database database, DeaconDuty deacon, DeaconMeeting meeting) { const string deaconContainerId = "diaconate"; var deaconContainer = await database.CreateContainerIfNotExistsAsync(deaconContainerId, "/year"); var deaconQuery = "SELECT * FROM c WHERE ( c.month = " + DateTime.Now.Month + " AND c.year = " + DateTime.Now.Year + " ) OR (c.month = " + DateTime.Now.AddMonths(1).Month + " AND c.year = " + DateTime.Now.AddMonths(1).Year + " )"; var deaconQueryDefinition = new QueryDefinition(deaconQuery); var deaconIterator = deaconContainer.Container.GetItemQueryIterator <DiaconateDB>(deaconQueryDefinition); var deacons = new List <DiaconateDB>(); while (deaconIterator.HasMoreResults) { var deaconResults = await deaconIterator.ReadNextAsync(); deacons.AddRange(deaconResults); } foreach (var diaconate in deacons) { if (diaconate.month == DateTime.Now.Month) { if (!diaconate.meetingDate.HasValue || !(diaconate.meetingDate > DateTime.Now)) { continue; } var meetingTime = diaconate.meetingDate.Value.AddHours(-5); meeting.ZoomLink = diaconate.meetingUrl; meeting.DiaconateId = diaconate.id; meeting.Year = diaconate.year; if (DateTimeFormatInfo.CurrentInfo != null) { meeting.Month = DateTimeFormatInfo.CurrentInfo.GetMonthName(diaconate.month); } meeting.DeaconDate = meetingTime.ToLongDateString() + " " + meetingTime.ToShortTimeString(); } else { deacon.Name = diaconate.name; deacon.AttendeeId = diaconate.attendeeId; } } }
private static async Task GetDeaconInformation(Database database, DeaconDuty deacon) { const string attendeeContainerId = "attendee"; var attendeeContainer = await database.CreateContainerIfNotExistsAsync(attendeeContainerId, "/lastName"); var attendeeQuery = "SELECT * FROM a WHERE a.id = '" + deacon.AttendeeId + "'"; var attendeeQueryDefinition = new QueryDefinition(attendeeQuery); var attendeeIterator = attendeeContainer.Container.GetItemQueryIterator <AttendeeDB>(attendeeQueryDefinition); var members = new List <AttendeeDB>(); while (attendeeIterator.HasMoreResults) { var attendeeResults = await attendeeIterator.ReadNextAsync(); members.AddRange(attendeeResults); } deacon.FirstName = members[0].firstName; deacon.LastName = members[0].lastName; deacon.Email = members[0].email; }
private void SetUpDeaconTemplate(string template, DeaconDuty deacon) { _message.SetTemplateId(template); _message.SetTemplateData(deacon); }
public static async Task <IActionResult> Run( [HttpTrigger(AuthorizationLevel.Function, "post", Route = null)] HttpRequest req, [SendGrid(ApiKey = "CustomSendGridKeyAppSettingName")] IAsyncCollector <SendGridMessage> messageCollector, ILogger log) { log.LogInformation("C# HTTP trigger function processed a request."); var connection = Environment.GetEnvironmentVariable("CosmosDBConnection"); try { var cosmosClient = new CosmosClient(connection); const string databaseId = "ministries"; var database = await cosmosClient.CreateDatabaseIfNotExistsAsync(databaseId); var deacon = new DeaconDuty { Month = DateTime.Now.AddMonths(1).ToString("MMMM") }; var meeting = new DeaconMeeting(); await GetCurrentDeacon(database.Database, deacon, meeting); if (string.IsNullOrEmpty(deacon.AttendeeId)) { log.LogInformation("Deacon not found"); return(new BadRequestResult()); } await GetDeaconInformation(database.Database, deacon); if (string.IsNullOrEmpty(deacon.AttendeeId)) { log.LogInformation("Deacon not found"); return(new BadRequestResult()); } var message = new SendGridMessage(); var worker = new MessageWorker(message); deacon.FromEmail = Environment.GetEnvironmentVariable("DeaconDutyFromEmail"); deacon.FromName = Environment.GetEnvironmentVariable("DeaconDutyFromName"); deacon.Copy = Environment.GetEnvironmentVariable("DeaconDutyCopy"); await messageCollector.AddAsync(worker.PrepareDiaconateEmail(deacon)); if (!string.IsNullOrEmpty(meeting.DeaconDate)) { meeting.Email = Environment.GetEnvironmentVariable("DeaconMeetingEmail"); meeting.Name = Environment.GetEnvironmentVariable("DeaconMeetingName"); meeting.FromEmail = Environment.GetEnvironmentVariable("DeaconMeetingFromEmail"); meeting.FromName = Environment.GetEnvironmentVariable("DeaconMeetingFromName"); meeting.Copy = Environment.GetEnvironmentVariable("DeaconMeetingCopy"); await messageCollector.AddAsync(worker.PrepareDiaconateReminderEmail(meeting)); } } catch (Exception e) { log.LogInformation(e.ToString()); return(new BadRequestResult()); } return(new OkResult()); }