Beispiel #1
0
        public IActionResult Add(InvitedUserViewModel.InvitedUserListViewModel vm)
        {
            var userId              = vm.SelectedToInviteUserId;
            var meetingId           = vm.MeetingId;
            var meeting             = _meetingRepository.GetMeeting(meetingId);
            var overlappingMeetings = new List <Meeting>();

            overlappingMeetings = _meetingRepository.GetOverlappingMeetingsForUser(meeting.StartDateTime, meeting.EndDateTime, userId)
                                  .ToList();
            // bozy This variable should be inside the if part. Moreover setting a variable with a single space is a code smell
            var overlappingMeetingsTitle = " ";

            if (overlappingMeetings.Count > 0)
            {
                // use string.Join() instead of foreach.
                foreach (var m in overlappingMeetings)
                {
                    overlappingMeetingsTitle += m.Title + " ";
                }
                TempData["ErrorMessage"] = Constants.OverlappingMeetingsMessage + overlappingMeetingsTitle;
                return(RedirectToAction(nameof(List), new { id = meetingId }));
            }
            _invitedUserRepository.AddUserToMeeting(userId, meetingId, InvitationStatus.Pending);
            TempData["SuccessMessage"] = Constants.GeneralSuccessMessage;

            return(RedirectToAction(nameof(List), new { id = meetingId }));
        }
Beispiel #2
0
        public async Task <IActionResult> Add(InvitedUserViewModel.InvitedUserListViewModel vm)
        {
            var userId    = vm.SelectedToInviteUserId;
            var meetingId = vm.MeetingId;

            if (_invitedUserRepository.IfUserIsInvited(meetingId, userId))
            {
                TempData["ErrorMessage"] = Constants.ExistingMeetingInvitationMessage;
                return(RedirectToAction(nameof(List), new { id = meetingId }));
            }

            var meeting          = _meetingRepository.GetMeeting(meetingId);
            var user             = _userManager.FindByIdAsync(userId).Result;
            var games            = meeting.MeetingGame.Select(mg => mg.Game.Title);
            var meetingStartDate = ToolsExtensions
                                   .ConvertToTimeZoneFromUtc(meeting.StartDateTime, user.TimeZone, _logger)
                                   .ToString(Constants.DateTimeFormat, CultureInfo.InvariantCulture);
            var meetingEndDate = ToolsExtensions.ConvertToTimeZoneFromUtc(meeting.EndDateTime, user.TimeZone, _logger)
                                 .ToString(Constants.DateTimeFormat, CultureInfo.InvariantCulture);

            var overlappingMeetings = new List <string>();

            overlappingMeetings = _meetingRepository
                                  .GetOverlappingMeetingsForUser(meeting.StartDateTime, meeting.EndDateTime, userId)
                                  .Select(m => m.Title)
                                  .ToList();
            // bozy This variable should be inside the if part. Moreover setting a variable with a single space is a code smell

            if (overlappingMeetings.Count > 0)
            {
                // use string.Join() instead of foreach.
                var overlappingMeetingsTitle = string.Join(", ", overlappingMeetings);

                TempData["ErrorMessage"] = $"{Constants.OverlappingMeetingsMessage}: {overlappingMeetingsTitle}";
                return(RedirectToAction(nameof(List), new { id = meetingId }));
            }

            _invitedUserRepository.AddUserToMeeting(userId, meetingId, InvitationStatus.Pending);
            TempData["SuccessMessage"] = Constants.GeneralSuccessMessage;

            var appLink = Url.Action(nameof(List), "InvitedUser", new { id = meetingId }, HttpContext.Request.Scheme);
            var content =
                $"{Constants.ContentInviteUserEmail}: Organizer: {meeting.Organizer.FullName}; Start date: {meetingStartDate}; End date: {meetingEndDate};" +
                $" Games: {string.Join(", ", games)}";
            var response = await _templateSender.SendGeneralEmailAsync(new SendEmailDetails
            {
                IsHTML  = true,
                ToEmail = user.Email,
                Subject = Constants.SubjectInviteUserEmail
            }, Constants.TitleInviteUserEmail, content,
                                                                       Constants.ButtonCheckMeeting,
                                                                       appLink);

            if (response.Successful)
            {
                return(RedirectToAction(nameof(List), new { id = meetingId }));
            }
            TempData["ErrorMessage"] = Constants.GeneralSendEmailErrorMessage;
            foreach (var error in response.Errors)
            {
                _logger.LogError(error);
            }

            return(RedirectToAction(nameof(List), new { id = meetingId }));
        }