internal Dictionary SetStampProperty()

in tree/master/cloud/src/solution/Microsoft.Legal.MatterCenter.Web/Common/MatterProvision.cs [1543:1907]


        internal Dictionary<string, string> SetStampProperty(MatterMetdataVM matterMetadata)
        {
            try
            {

                Client client = matterMetadata.Client;
                Matter matter = matterMetadata.Matter;
                MatterDetails matterDetails = matterMetadata.MatterDetails;
                var index = 0;
                List<string> arrRoles =new List<string>();
                List<string> arrPermissions = new List<string>();

                foreach (IList<string> userNames in matter.AssignUserNames)
                {
                    IList<string> userNamesListTemp = userNames.Where(user => !string.IsNullOrWhiteSpace(user)).ToList();
                    foreach (var userTem in userNamesListTemp)
                    {
                        arrRoles.Add(matter.Roles[index]);
                        arrPermissions.Add(matter.Permissions[index]);
                    }
                    index++;
                }
                matter.Roles = arrRoles;
                matter.Permissions = arrPermissions;
                string documentTemplateCount = string.Join(ServiceConstants.DOLLAR + ServiceConstants.PIPE + ServiceConstants.DOLLAR, matter.DocumentTemplateCount);         
                string matterCenterPermission = string.Join(ServiceConstants.DOLLAR + ServiceConstants.PIPE + ServiceConstants.DOLLAR, matter.Permissions);
                string matterCenterRoles = string.Join(ServiceConstants.DOLLAR + ServiceConstants.PIPE + ServiceConstants.DOLLAR, matter.Roles);
                string[] members = matterDetails.TeamMembers.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
                string finalTeamMembers = String.Join(";", members);
                string finalResponsibleAttorneysUsers = matterDetails.ResponsibleAttorney;
                string finalResponsibleAttorneysEmail = matterDetails.ResponsibleAttorneyEmail;
                string matterCenterUsers = string.Empty;
                string matterCenterUserEmails = string.Empty;
                string separator = string.Empty;
                foreach (IList<string> userNames in matter.AssignUserNames)
                {
                    IList<string> userNamesListTemp = userNames.Where(user => !string.IsNullOrWhiteSpace(user)).ToList();
                    foreach (var userTem in userNamesListTemp)
                    {
                        if (userDetails.CheckUserPresentInMatterCenter(client.Url, userTem) == true)
                        {
                            matterCenterUsers += separator + string.Join(ServiceConstants.SEMICOLON, userTem);
                            separator = ServiceConstants.DOLLAR + ServiceConstants.PIPE + ServiceConstants.DOLLAR;
                        }
                    }
                }

                foreach (IList<string> userEmails in matter.AssignUserEmails)
                {
                    IList<string> userNamesListTemp = userEmails.Where(user => !string.IsNullOrWhiteSpace(user)).ToList();
                    foreach (var userEmailTem in userNamesListTemp)
                    {
                        if (userDetails.CheckUserPresentInMatterCenter(client.Url, userEmailTem) == true)
                        {
                            matterCenterUserEmails += string.Join(ServiceConstants.SEMICOLON, userEmailTem) + separator;
                        }
                    }
                }
                var finalMatterPermissionsList = matterCenterPermission.Replace("$|$", "$").Split('$').ToList();
                var finalMatterRolesList = matterCenterRoles.Replace("$|$", "$").Split('$').ToList();
                var finalTeamMembersList = matterDetails.TeamMembers.Split(';').Where(s => !string.IsNullOrWhiteSpace(s)).ToList();
                //matterDetails.TeamMembers.Replace(";;", "$").Split('$').ToList();
                var finalResponsibleAttorneysEmailList = matterDetails.ResponsibleAttorneyEmail.Split(';').ToList();
                var finalResponsibleAttorneysUsersList = matterDetails.ResponsibleAttorney.Split(';').ToList();
                var userEmailsList = matter.AssignUserEmails;
                var userNamesList = matter.AssignUserNames;

                List<int> itemsToRemove = new List<int>();
                List<int> itemsToRemoveAttorneys = new List<int>();
                int l = 0;
                foreach (string userName in finalResponsibleAttorneysUsersList)
                {
                    if (!string.IsNullOrWhiteSpace(userName) && userDetails.CheckUserPresentInMatterCenter(client.Url, userName) == false)
                    {
                        itemsToRemoveAttorneys.Add(l);
                    }
                    l = l + 1;
                }

                if (itemsToRemoveAttorneys.Count > 0)
                {
                    for (int k = 0; k < itemsToRemoveAttorneys.Count; k++)
                    {
                        if (finalResponsibleAttorneysEmailList.Count > itemsToRemoveAttorneys[k] && finalResponsibleAttorneysEmailList[itemsToRemoveAttorneys[k]] != null)
                        {
                            finalResponsibleAttorneysEmailList[itemsToRemoveAttorneys[k]] = string.Empty;
                            finalResponsibleAttorneysUsersList[itemsToRemoveAttorneys[k]] = string.Empty;
                        }
                    }
                    finalResponsibleAttorneysEmailList = finalResponsibleAttorneysEmailList.Where(s => !string.IsNullOrWhiteSpace(s)).ToList();
                    finalResponsibleAttorneysUsersList = finalResponsibleAttorneysUsersList.Where(s => !string.IsNullOrWhiteSpace(s)).ToList();
                }

                l = 0;

                //Check if any of the assigned team member is an external user?
                foreach (IList<string> userNames in matter.AssignUserNames)
                {
                    IList<string> userNamesListTemp = userNames.Where(user => !string.IsNullOrWhiteSpace(user)).ToList();
                    foreach (var userTem in userNamesListTemp)
                    {
                        if (userDetails.CheckUserPresentInMatterCenter(client.Url, userTem) == false)
                        {
                            itemsToRemove.Add(l);
                        }
                        l = l + 1;
                    }
                   
                }

                //If any of the team members are external users, do not add his role, his permission into matter proeprty bag
                //Once the user accepts the invitation, then  update the property bag with role and permissions
                if (itemsToRemove.Count > 0)
                {
                    for (int k = 0; k < itemsToRemove.Count; k++)
                    {
                        finalMatterPermissionsList[itemsToRemove[k]] = string.Empty;
                        finalMatterRolesList[itemsToRemove[k]] = string.Empty; ;
                        finalTeamMembersList[itemsToRemove[k]] = string.Empty; ;
                    }

                    finalMatterPermissionsList = finalMatterPermissionsList.Where(s => !string.IsNullOrWhiteSpace(s)).ToList();
                    finalMatterRolesList = finalMatterRolesList.Where(s => !string.IsNullOrWhiteSpace(s)).ToList();
                    finalTeamMembersList = finalTeamMembersList.Where(s => !string.IsNullOrWhiteSpace(s)).ToList();
                    var finalTeamMembersArray = finalTeamMembersList.ToArray();
                    var finalMatterPermissionsArray = finalMatterPermissionsList.ToArray();
                    var finalMatterRolesArray = finalMatterRolesList.ToArray();
                    var finalResponsibleAttorneysEmailsArray = finalResponsibleAttorneysEmailList.ToArray();
                    var finalResponsibleAttorneysUsersArray = finalResponsibleAttorneysUsersList.ToArray();

                    matterCenterUsers = "";
                    matterCenterUserEmails = "";
                    separator = "";
                    foreach (IList<string> userNames in userNamesList)
                    {
                        IList<string> userNamesListTemp = userNames.Where(user => !string.IsNullOrWhiteSpace(user)).ToList();
                        foreach (var userTem in userNamesListTemp)
                        {
                            if (userDetails.CheckUserPresentInMatterCenter(client.Url, userTem) == true)
                            {
                                matterCenterUsers += separator + string.Join(ServiceConstants.SEMICOLON, userTem);
                                separator = ServiceConstants.DOLLAR + ServiceConstants.PIPE + ServiceConstants.DOLLAR;
                            }
                        }

                    }
                    separator = "";
                    foreach (IList<string> userEmails in userEmailsList)
                    {
                        IList<string> userNamesListTemp = userEmails.Where(user => !string.IsNullOrWhiteSpace(user)).ToList();
                        foreach (var userTem in userNamesListTemp)
                        {
                            if (userDetails.CheckUserPresentInMatterCenter(client.Url, userTem) == true)
                            {
                                matterCenterUserEmails += separator + string.Join(ServiceConstants.SEMICOLON, userTem);
                                separator = ServiceConstants.DOLLAR + ServiceConstants.PIPE + ServiceConstants.DOLLAR;
                            }
                        }
                    }

                    finalTeamMembers = string.Join(";", finalTeamMembersArray);                    
                    matterCenterPermission = string.Join("$|$", finalMatterPermissionsArray);
                    matterCenterRoles = string.Join("$|$", finalMatterRolesArray);
                    finalResponsibleAttorneysEmail = string.Join(";", finalResponsibleAttorneysEmailsArray);
                    finalResponsibleAttorneysUsers = string.Join(";", finalResponsibleAttorneysUsersArray);
                }
                List<string> keys = new List<string>();
                Dictionary<string, string> propertyList = new Dictionary<string, string>();
                //Get all the matter stamped properties from the appsettings.json file
                var matterStampedProperties = configuration.GetSection("Matter").GetChildren();
                keys.Add(matterSettings.StampedPropertyMatterName);
                keys.Add(matterSettings.StampedPropertyMatterID);
                keys.Add(matterSettings.StampedPropertyClientName);
                keys.Add(matterSettings.StampedPropertyClientID);
                keys.Add(matterSettings.StampedPropertyResponsibleAttorney);
                keys.Add(matterSettings.StampedPropertyResponsibleAttorneyEmail);
                keys.Add(matterSettings.StampedPropertyTeamMembers);
                keys.Add(matterSettings.StampedPropertyIsMatter);
                keys.Add(matterSettings.StampedPropertyOpenDate);
                keys.Add(matterSettings.StampedPropertySecureMatter);
                keys.Add(matterSettings.StampedPropertyBlockedUploadUsers);
                keys.Add(matterSettings.StampedPropertyMatterDescription);
                keys.Add(matterSettings.StampedPropertyConflictCheckDate);
                keys.Add(matterSettings.StampedPropertyConflictCheckBy);
                keys.Add(matterSettings.StampedPropertyMatterCenterRoles);
                keys.Add(matterSettings.StampedPropertyMatterCenterPermissions);
                keys.Add(matterSettings.StampedPropertyMatterCenterUsers);
                keys.Add(matterSettings.StampedPropertyMatterCenterUserEmails);
                keys.Add(matterSettings.StampedPropertyDefaultContentType);
                keys.Add(matterSettings.StampedPropertyIsConflictIdentified);
                keys.Add(matterSettings.StampedPropertyDocumentTemplateCount);
                keys.Add(matterSettings.StampedPropertyBlockedUsers);
                keys.Add(matterSettings.StampedPropertyMatterGUID);
                /*
                 * All the managed columns need to be read from the appsettings.json file. In old implementation
                 * all the managed columns are hardcoded and that hardcoding has been removed, by reading the
                 * column names from appsettings.json file
                 */
                //Get the number of levels from Taxonomy Settings
                int levels = int.Parse(configuration.GetSection("Taxonomy")["Levels"].ToString());
                for (int i = 1; i <= levels; i++)
                {
                    //Get all the managed columns from "ContentType" settings from appsettings.json file
                    string stampedColumnName = configuration.GetSection("ContentTypes").GetSection("ManagedStampedColumns")["ColumnName" + i];
                    string columnName = configuration.GetSection("ContentTypes").GetSection("ManagedColumns")["ColumnName" + i];
                    ManagedColumn managedColumn = matterDetails.ManagedColumnTerms[columnName];                    
                    //Add all the managed columns values to the property list of the matter document library             
                    propertyList.Add(stampedColumnName, WebUtility.HtmlEncode(managedColumn.TermName.Trim()));
                    //Add all the managed columns to the Indexed Property keys of the matter document library
                    keys.Add(stampedColumnName);
                }
                propertyList.Add(matterSettings.StampedPropertyMatterName, WebUtility.HtmlEncode(matter.Name));
                propertyList.Add(matterSettings.StampedPropertyMatterID, WebUtility.HtmlEncode(matter.Id));
                if(!propertyList.ContainsKey(matterSettings.StampedPropertyClientName))
                {
                    propertyList.Add(matterSettings.StampedPropertyClientName, WebUtility.HtmlEncode(client.Name));
                }                
                propertyList.Add(matterSettings.StampedPropertyClientID, WebUtility.HtmlEncode(client.Id));
                propertyList.Add(matterSettings.StampedPropertyResponsibleAttorney, WebUtility.HtmlEncode(finalResponsibleAttorneysUsers));
                propertyList.Add(matterSettings.StampedPropertyTeamMembers, WebUtility.HtmlEncode(finalTeamMembers.Replace(";", "; ")));
                propertyList.Add(matterSettings.StampedPropertyIsMatter, ServiceConstants.TRUE);
                propertyList.Add(matterSettings.StampedPropertyOpenDate, WebUtility.HtmlEncode(DateTime.Now.ToString(matterSettings.ValidDateFormat, CultureInfo.InvariantCulture)));
                propertyList.Add(matterSettings.PropertyNameVtiIndexedPropertyKeys, WebUtility.HtmlEncode(ServiceUtility.GetEncodedValueForSearchIndexProperty(keys)));
                propertyList.Add(matterSettings.StampedPropertySecureMatter, (matter.Conflict != null) ? (matter.Conflict.SecureMatter != null) ? WebUtility.HtmlEncode(matter.Conflict.SecureMatter) : "False" : "False");
                propertyList.Add(matterSettings.StampedPropertyBlockedUploadUsers, WebUtility.HtmlEncode(string.Join(";", matterDetails.UploadBlockedUsers)));
                propertyList.Add(matterSettings.StampedPropertyMatterDescription, WebUtility.HtmlEncode(matter.Description));
                propertyList.Add(matterSettings.StampedPropertyConflictCheckDate, (string.IsNullOrEmpty(matter.Conflict.CheckOn)) ?
                    "" : WebUtility.HtmlEncode(Convert.ToDateTime(matter.Conflict.CheckOn, CultureInfo.InvariantCulture).ToString(matterSettings.ValidDateFormat, CultureInfo.InvariantCulture)));
                propertyList.Add(matterSettings.StampedPropertyConflictCheckBy, WebUtility.HtmlEncode(matter.Conflict.CheckBy));
                propertyList.Add(matterSettings.StampedPropertyMatterCenterRoles, WebUtility.HtmlEncode(matterCenterRoles));
                propertyList.Add(matterSettings.StampedPropertyMatterCenterPermissions, WebUtility.HtmlEncode(matterCenterPermission));
                propertyList.Add(matterSettings.StampedPropertyMatterCenterUsers, WebUtility.HtmlEncode(matterCenterUsers));
                propertyList.Add(matterSettings.StampedPropertyDefaultContentType, WebUtility.HtmlEncode(matter.DefaultContentType));
                propertyList.Add(matterSettings.StampedPropertyIsConflictIdentified, WebUtility.HtmlEncode(matter.Conflict.Identified));
                propertyList.Add(matterSettings.StampedPropertyDocumentTemplateCount, WebUtility.HtmlEncode(documentTemplateCount));
                propertyList.Add(matterSettings.StampedPropertyBlockedUsers, WebUtility.HtmlEncode(string.Join(";", matter.BlockUserNames)));
                propertyList.Add(matterSettings.StampedPropertyMatterGUID, WebUtility.HtmlEncode(matter.MatterGuid));
                propertyList.Add(matterSettings.StampedPropertySuccess, ServiceConstants.TRUE);
                propertyList.Add(matterSettings.StampedPropertyMatterCenterUserEmails, WebUtility.HtmlEncode(matterCenterUserEmails));
                propertyList.Add(matterSettings.StampedPropertyResponsibleAttorneyEmail, WebUtility.HtmlEncode(finalResponsibleAttorneysEmail));

                if (matterMetadata.MatterProvisionFlags.SendEmailFlag)
                {
                    ShareMatter(matterMetadata, matterMetadata.MatterProvisionFlags.MatterLandingFlag);
                }

                l = 0;
                itemsToRemoveAttorneys.Clear();
                finalResponsibleAttorneysEmailList = matterDetails.ResponsibleAttorneyEmail.Split(';').ToList();
                finalResponsibleAttorneysUsersList = matterDetails.ResponsibleAttorney.Split(';').ToList();
                foreach (string userName in finalResponsibleAttorneysUsersList)
                {
                    if (!string.IsNullOrWhiteSpace(userName) && userDetails.CheckUserPresentInMatterCenter(client.Url, userName) == true)
                    {
                        itemsToRemoveAttorneys.Add(l);
                    }
                    l = l + 1;
                }
                if (itemsToRemoveAttorneys.Count > 0)
                {
                    for (int k = 0; k < itemsToRemoveAttorneys.Count; k++)
                    {
                        finalResponsibleAttorneysUsersList[itemsToRemoveAttorneys[k]] = string.Empty;
                        finalResponsibleAttorneysEmailList[itemsToRemoveAttorneys[k]] = string.Empty;
                    }
                    finalResponsibleAttorneysUsersList = finalResponsibleAttorneysUsersList.Where(s => !string.IsNullOrWhiteSpace(s)).ToList();
                    finalResponsibleAttorneysEmailList = finalResponsibleAttorneysEmailList.Where(s => !string.IsNullOrWhiteSpace(s)).ToList();
                }
                itemsToRemove.Clear();
                l = 0;
                //Check if any of the assigned team member is an external user?
                //   List<List<string>> userNamesListTempForExt = new List<List<string>>();
                //setting the internal users to null and adding the index to remove the roles and permissions in matter.Permissions and matter.roles
                for (int z=0;z< matter.AssignUserNames.Count; z++)
                {                  
                    for(int y=0;y< matter.AssignUserNames[z].Count; y++)
                    {
                        string userName = matter.AssignUserNames[z][y].ToString();
                        if (userName != "")
                        {
                            if (userDetails.CheckUserPresentInMatterCenter(client.Url, userName) == true)
                            {
                                itemsToRemove.Add(l);
                                matter.AssignUserNames[z][y] = null;
                                matter.AssignUserEmails[z][y] = null;
                            }                           
                            l = l + 1;
                        }
                    }
                }

               

                for (int x = 0; x < matter.AssignUserNames.Count; x++)
                {
                    var matterAssignedNames = matter.AssignUserNames[x].Where(user => !string.IsNullOrWhiteSpace(user));
                    var matterAssignedUserEmails = matter.AssignUserEmails[x].Where(user => !string.IsNullOrWhiteSpace(user));
                    if (matterAssignedNames.Count() > 0)
                    {
                        matter.AssignUserNames[x] = matterAssignedNames.ToList();
                        matter.AssignUserEmails[x] = matterAssignedUserEmails.ToList();
                    }
                    else
                    {
                        matter.AssignUserNames[x] = null;
                        matter.AssignUserEmails[x] = null;
                    }
                }
               

                //foreach (IList<string> userNames in matter.AssignUserNames)
                //{
                //    IList<string> userNamesListTemp = userNames.Where(user => !string.IsNullOrWhiteSpace(user)).ToList();
                //    List<string> userNameExtForTemp = new List<string>();
                //    foreach (var userTem in userNamesListTemp)
                //    {

                //        if (userDetails.CheckUserPresentInMatterCenter(client.Url, userTem) == true)
                //        {
                //            itemsToRemove.Add(l);

                //        }
                //        else
                //        {
                //            userNameExtForTemp.Add(userTem);
                //        }
                //        l = l + 1;
                //    }
                //    if (userNameExtForTemp.Count >= 1) {
                //        userNamesListTempForExt.Add(userNameExtForTemp);
                //    }
                //}

                finalTeamMembersList = matterDetails.TeamMembers.Split(';').Where(s => !string.IsNullOrWhiteSpace(s)).ToList();               
                if (itemsToRemove.Count > 0)
                {
                    for (int k = 0; k < itemsToRemove.Count; k++)
                    {
                        matter.Permissions[itemsToRemove[k]] = string.Empty;
                        matter.Roles[itemsToRemove[k]] = string.Empty;
                        //matter.AssignUserEmails[itemsToRemove[k]] = null;
                      //  matter.AssignUserNames[itemsToRemove[k]] = null;
                        finalTeamMembersList[itemsToRemove[k]] = string.Empty;
                    }
                }

                matter.Permissions = matter.Permissions.Where(s => !string.IsNullOrWhiteSpace(s)).ToList();
                matter.Roles = matter.Roles.Where(s => !string.IsNullOrWhiteSpace(s)).ToList();
                finalTeamMembersList = finalTeamMembersList.Where(s => !string.IsNullOrWhiteSpace(s)).ToList();
                matter.AssignUserEmails = matter.AssignUserEmails.Where(s => s != null).ToList();
                matter.AssignUserNames = matter.AssignUserNames.Where(s => s != null).ToList();


                matterDetails.ResponsibleAttorneyEmail = string.Empty;
                matterDetails.ResponsibleAttorney = string.Empty;
                matterDetails.TeamMembers = string.Join(";", finalTeamMembersList.ToArray());
                matterDetails.ResponsibleAttorneyEmail = string.Join(";", finalResponsibleAttorneysEmailList.ToArray());
                matterDetails.ResponsibleAttorney = string.Join(";", finalResponsibleAttorneysUsersList.ToArray());
                return propertyList;
            }
            catch(Exception ex)
            {
                throw;
            }
        }