private async Task SendEmail(EventSaveModel input, EventStatusModel model, User currentUser, bool statusChanged, EventSignup eventSignup) { try { await _emailService.SendCustomEmail( eventSignup.User, input.Subject, input.Message, model, input.ReplyToMe?currentUser : null); if (statusChanged) { eventSignup.AuditLog.Add($"Moved to {input.Status} and sent email\n\n---\n\n> {input.Subject}\n\n{input.Message}", currentUser); } else { eventSignup.AuditLog.Add($"Sent email\n\n---\n\n> {input.Subject}\n\n{input.Message}", currentUser); } } catch (Exception e) { // Mail sending might fail, but that should't stop us eventSignup.AuditLog.Add($"Tried to send email, but failed with message {e.Message}", currentUser); _logger.LogError(e, "Failed to send email"); } }
public async Task <IActionResult> View(Guid id, [FromForm] EventSaveModel input) { var currentUser = await GetCurrentUser(); var selected = input.GetSelected(); var statusChanged = input.Status != Status.Unknown; await _database.EditEvent(id, async eventEntry => { foreach (var signup in selected) { var eventSignup = eventEntry.Signups.Single(s => s.Id == signup); if (statusChanged) { eventSignup.Status = input.Status; } if (input.SendEmail) { var model = new EventStatusModel( eventSignup.User.FullName, eventEntry.Title, await SignupLink(eventSignup.User, eventEntry)); await SendEmail(input, model, currentUser, statusChanged, eventSignup); } else if (statusChanged) { eventSignup.AuditLog.Add($"Moved to {input.Status} ", currentUser); } } }); return(RedirectToAction(nameof(View), new { id })); }
public static IEnumerable <Guid> GetSelected(this EventSaveModel input) => input.Leads .Concat(input.Follows) .Concat(input.Solos) .Where(l => l.Selected) .Select(l => l.Id);