cm.UpdateMatter = function()

in tree/master/cloud/src/solution/Microsoft.Legal.MatterCenter.Web/wwwroot/app/matter/matterusers.controller.js [1539:1708]


        cm.UpdateMatter = function ($event) {
            cm.popupContainerBackground = "Show";
            if ($event) {
                $event.stopPropagation();
            }
            var arrUserNames = [],
                arrUserEmails = [],
                arrTeamMembers = [],
                roleInformation = {},
                arrReadOnlyUsers = [],
                sResponsibleAttorney = [],
                sResponsibleAttorneyEmail = [];
            var arrBlockUserNames = cm.matterProperties.matterObject.blockUserNames ? cm.matterProperties.matterObject.blockUserNames : ""

            var attornyCheck = validateAttornyUserRolesAndPermissions($event);
            var validUsersCheck = validateUsers();
            if (validUsersCheck) {
                var checkUserDExists = validateCheckUserExisits();
                if (attornyCheck && validUsersCheck && checkUserDExists) {
                    angular.forEach(cm.assignPermissionTeams, function (item) {
                        if ("" !== item.assignedRole && "" !== item.assignedPermission) {
                            if (roleInformation.hasOwnProperty(item.assignedRole.name)) {
                                roleInformation[item.assignedRole.name] = roleInformation[item.assignedRole.name] + ";" + item.assignedUser;
                            }
                            else {
                                roleInformation[item.assignedRole.name] = item.assignedUser;
                            }
                        }
                    });

                    angular.forEach(cm.assignPermissionTeams, function (item) {
                        arrUserNames.push(getUserName(item.assignedUser.trim() + ";", true));
                        arrUserEmails.push(getUserName(item.assignedUser.trim() + ";", false));
                        arrTeamMembers.push(getUserName(item.assignedUser.trim() + ";", true).join(";"));
                        var User_Upload_Permissions = "Read";
                        angular.forEach(cm.assignPermissionTeams, function (item) {
                            if (item.assignedPermission.name.toLowerCase() === User_Upload_Permissions.toLowerCase()) {
                                arrReadOnlyUsers.push(getUserName(item.assignedUser.trim() + ";", false).join(";"), ";");
                            }
                        });

                    });

                    validateTeamAssigmentRole();
                    getArrAssignedUserNamesAndEmails();
                    var arrRoles = getAssignedUserRoles();
                    var arrPermissions = getAssignedUserPermissions();
                    angular.forEach(cm.assignPermissionTeams, function (item) {
                        if (1 <= cm.assignPermissionTeams.length) {
                            if ("" !== item.assignedRole && "" !== item.assignedPermission) {
                                if (-1 !== cm.oMandatoryRoleNames.indexOf(item.assignedRole.name)) {
                                    sResponsibleAttorney.push(getUserName(item.assignedUser + ";", true).join(";"));
                                    sResponsibleAttorneyEmail.push(getUserName(item.assignedUser + ";", false).join(";"));
                                }
                            }
                        }
                    });
                    var updatedMatterUsersDetails = [];
                    var newlyAddedMatterUsers = [];
                    var usersToRemoveFromMatter = [];
                    updatedMatterUsersDetails = getUpdatedMatterUserDetails();

                    newlyAddedMatterUsers = getNewlyAddedMatterUserDetails(updatedMatterUsersDetails);
                    angular.forEach(newlyAddedMatterUsers, function (newlyAddedUser) {
                        updatedMatterUsersDetails.push(newlyAddedUser);
                    });
                    arrUserNames = []; arrUserEmails = []; arrTeamMembers = [];
                    arrReadOnlyUsers = []; arrPermissions = []; arrRoles = [];
                    sResponsibleAttorney = []; sResponsibleAttorneyEmail = [];
                    if (updatedMatterUsersDetails.length > 0) {
                        angular.forEach(updatedMatterUsersDetails, function (item) {
                            arrUserNames.push(getUserName(item.assignedUser.trim() + ";", true));
                            arrUserEmails.push(getUserName(item.assignedUser.trim() + ";", false));
                            arrTeamMembers.push(getUserName(item.assignedUser.trim() + ";", true).join(";"));
                            var User_Upload_Permissions = "Read";
                            angular.forEach(updatedMatterUsersDetails, function (item) {
                                if (item.assignedPermission.name.toLowerCase() === User_Upload_Permissions.toLowerCase()) {
                                    //Need to put emails in arrReadOnlyUsers and not roles
                                    arrReadOnlyUsers.push(getUserName(item.assignedUser.trim() + ";", false).join(";"), ";");
                                }
                            });
                            arrPermissions.push(item.assignedPermission.name);
                            arrRoles.push(item.assignedRole.name);

                            if (-1 !== cm.oMandatoryRoleNames.indexOf(item.assignedRole.name)) {
                                sResponsibleAttorney.push(getUserName(item.assignedUser + ";", true).join(";"));
                                sResponsibleAttorneyEmail.push(getUserName(item.assignedUser + ";", false).join(";"));
                            }
                        });
                    }

                    console.log(updatedMatterUsersDetails);
                    usersToRemoveFromMatter = getDeletedUserDetailsFromMatter();
                    console.log("deleted");
                    console.log(usersToRemoveFromMatter);
                    var arrUsersToRemoveFromMatter = [];
                    angular.forEach(usersToRemoveFromMatter, function (user) {
                        var userNames = getUserName(user.userName.trim() + ";", false);
                        userNames = cleanArray(userNames);
                        arrUsersToRemoveFromMatter.push(userNames);
                    });

                    var updatedMatterUsers = {
                        Client: {
                            Url: cm.clientUrl,
                            Id: "",
                            Name: ""
                        },
                        Matter: {
                            Name: cm.matterName,
                            BlockUserNames: arrBlockUserNames,
                            AssignUserNames: arrUserNames,
                            AssignUserEmails: arrUserEmails,
                            Permissions: arrPermissions,
                            IsUsersExternal: cm.isUsersPresentInSystem,
                            Roles: arrRoles,
                            Conflict: {
                                Identified: cm.sConflictScenario
                            },
                            FolderNames: [],
                            DefaultContentType: "",
                            ContentTypes: [],
                            Description: "",
                            Id: "",
                            MatterGuid: cm.matterProperties.matterObject.matterGuid

                        },
                        MatterDetails: {
                            PracticeGroup: "",
                            AreaOfLaw: "",
                            SubareaOfLaw: "",
                            ResponsibleAttorney: sResponsibleAttorney.join(";").replace(/;;/g, ";"),
                            ResponsibleAttorneyEmail: sResponsibleAttorneyEmail.join(";").replace(/;;/g, ";"),
                            UploadBlockedUsers: arrReadOnlyUsers,
                            TeamMembers: arrTeamMembers.join(";"),
                            RoleInformation: JSON.stringify(roleInformation)
                        },
                        EditMode: cm.isEdit,
                        UserIds: cm.userIDs,
                        SerializeMatter: "",
                        Status: "",
                        UsersNamesToRemove: arrUsersToRemoveFromMatter,
                        IsFullControlPresent: cm.isFullControlePresent,
                        MethodNumber: -1
                    }
                    if (arrUserNames.length > 0 || arrUsersToRemoveFromMatter.length > 0) {

                        cm.successBanner = true;
                        cm.successMsg = "Updating the user permissions to the " + cm.matterName + " this is may take few minutes..";
                        updateMatterPermissions(updatedMatterUsers, function (response) {
                            if (!response.isError) {

                                var listNumbers = response.description.split(';');
                                cm.updateSuccessCallList = 0;
                                updatePermissionsOnMatterLists(updatedMatterUsers, listNumbers, listNumbers.length);

                            }
                        });
                    } else {
                        cm.popupContainerBackground = "hide";
                    }
                }
                else {
                    cm.popupContainerBackground = "hide";
                }
            }
            else {
                cm.popupContainerBackground = "hide";
            }
        }