public async Task <JsonResult> GetCommonReassignees()
        {
            var workflowIds       = ((await Request.BodyAsJsonObjectAsync <int[]>()) ?? Empty.IntArray).Distinct().ToArray();
            var workflows         = GetWorkflows(workflowIds);
            var dbt               = new DetailsBulkToken(CurrentUser, DB, workflows);
            var eligibleReviewers = new List <GetEligibleReviewers_Result0>();

            if (dbt.PotentialReviewersByWorkflowId.Count > 0)
            {
                foreach (var p in dbt.PotentialReviewersByWorkflowId.First().Value)
                {
                    eligibleReviewers.Add(new GetEligibleReviewers_Result0
                    {
                        UserId   = p.UserId,
                        UserName = MungeReviewerName(p.UserName, p.IsQualified),
                    });
                }
                foreach (var kvp in dbt.PotentialReviewersByWorkflowId.Skip(1))
                {
                    var erByUserId = kvp.Value.ToDictionaryOnConflictKeepLast(p => p.UserId, p => p);
                    eligibleReviewers.Remove(eligibleReviewers.Where(er => !erByUserId.ContainsKey(er.UserId)).ToList());
                    foreach (var p in kvp.Value)
                    {
                        if (!p.IsQualified)
                        {
                            continue;
                        }
                        var er = eligibleReviewers.FirstOrDefault(z => z.UserId == p.UserId);
                        if (er == null)
                        {
                            continue;
                        }
                        er.UserName    = MungeReviewerName(p.UserName, false);
                        er.IsQualified = false;
                    }
                }
            }
            return(Json(eligibleReviewers.OrderBy(z => z.UserName)));
        }
 public IActionResult Details(int?id, int workflowId, int uloRegionId, string wfDefintionOwnerName = "", bool isAdmin = false, DetailsBulkToken bulkToken = null)
 => ViewComponent(nameof(ReassignInfoViewComponent), new { id, workflowId, uloRegionId, wfDefintionOwnerName, isAdmin, bulkToken });
Exemple #3
0
        public async Task <IViewComponentResult> InvokeAsync(int?id, int workflowId, int uloRegionId, string wfDefintionOwnerName = "", bool isAdmin = false, DetailsBulkToken bulkToken = null)
        {
            var db          = UloDb;
            var CurrentUser = GetCurrentUser(db);

            //Bulk Token
            bulkToken = (bulkToken != null && bulkToken.IsValid) ? bulkToken : new DetailsBulkToken(CurrentUser, db, workflowId);

            //RequestForReassignment
            RequestForReassignment requestForReassignment = null;

            if (id.HasValue)
            {
                requestForReassignment = await db.RequestForReassignment.Include(z => z.UnliqudatedWorkflowQuestions).FirstOrDefaultAsync(r => r.RequestForReassignmentID == id.Value);
            }


            //workflow
            var workflow = await db.Workflows.FindAsync(workflowId);

            var wfDesc = Manager.GetWorkflowDescriptionAsync(workflow).Result;

            string groupOwnerId;

            if (wfDefintionOwnerName == "")
            {
                var currentActivity = wfDesc.WebActionWorkflowActivities
                                      .FirstOrDefault(a => a.WorkflowActivityKey == workflow.CurrentWorkflowActivityKey);
                groupOwnerId = GetUserId(currentActivity.OwnerUserName, db);
            }
            else
            {
                groupOwnerId = GetUserId(wfDefintionOwnerName, db);
            }

            //User
            IList <SelectListItem> userSelectItems = new List <SelectListItem>();

            if (PortalHelpers.UseOldGetEligibleReviewersAlgorithm)
            {
                var prohibitedUserIds = bulkToken.ProhibitedOwnerIdsByWorkflowId[workflowId];

                userSelectItems = Cacher.FindOrCreateValue(
                    Cache.CreateKey(groupOwnerId, uloRegionId, "fdsfdsaf"),
                    () => db.UserUsers
                    .Where(uu => uu.ParentUserId == groupOwnerId && uu.RegionId == uloRegionId && uu.ChildUser.UserType == AspNetUser.UserTypes.Person)
                    .Select(uu => new { UserName = uu.ChildUser.UserName, UserId = uu.ChildUserId }).ToList(),
                    PortalHelpers.MediumCacheTimeout
                    ).ConvertAll(z => CreateUserSelectListItem(z.UserId, z.UserName, prohibitedUserIds.Contains(z.UserId))).ToList();

                if (Cacher.FindOrCreateValue(
                        Cache.CreateKey(uloRegionId, User.Identity.Name),
                        () =>
                {
                    var userReassignRegions = UserHelpers.GetReassignmentGroupRegions(User);
                    return(User.HasPermission(ApplicationPermissionNames.CanReassign) && userReassignRegions.Contains(uloRegionId));
                },
                        PortalHelpers.MediumCacheTimeout
                        ))
                {
                    userSelectItems.Add(ToSelectListItem(bulkToken.CurrentUser));
                }
            }
            else
            {
                userSelectItems = new List <SelectListItem>();
                foreach (var p in bulkToken.PotentialReviewersByWorkflowId[workflowId])
                {
                    string text = MungeReviewerName(p.UserName, p.IsQualified);
                    userSelectItems.Add(CreateUserSelectListItem(p.UserId, text));
                }
            }

            if (workflow.OwnerUserId == GetUserId(CurrentUser.UserName, db))
            {
                userSelectItems.Remove(userSelectItems.Where(z => z.Value == GetUserId(CurrentUser.UserName, db)).ToList());
            }
            userSelectItems = userSelectItems.OrderBy(z => z.Text).ToList();
            userSelectItems.Insert(0, CreateUserSelectListItem(GetUserId("Reassign Group", db), "Reassign Group"));


            // parameters values
            var requestForReassignmentId = requestForReassignment?.RequestForReassignmentID;
            var suggestedReviewerId      = requestForReassignment != null ? requestForReassignment.SuggestedReviewerId : "";
            var justificationKey         = requestForReassignment?.UnliqudatedWorkflowQuestions.JustificationKey;

            var comments = requestForReassignment != null
                ? requestForReassignment.UnliqudatedWorkflowQuestions.Comments : "";

            var detailsView = isAdmin ? "_DetailsMasterList.cshtml" : "_Details.cshtml";

            return(View(
                       "~/Views/Ulo/Details/Workflow/RequestForReassignments/" + detailsView,
                       new RequestForReassignmentViewModel(suggestedReviewerId, justificationKey, requestForReassignmentId, comments, workflowId, uloRegionId, userSelectItems, null)));
        }