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;
}
}