public async Task <IViewComponentResult> InvokeAsync(FeedbackCaptureViewComponentParameters parameters, CancellationToken cancellationToken)
        {
            var user = await _authService.GetCurrentUser(HttpContext, cancellationToken);

            int authorisingUserId = parameters.RequestRole == RequestRoles.Volunteer || parameters.RequestRole == RequestRoles.GroupAdmin ? user.ID : -1;
            var jobDetails        = await _requestService.GetJobDetailsAsync(parameters.JobId, authorisingUserId, parameters.RequestRole == RequestRoles.GroupAdmin, cancellationToken);

            await EnsureFeedbackCanBeGiven(jobDetails.JobSummary, parameters.RequestRole, user?.ID);

            FeedbackCaptureEditModel viewModel = new FeedbackCaptureEditModel
            {
                RoleSubmittingFeedback = parameters.RequestRole,
                FeedbackRating         = parameters.FeedbackRating,

                VolunteerName = jobDetails.CurrentVolunteer?.UserPersonalDetails.DisplayName,
                RecipientName = string.IsNullOrEmpty(jobDetails.JobSummary.RecipientOrganisation) ? jobDetails.Recipient?.FirstName : jobDetails.JobSummary.RecipientOrganisation,
                RequestorName = jobDetails.Requestor?.FirstName,

                ShowVolunteerMessage = parameters.RequestRole != RequestRoles.Volunteer && jobDetails.CurrentVolunteer != null,
                ShowRecipientMessage = parameters.RequestRole != RequestRoles.Recipient && !string.IsNullOrEmpty(jobDetails.Recipient?.EmailAddress),
                ShowRequestorMessage = parameters.RequestRole != RequestRoles.Requestor && !string.IsNullOrEmpty(jobDetails.Requestor?.EmailAddress) && jobDetails.JobSummary.RequestorType != RequestorType.Myself,
                ShowHMSMessage       = true
            };

            if (jobDetails.JobSummary.ReferringGroupID != (int)Groups.Generic)
            {
                var groupDetails = await _groupService.GetGroupById(jobDetails.JobSummary.ReferringGroupID, cancellationToken);

                viewModel.GroupName        = groupDetails.GroupName;
                viewModel.ShowGroupMessage = (parameters.RequestRole != RequestRoles.GroupAdmin);

                // TODO: Replace with RequestorDefinedByGroup
                if (jobDetails.JobSummary.ReferringGroupID == (int)Groups.AgeUKWirral)
                {
                    viewModel.ShowRequestorMessage = false;
                }
            }
            else
            {
                viewModel.ShowGroupMessage = false;
            }

            return(View(parameters.RenderAsPopup ? "FeedbackCapturePopup" : "FeedbackCapture", viewModel));
        }
Exemple #2
0
        public async Task <IActionResult> PostTaskFeedbackCapture(string j, string r, FeedbackCaptureEditModel model, CancellationToken cancellationToken)
        {
            int          jobId       = Base64Utils.Base64DecodeToInt(j);
            RequestRoles requestRole = (RequestRoles)Base64Utils.Base64DecodeToInt(r);

            if (!_authService.GetUrlIsSessionAuthorised(HttpContext))
            {
                return(Redirect("/Error/401"));
            }
            if (!ModelState.IsValid)
            {
                throw new Exception($"Invalid model state in PostTaskFeedbackCapture for job {jobId}");
            }

            model.JobId = jobId;
            model.RoleSubmittingFeedback = requestRole;

            var user = await _authService.GetCurrentUser(HttpContext, cancellationToken);

            var job = await _requestService.GetJobSummaryAsync(jobId, cancellationToken);

            var result = await _feedbackService.PostRecordFeedback(user, model);

            return(ShowMessage(result, job.ReferringGroupID, model));
        }