public static ProjectModerationDisputeModel ToDisputeModel(this ProjectModeration entity)
        {
            if (entity == null)
                return null;

            var model = new ProjectModerationDisputeModel
            {
                Id = entity.Id,
                Project = entity.Project.ToModel(),
                ComplaintId = entity.ComplaintId,
                ComplaintType = entity.ComplaintType,
                TypeDescription = entity.ComplaintType.GetDescription(),
                ModerationQueue = entity.ModerationQueue.ToModel(),
                Reason = entity.Reason
            };

            return model;
        }
 private ProjectModerationDisputeModel PrepareModerationDisputeModel(ProjectModerationDisputeModel model)
 {
     int createdBy = model.Project.CreatedById ?? 0;
     if (model.Project.CreatedById != null)
         model.CreatedByUser = _userService.GetUserById(createdBy).ToModel();
     model.ProjectUserHistory = _projectService.GetAllProjectUserHistory(model.Project.Id).Select(x => x.ToModel()).ToList();
     foreach (var user in model.Project.Owners)
     {
         if (createdBy != user.Id)
         {
             user.Actions.Add(new DeleteActionLink(user.Id, Search, Page));
             model.CurrentModerators.Add(user);
         }
     }
     return model;
 }
        public ActionResult Moderation(int id, bool type, ProjectModerationDisputeModel form)
        {
            if (!_permissionService.Authorize(PermissionProvider.ManageProjects))
                return AccessDeniedView();

            // Get the queue item
            var queue = _moderationQueueService.GetProjectModerationByModerationQueueId(id);
            if (queue == null || queue.Deleted)
                return RedirectToAction("index", "moderation");

            // Get the action in preparation for updating
            var project = queue.Project;
            if (project == null)
                return RedirectToAction("index");

            var model = queue.ToDisputeModel();

            try
            {
                var queueUpdate = _moderationQueueService.GetById(id);
                project.ModeratorNotes = form.Project.ModerationNotes;

                if (type)
                {
                    // Update the project properties
                    project.LastModeratorApprovalBy = _workContext.CurrentUser.Id;
                    project.LastModeratorApprovalDate = DateTime.Now;
                    if (project.Owners.All(x => x.Id != model.ModerationQueue.CreatedBy))
                        project.Owners.Add(_userService.GetUserById(model.ModerationQueue.CreatedBy));

                    // Commit the changes
                    _projectService.UpdateProject(project);
                    SuccessNotification("The moderation request has been resolved, the action has been changed.");

                    // Queue the messages
                    _messageQueueService.ProjectUserMessage(project, MessageType.ProjectDisputeApproved, _userService.GetUserById(queue.ModerationQueue.CreatedBy), form.ModerationQueue.Notes);
                }
                else
                {
                    // Commit the changes
                    _projectService.UpdateProject(project);
                    SuccessNotification("The moderation request has been resolved, the action has not be changed.");

                    // Queue the messages
                    _messageQueueService.ProjectUserMessage(project, MessageType.ProjectDisputeRejected, _userService.GetUserById(queue.ModerationQueue.CreatedBy), form.ModerationQueue.Notes);
                }

                // Mark the moderation request as resolved
                queueUpdate.StatusType = ModerationStatusType.Closed;
                _moderationQueueService.UpdateModerationQueue(queueUpdate);

                return RedirectToRoute("Admin_default", new { Controller = "moderation", Action = "index" });
            }
            catch (Exception ex)
            {
                ErrorNotification(ex.ToString());
                ErrorNotification("An error occurred saving the action details, please try again.");
            }

            PrepareModerationBreadcrumbs();

            // Return the view
            if (model.ComplaintType == ProjectComplaintType.DisputeOwnership)
                return View("DisputeOwnership", PrepareModerationDisputeModel(model));
            return View(model);
        }