public IActionResult Create(MessagesListViewModel vm) { if (ModelState.IsValid) { var message = new Message { Text = vm.Text, Created = DateTime.UtcNow, AuthorId = GetCurrentUserId().Result, MeetingId = vm.MeetingId }; TempData["SuccessMessage"] = Constants.GeneralSuccessMessage; _messageRepository.SaveMessage(message); } var appLink = Url.Action(nameof(List), "Message", new { id = vm.MeetingId }, HttpContext.Request.Scheme); var content = $"{vm.Text}"; var users = _invitedUserRepository.GetUsersEmailsForNotification(vm.MeetingId, GetCurrentUserId().Result); foreach (var email in users) { _templateSender.SendGeneralEmailAsync(new SendEmailDetails { IsHTML = true, ToEmail = email, Subject = Constants.SubjectNewMessageEmail }, Constants.TitleNewMessageEmail, $"{Constants.ContentNewMessageEmail}: {content}", Constants.ButtonCheckMeeting, appLink) .ContinueWith(t => { if (t.Result.Successful) { return; } foreach (var error in t.Result.Errors) { _logger.LogError(error); } }, TaskScheduler.Default); } return(RedirectToAction(nameof(List), new { id = vm.MeetingId })); }
public IActionResult ChangeStatus(string userId, int meetingId, InvitationStatus status) { _invitedUserRepository.ChangeStatus(userId, meetingId, status); var appLink = Url.Action(nameof(List), "InvitedUser", new { id = meetingId }, HttpContext.Request.Scheme); var meeting = _meetingRepository.GetMeeting(meetingId); var user = _userManager.FindByIdAsync(userId).Result; var content = $"meeting: {meeting.Title}, new status: {status} changed by the user: {user.FullName}"; var users = _invitedUserRepository.GetUsersEmailsForNotification(meetingId, _userManager.FindByIdAsync(userId).Result.Id); foreach (var email in users) { _templateSender.SendGeneralEmailAsync(new SendEmailDetails { IsHTML = true, ToEmail = email, Subject = Constants.SubjectNewStatusInvitationEmail }, Constants.TitleNewStatusInvitationEmail, $"{Constants.ContentNewStatusInvitationEmail}: {content}", Constants.ButtonCheckMeeting, appLink) .ContinueWith(t => { if (t.Result.Successful) { return; } foreach (var error in t.Result.Errors) { _logger.LogError(error); } }, TaskScheduler.Default); } TempData["SuccessMessage"] = Constants.GeneralSuccessMessage; return(RedirectToAction(nameof(List), new { id = meetingId })); }
public async Task <IActionResult> Edit(MeetingViewModels.CreateEditMeetingViewModel vm) { var startDateUtc = new DateTime(); var endDateUtc = new DateTime(); var currentUserId = GetCurrentUserId().Result; var timeZone = _userManager .FindByIdAsync(currentUserId).Result.TimeZone; if (ModelState.IsValid) { if (DateTime.TryParse(vm.StartDateTime, out var startDate) && DateTime.TryParse(vm.EndDateTime, out var endDate)) { startDateUtc = ToolsExtensions.ConvertFromTimeZoneToUtc(startDate, timeZone, _logger); endDateUtc = ToolsExtensions.ConvertFromTimeZoneToUtc(endDate, timeZone, _logger); var overlappingMeetings = new List <string>(); overlappingMeetings = vm.MeetingId == 0 ? _meetingRepository.GetOverlappingMeetingsForUser(startDateUtc, endDateUtc, currentUserId) .Select(m => m.Title).ToList() : _meetingRepository.GetOverlappingMeetingsForMeeting(startDateUtc, endDateUtc, vm.MeetingId) .Select(m => m.Title).ToList(); if (!ToolsExtensions.IsDateInFuture(startDateUtc)) { ModelState.AddModelError(nameof(MeetingViewModels.CreateEditMeetingViewModel.StartDateTime), Constants.FutureDateInPastMessage); } if (!ToolsExtensions.IsStartDateBeforeEndDate(startDateUtc, endDateUtc)) { ModelState.AddModelError(nameof(MeetingViewModels.CreateEditMeetingViewModel.EndDateTime), Constants.EndDateBeforeStartMessage); } if (overlappingMeetings.Count > 0) { var overlappingMeetingsTitle = string.Join(", ", overlappingMeetings); ModelState.AddModelError(nameof(MeetingViewModels.CreateEditMeetingViewModel.Title), $"{Constants.OverlappingMeetingsMessage}: {overlappingMeetingsTitle}"); } } else { if (!DateTime.TryParse(vm.StartDateTime, out startDate)) { ModelState.AddModelError(nameof(MeetingViewModels.CreateEditMeetingViewModel.StartDateTime), Constants.WrongDateTimeFormat); } if (!DateTime.TryParse(vm.EndDateTime, out endDate)) { ModelState.AddModelError(nameof(MeetingViewModels.CreateEditMeetingViewModel.EndDateTime), Constants.WrongDateTimeFormat); } } } if (ModelState.IsValid) { var organizer = await _userManager.FindByIdAsync(currentUserId); var meeting = new Meeting { MeetingId = vm.MeetingId, Title = vm.Title, StartDateTime = startDateUtc, EndDateTime = endDateUtc, Organizer = organizer, Street = vm.Address.Street, PostalCode = vm.Address.PostalCode, City = vm.Address.City, Country = vm.Address.Country, Notes = vm.Notes }; var baseMeeting = _meetingRepository.GetMeeting(meeting.MeetingId); string changes = null; if (baseMeeting != null) { changes = CompareMeetingData(baseMeeting, meeting, timeZone); } _meetingRepository.SaveMeeting(meeting); var savedGames = GetGameIdsFromMeeting(meeting.MeetingId); var selectedGames = vm.SelectedGames ?? new List <int>(); var gamesToAdd = selectedGames.Except(savedGames).ToList(); var gamesToRemove = savedGames.Except(selectedGames).ToList(); if (gamesToAdd.Count > 0) { foreach (var gameToAdd in gamesToAdd.Select(game => new MeetingGame { GameId = game, MeetingId = meeting.MeetingId })) { _meetingRepository.AddGameToMeeting(gameToAdd); } } if (gamesToRemove.Count > 0) { foreach (var game in gamesToRemove) { _meetingRepository.RemoveGameFromMeeting(game, meeting.MeetingId); } } TempData["SuccessMessage"] = Constants.GeneralSuccessMessage; if (changes == null) { return(RedirectToAction(nameof(Edit), new { id = meeting.MeetingId })); } var appLink = Url.Action(nameof(Edit), "Meeting", new { id = baseMeeting.MeetingId }, HttpContext.Request.Scheme); foreach (var email in _invitedUserRepository.GetUsersEmailsForNotification(baseMeeting.MeetingId, currentUserId)) { _templateSender.SendGeneralEmailAsync(new SendEmailDetails { IsHTML = true, ToEmail = email, Subject = Constants.SubjectChangeMeetingDataEmail }, Constants.TitleChangeMeetingDataEmail, $"{Constants.ContentChangeMeetingDataEmail}: {changes}", Constants.ButtonCheckMeeting, appLink) .ContinueWith(t => { if (t.Result.Successful) { return; } foreach (var error in t.Result.Errors) { _logger.LogError(error); } }, TaskScheduler.Default); } return(RedirectToAction(nameof(Edit), new { id = meeting.MeetingId })); } vm.Games = _meetingRepository.GetGamesForOrganizer(vm.MeetingId, currentUserId).OrderBy(g => g.Title); return(View(vm)); }