public void RemoveUserFromAccounts(WorkgroupPermission workgroupPermission) { switch (workgroupPermission.Role.Id) { case Role.Codes.Approver: foreach (var workgroupAccount in workgroupPermission.Workgroup.Accounts.Where(a => a.Approver == workgroupPermission.User)) { workgroupAccount.Approver = null; _repositoryFactory.WorkgroupAccountRepository.EnsurePersistent(workgroupAccount); } break; case Role.Codes.AccountManager: foreach (var workgroupAccount in workgroupPermission.Workgroup.Accounts.Where(a => a.AccountManager == workgroupPermission.User)) { workgroupAccount.AccountManager = null; _repositoryFactory.WorkgroupAccountRepository.EnsurePersistent(workgroupAccount); } break; case Role.Codes.Purchaser: foreach (var workgroupAccount in workgroupPermission.Workgroup.Accounts.Where(a => a.Purchaser == workgroupPermission.User)) { workgroupAccount.Purchaser = null; _repositoryFactory.WorkgroupAccountRepository.EnsurePersistent(workgroupAccount); } break; default: break; } }
public UserRoles(WorkgroupPermission workgroupPermission) { User = workgroupPermission.User; FirstWorkgroupPermissionId = workgroupPermission.Id; Roles = new List <Role>(); Roles.Add(workgroupPermission.Role); }
public static WorkgroupPermission WorkgroupPermission(int?counter) { var rtValue = new WorkgroupPermission(); rtValue.Workgroup = new Workgroup(); rtValue.Role = new Role(); rtValue.User = new User(); return(rtValue); }
/// <summary> /// When a user is removed from a workgroup, remove them from any pending approvals (note, this does not apply to external approvals) /// </summary> /// <param name="workgroupPermission"></param> public void RemoveUserFromPendingApprovals(WorkgroupPermission workgroupPermission) { if (workgroupPermission.Role.Id != Role.Codes.Approver && workgroupPermission.Role.Id != Role.Codes.AccountManager && workgroupPermission.Role.Id != Role.Codes.Purchaser) { return; } Check.Require(OrderStatusCode.Codes.Approver == Role.Codes.Approver, "Approver"); Check.Require(OrderStatusCode.Codes.AccountManager == Role.Codes.AccountManager, "Account manager"); Check.Require(OrderStatusCode.Codes.Purchaser == Role.Codes.Purchaser, "Purchaser"); var user = workgroupPermission.User; var workgroup = workgroupPermission.Workgroup; var approvals = _repositoryFactory.ApprovalRepository.Queryable.Where(a => !a.Completed && a.User == user && a.Order.Workgroup == workgroup && a.StatusCode.Id == workgroupPermission.Role.Id && !a.IsExternal); foreach (var approval in approvals) { approval.User = null; _repositoryFactory.ApprovalRepository.EnsurePersistent(approval); } }
public void AddRelatedAdminUsers(Workgroup workgroup) { if (!workgroup.Administrative) { //if this isn't admin, we want to check if we should add users from admin workgroups var parentWorkgroupIds = GetParentWorkgroups(workgroup.Id); foreach (var parentWorkgroupId in parentWorkgroupIds) { var parentWorkgroup = _repositoryFactory.WorkgroupRepository.Queryable.Single(a => a.Id == parentWorkgroupId); foreach (var workgroupPermission in parentWorkgroup.Permissions) { if (!_workgroupPermissionRepository.Queryable.Any(a => a.Workgroup == workgroup && a.Role == workgroupPermission.Role && a.User == workgroupPermission.User && a.ParentWorkgroup == parentWorkgroup)) { Check.Require(workgroupPermission.Role.Id != Role.Codes.Requester); var wp = new WorkgroupPermission(); wp.Role = workgroupPermission.Role; wp.User = workgroupPermission.User; wp.Workgroup = workgroup; wp.IsAdmin = true; wp.IsFullFeatured = parentWorkgroup.IsFullFeatured; wp.ParentWorkgroup = parentWorkgroup; _workgroupPermissionRepository.EnsurePersistent(wp); } } } var workgroupPermissionsThatMightNeedToBeRemoved = _workgroupPermissionRepository.Queryable.Where(a => a.Workgroup == workgroup && a.IsAdmin && !parentWorkgroupIds.Contains(a.ParentWorkgroup.Id)).ToList(); foreach (var workgroupPermission in workgroupPermissionsThatMightNeedToBeRemoved) { _workgroupPermissionRepository.Remove(workgroupPermission); } } else { var wp = _workgroupPermissionRepository.Queryable.Where(a => a.Workgroup == workgroup).ToList(); if (wp.Count > 0) { var wpActions = _workgroupPermissionRepository.Queryable.Where(a => a.ParentWorkgroup == workgroup).Select( b => new WorkgroupPermissionActions(b, WorkgroupPermissionActions.Actions.Delete)).ToList(); var ids = GetChildWorkgroups(workgroup.Id); foreach (var adminWP in wp) //Go through each permission in the workgroup { Check.Require(adminWP.Role.Id != Role.Codes.Requester); foreach (var childid in ids) { var wpAction = wpActions.SingleOrDefault( a => a.WorkgroupPermission.Workgroup.Id == childid && a.WorkgroupPermission.User == adminWP.User && a.WorkgroupPermission.Role == adminWP.Role); if (wpAction != null) { wpAction.Action = WorkgroupPermissionActions.Actions.Nothing; } else { wpAction = new WorkgroupPermissionActions(new WorkgroupPermission(), WorkgroupPermissionActions.Actions.Add); wpAction.WorkgroupPermission.Role = adminWP.Role; wpAction.WorkgroupPermission.User = adminWP.User; wpAction.WorkgroupPermission.Workgroup = _workgroupRepository.Queryable.Single(a => a.Id == childid); wpAction.WorkgroupPermission.IsAdmin = true; wpAction.WorkgroupPermission.IsFullFeatured = workgroup.IsFullFeatured; wpAction.WorkgroupPermission.ParentWorkgroup = workgroup; wpActions.Add(wpAction); } } } foreach (var wpAction in wpActions) { switch (wpAction.Action) { case WorkgroupPermissionActions.Actions.Delete: _workgroupPermissionRepository.Remove(wpAction.WorkgroupPermission); break; case WorkgroupPermissionActions.Actions.Add: _workgroupPermissionRepository.EnsurePersistent(wpAction.WorkgroupPermission); break; default: break; } } } } }
/// <summary> /// /// </summary> /// <param name="id">Workgroup Id</param> /// <param name="role">Role being for people being added</param> /// <param name="workgroup">workgroup</param> /// <param name="successCount">how many have already been successfully added</param> /// <param name="lookupUser">user being added</param> /// <param name="failCount">count of number not added</param> /// <param name="notAddedKvp">list of users not added and reason why.</param> /// <returns></returns> public int TryToAddPeople(int id, Role role, Workgroup workgroup, int successCount, string lookupUser, ref int failCount, ref int duplicateCount, List <KeyValuePair <string, string> > notAddedKvp) { var saveParm = lookupUser; var user = _userRepository.GetNullableById(lookupUser); if (user == null) { var ldapuser = _searchService.FindUser(lookupUser); if (ldapuser != null) { lookupUser = ldapuser.LoginId; user = _userRepository.GetNullableById(ldapuser.LoginId); if (user == null) { user = new User(ldapuser.LoginId); user.Email = ldapuser.EmailAddress; user.FirstName = ldapuser.FirstName; user.LastName = ldapuser.LastName; _userRepository.EnsurePersistent(user); var emailPrefs = new EmailPreferences(user.Id); _emailPreferencesRepository.EnsurePersistent(emailPrefs); } } } if (user == null) { //notAddedSb.AppendLine(string.Format("{0} : Not found", saveParm)); notAddedKvp.Add(new KeyValuePair <string, string>(saveParm, "Not found")); failCount++; return(successCount); } if (!_workgroupPermissionRepository.Queryable.Any(a => a.Role == role && a.User == user && a.Workgroup == workgroup && a.IsAdmin == false)) { var workgroupPermission = new WorkgroupPermission(); workgroupPermission.Role = role; workgroupPermission.User = _userRepository.GetNullableById(lookupUser); workgroupPermission.Workgroup = _workgroupRepository.GetNullableById(id); _workgroupPermissionRepository.EnsurePersistent(workgroupPermission); if (workgroup.Administrative) { var ids = GetChildWorkgroups(workgroup.Id); foreach (var childid in ids) { var childWorkgroup = _workgroupRepository.Queryable.Single(a => a.Id == childid); if (!_workgroupPermissionRepository.Queryable.Any(a => a.Workgroup == childWorkgroup && a.Role == role && a.User == user && a.IsAdmin && a.ParentWorkgroup == workgroup)) { Check.Require(role.Id != Role.Codes.Requester); var childPermission = new WorkgroupPermission(); childPermission.Role = role; childPermission.User = workgroupPermission.User; childPermission.Workgroup = childWorkgroup; childPermission.IsAdmin = true; childPermission.IsFullFeatured = workgroup.IsFullFeatured; childPermission.ParentWorkgroup = workgroup; _workgroupPermissionRepository.EnsurePersistent(childPermission); } } } // invalid the cache for the user that was just given permissions _userIdentity.RemoveUserRoleFromCache(Resources.Role_CacheId, workgroupPermission.User.Id); successCount++; } else { //notAddedSb.AppendLine(string.Format("{0} : Is a duplicate", lookupUser)); notAddedKvp.Add(new KeyValuePair <string, string>(lookupUser, "Is a duplicate")); failCount++; duplicateCount++; } return(successCount); }
/// <summary> /// /// </summary> /// <param name="id">Workgroup Id</param> /// <param name="role">Role being for people being added</param> /// <param name="workgroup">workgroup</param> /// <param name="successCount">how many have already been successfully added</param> /// <param name="lookupUser">user being added</param> /// <param name="failCount">count of number not added</param> /// <param name="notAddedKvp">list of users not added and reason why.</param> /// <returns></returns> public int TryToAddPeople(int id, Role role, Workgroup workgroup, int successCount, string lookupUser, ref int failCount, ref int duplicateCount, List<KeyValuePair<string, string>> notAddedKvp) { var saveParm = lookupUser; var user = _userRepository.GetNullableById(lookupUser); if(user == null) { var ldapuser = _searchService.FindUser(lookupUser); if(ldapuser != null) { lookupUser = ldapuser.LoginId; user = _userRepository.GetNullableById(ldapuser.LoginId); if(user == null) { user = new User(ldapuser.LoginId); user.Email = ldapuser.EmailAddress; user.FirstName = ldapuser.FirstName; user.LastName = ldapuser.LastName; _userRepository.EnsurePersistent(user); var emailPrefs = new EmailPreferences(user.Id); _emailPreferencesRepository.EnsurePersistent(emailPrefs); } } } if(user == null) { //notAddedSb.AppendLine(string.Format("{0} : Not found", saveParm)); notAddedKvp.Add(new KeyValuePair<string, string>(saveParm, "Not found")); failCount++; return successCount; } if(!_workgroupPermissionRepository.Queryable.Any(a => a.Role == role && a.User == user && a.Workgroup == workgroup && a.IsAdmin== false)) { var workgroupPermission = new WorkgroupPermission(); workgroupPermission.Role = role; workgroupPermission.User = _userRepository.GetNullableById(lookupUser); workgroupPermission.Workgroup = _workgroupRepository.GetNullableById(id); _workgroupPermissionRepository.EnsurePersistent(workgroupPermission); if (workgroup.Administrative) { var ids = GetChildWorkgroups(workgroup.Id); foreach (var childid in ids) { var childWorkgroup = _workgroupRepository.Queryable.Single(a => a.Id == childid); if (!_workgroupPermissionRepository.Queryable.Any(a=> a.Workgroup==childWorkgroup && a.Role==role && a.User==user && a.IsAdmin && a.ParentWorkgroup==workgroup)) { Check.Require(role.Id != Role.Codes.Requester); var childPermission = new WorkgroupPermission(); childPermission.Role = role; childPermission.User = workgroupPermission.User; childPermission.Workgroup = childWorkgroup; childPermission.IsAdmin = true; childPermission.IsFullFeatured = workgroup.IsFullFeatured; childPermission.ParentWorkgroup = workgroup; _workgroupPermissionRepository.EnsurePersistent(childPermission); } } } // invalid the cache for the user that was just given permissions _userIdentity.RemoveUserRoleFromCache(Resources.Role_CacheId, workgroupPermission.User.Id); successCount++; } else { //notAddedSb.AppendLine(string.Format("{0} : Is a duplicate", lookupUser)); notAddedKvp.Add(new KeyValuePair<string, string>(lookupUser, "Is a duplicate")); failCount++; duplicateCount++; } return successCount; }
/// <summary> /// When a user is removed from a workgroup, remove them from any pending approvals (note, this does not apply to external approvals) /// </summary> /// <param name="workgroupPermission"></param> public void RemoveUserFromPendingApprovals(WorkgroupPermission workgroupPermission) { if(workgroupPermission.Role.Id != Role.Codes.Approver && workgroupPermission.Role.Id != Role.Codes.AccountManager && workgroupPermission.Role.Id != Role.Codes.Purchaser) { return; } Check.Require(OrderStatusCode.Codes.Approver == Role.Codes.Approver, "Approver"); Check.Require(OrderStatusCode.Codes.AccountManager == Role.Codes.AccountManager, "Account manager"); Check.Require(OrderStatusCode.Codes.Purchaser == Role.Codes.Purchaser, "Purchaser"); var user = workgroupPermission.User; var workgroup = workgroupPermission.Workgroup; var approvals = _repositoryFactory.ApprovalRepository.Queryable.Where(a => !a.Completed && a.User == user && a.Order.Workgroup == workgroup && a.StatusCode.Id == workgroupPermission.Role.Id && !a.IsExternal); foreach (var approval in approvals) { approval.User = null; _repositoryFactory.ApprovalRepository.EnsurePersistent(approval); } }
public static WorkgroupPeopleDeleteModel Create(IRepository <WorkgroupPermission> workgroupPermissionRepository, WorkgroupPermission workgroupPermission) { Check.Require(workgroupPermissionRepository != null, "workgroupPermissionRepository null"); Check.Require(workgroupPermission != null, "workgroupPermission null"); var viewModel = new WorkgroupPeopleDeleteModel { WorkgroupPermission = workgroupPermission }; viewModel.WorkgroupPermissions = workgroupPermissionRepository.Queryable.Where(a => a.Workgroup == workgroupPermission.Workgroup && a.User == workgroupPermission.User && !a.Role.IsAdmin && !a.IsAdmin).ToList(); viewModel.AccountApproverCount = 0; viewModel.AccountAccountManagerCount = 0; viewModel.AccountPurchaserCount = 0; foreach (var wgPermission in viewModel.WorkgroupPermissions) { switch (wgPermission.Role.Id) { case Role.Codes.Approver: viewModel.AccountApproverCount = wgPermission.Workgroup.Accounts.Count(a => a.Approver == wgPermission.User); break; case Role.Codes.AccountManager: viewModel.AccountAccountManagerCount = wgPermission.Workgroup.Accounts.Count(a => a.AccountManager == wgPermission.User); break; case Role.Codes.Purchaser: viewModel.AccountPurchaserCount = wgPermission.Workgroup.Accounts.Count(a => a.Purchaser == wgPermission.User); break; default: continue; } } return(viewModel); }
public void RemoveFromCache(WorkgroupPermission workgroupPermissionToDelete) { //System.Web.HttpContext.Current.Cache.Remove(string.Format(Resources.Role_CacheId, workgroupPermissionToDelete.User.Id)); System.Web.HttpContext.Current.Session.Remove(string.Format(Resources.Role_CacheId, workgroupPermissionToDelete.User.Id)); }
public static WorkgroupPermission WorkgroupPermission(int? counter) { var rtValue = new WorkgroupPermission(); rtValue.Workgroup = new Workgroup(); rtValue.Role = new Role(); rtValue.User = new User(); return rtValue; }
/* * Demo Data */ private static void InsertDemoData(ISession session) { // create the users var admin = new User("anlai") { FirstName = "Alan", LastName = "Lai", Email = "*****@*****.**", IsActive = true }; var user1 = new User("pjfry") { FirstName = "Philip", LastName = "Fry", Email = "*****@*****.**", IsActive = true }; var user2 = new User("hsimpson") { FirstName = "Homer", LastName = "Simpson", Email="*****@*****.**", IsActive = true}; var user3 = new User("brannigan") { FirstName = "Zapp", LastName = "Brannigan", Email = "*****@*****.**", IsActive = true }; var user4 = new User("awong") { FirstName = "Amy", LastName = "Wong", Email = "*****@*****.**", IsActive = true }; var user5 = new User("zoidberg") { FirstName = "John", LastName = "Zoidberg", Email = "*****@*****.**", IsActive = true }; var user6 = new User("moe") { FirstName = "Moe", LastName = "Szyslak", Email = "*****@*****.**", IsActive = true }; var user7 = new User("burns") { FirstName = "Monty", LastName = "Burns", Email = "*****@*****.**", IsActive = true }; var user8 = new User("flanders") { FirstName = "Ned", LastName = "Flanders", Email = "*****@*****.**", IsActive = true }; var user9 = new User("grimes") { FirstName = "Frank", LastName = "Grimes", Email = "*****@*****.**", IsActive = true }; var user10 = new User("bender") { FirstName = "Bender", LastName = "Rodriguez", Email = "*****@*****.**", IsActive = true }; // setup the workgroup var org1 = session.Load<Organization>("APLS"); var org2 = session.Load<Organization>("AINF"); var org3 = session.Load<Organization>("ACRU"); var orgset1 = new List<Organization>(); orgset1.Add(org1); orgset1.Add(org2); var orgset2 = new List<Organization>(); orgset2.Add(org2); orgset2.Add(org3); var workgroup = new Workgroup() { Name = "Legitimate Workgroup, Not a Front", IsActive = true, PrimaryOrganization = org1, Organizations = orgset1}; var acct1 = session.Load<Account>("3-APSAC37"); var acct2 = session.Load<Account>("3-APSM170"); var acct3 = session.Load<Account>("3-APSRSTR"); // has sub account var acct4 = session.Load<Account>("3-APSM152"); // has sub account var acct5 = session.Load<Account>("3-APSM326"); // has sub account workgroup.AddAccount(new WorkgroupAccount() { Account = acct1 }); workgroup.AddAccount(new WorkgroupAccount() { Account = acct3 }); workgroup.AddAccount(new WorkgroupAccount() { Account = acct5 }); workgroup.AddAccount(new WorkgroupAccount() { Account = acct2 }); workgroup.AddAccount(new WorkgroupAccount() { Account = acct4 }); var vendor1 = session.Load<Vendor>("0000247673"); var vendoraddr1 = session.QueryOver<VendorAddress>().Where(a => a.Vendor == vendor1).Take(1).SingleOrDefault(); var wv1 = new WorkgroupVendor() { VendorId = vendor1.Id, VendorAddressTypeCode = vendoraddr1.TypeCode, Name = vendor1.Name, Line1 = vendoraddr1.Line1, City = vendoraddr1.City, State = vendoraddr1.State, Zip = vendoraddr1.Zip, CountryCode = vendoraddr1.CountryCode }; workgroup.AddVendor(wv1); var vendor2 = session.Load<Vendor>("0000008573"); var vendoraddr2 = session.QueryOver<VendorAddress>().Where(a => a.Vendor == vendor2).Take(1).SingleOrDefault(); var wv2 = new WorkgroupVendor(){VendorId = vendor2.Id, VendorAddressTypeCode = vendoraddr2.TypeCode, Name = vendor2.Name, Line1 = vendoraddr2.Line1, City = vendoraddr2.City, State = vendoraddr2.State, Zip = vendoraddr2.Zip, CountryCode = vendoraddr2.CountryCode}; workgroup.AddVendor(wv2); var vendor3 = session.Load<Vendor>("0000006849"); var vendoraddr3 = session.QueryOver<VendorAddress>().Where(a => a.Vendor == vendor2).Take(1).SingleOrDefault(); var wv3 = new WorkgroupVendor(){VendorId = vendor3.Id, VendorAddressTypeCode = vendoraddr3.TypeCode, Name = vendor3.Name, Line1 = vendoraddr3.Line1, City = vendoraddr3.City, State = vendoraddr3.State, Zip = vendoraddr3.Zip, CountryCode = vendoraddr3.CountryCode}; workgroup.AddVendor(wv3); var wv4 = new WorkgroupVendor() { Name = "Legitimate Paper Mill", Line1 = "1 Fake Street.", City = "Davis", State = "CA", Zip = "95616", CountryCode = "US" }; workgroup.AddVendor(wv4); var wv5 = new WorkgroupVendor() { Name = "Office Supplies", Line1 = "2 Fake Street.", City = "Davis", State = "CA", Zip = "95616", CountryCode = "US" }; workgroup.AddVendor(wv5); var wv6 = new WorkgroupVendor() { Name = "Loads O Lab Equipment", Line1 = "5 Fake Street.", City = "Davis", State = "CA", Zip = "95616", CountryCode = "US" }; workgroup.AddVendor(wv6); var addr1 = new WorkgroupAddress() { Name = "128 Fake Hall", Address = "Fake Hall Road", City = "Davis", State = "CA", Zip = "95616" }; workgroup.AddAddress(addr1); var addr2 = new WorkgroupAddress() { Name = "10 Fake Hall", Address = "Fake Hall Road", City = "Davis", State = "CA", Zip = "95616"}; workgroup.AddAddress(addr2); var addr3 = new WorkgroupAddress() { Name = "526 Fake Hall", Address = "Fake Hall Road", City = "Davis", State = "CA", Zip = "95616" }; workgroup.AddAddress(addr3); //setup workgroup permissions var permission1 = new WorkgroupPermission() { User = user1, Workgroup = workgroup, Role = session.Load<Role>("RQ") }; var permission2 = new WorkgroupPermission() { User = user2, Workgroup = workgroup, Role = session.Load<Role>("AP") }; var permission3 = new WorkgroupPermission() { User = user3, Workgroup = workgroup, Role = session.Load<Role>("AM") }; var permission4 = new WorkgroupPermission() { User = user4, Workgroup = workgroup, Role = session.Load<Role>("PR") }; //var permission5 = new WorkgroupPermission() { User = user5, Workgroup = workgroup, Role = session.Load<Role>("CA") }; // conditional approver var permission6 = new WorkgroupPermission() { User = user6, Workgroup = workgroup, Role = session.Load<Role>("RQ") }; var permission7 = new WorkgroupPermission() { User = user7, Workgroup = workgroup, Role = session.Load<Role>("AP") }; var permission8 = new WorkgroupPermission() { User = user8, Workgroup = workgroup, Role = session.Load<Role>("AM") }; var permission9 = new WorkgroupPermission() { User = user9, Workgroup = workgroup, Role = session.Load<Role>("PR") }; var permission10 = new WorkgroupPermission() { User = user10, Workgroup = workgroup, Role = session.Load<Role>("RQ") }; workgroup.AddPermission(permission1); workgroup.AddPermission(permission2); workgroup.AddPermission(permission3); workgroup.AddPermission(permission4); //workgroup.AddPermission(permission5); workgroup.AddPermission(permission6); workgroup.AddPermission(permission7); workgroup.AddPermission(permission8); workgroup.AddPermission(permission9); workgroup.AddPermission(permission10); // create some conditional approvals var ca1 = new ConditionalApproval() {Workgroup = workgroup, PrimaryApprover = user5, Question = "Is this an IT purchaser?"}; // save all the objects session.Save(admin); session.Save(user1); session.Save(user2); session.Save(user3); session.Save(user4); session.Save(user5); session.Save(user6); session.Save(user7); session.Save(user8); session.Save(user9); session.Save(user10); session.Save(workgroup); session.Save(ca1); // generate a minimum of 10 for our target user for (var i = 0; i < 5; i++) { var order = GenderateRandomOrder(workgroup, session.Load<OrderStatusCode>("AP"), session, permission1); session.Save(order); } for (var i = 0; i < 5; i++) { var order = GenderateRandomOrder(workgroup, session.Load<OrderStatusCode>("AM"), session, permission1); session.Save(order); } for (var i = 0; i < 3; i++) { var order = GenderateRandomOrder(workgroup, session.Load<OrderStatusCode>("PR"), session, permission1); session.Save(order); } for (var i = 0; i < 2; i++) { var order = GenderateRandomOrder(workgroup, session.Load<OrderStatusCode>("CN"), session, permission1, excludeUser:permission1); session.Save(order); } // now generate another random 50 orders for (var i = 0; i < 50; i++) { var status = session.QueryOver<OrderStatusCode>().Skip(_random.Next()%4).Take(1).SingleOrDefault(); var order = GenderateRandomOrder(workgroup, status, session, excludeUser:permission1); session.Save(order); } }
/* * Dev Data */ private static void InsertData(ISession session) { //Now insert new data var scott = new User("postit") { FirstName = "Scott", LastName = "Kirkland", Email = "*****@*****.**", IsActive = true }; var approverUser = new User("approver") { FirstName = "Approver", LastName = "Approver", Email = "*****@*****.**", IsActive = true }; var acctMgrUser = new User("acctmgr") { FirstName = "Account", LastName = "Manager", Email = "*****@*****.**", IsActive = true }; var alan = new User("anlai") { FirstName = "Alan", LastName = "Lai", Email = "*****@*****.**", IsActive = true }; var ken = new User("taylorkj") { FirstName = "Ken", LastName = "Taylor", Email = "*****@*****.**", IsActive = true }; var chris = new User("cthielen") { FirstName = "Christopher", LastName = "Thielen", Email = "*****@*****.**", IsActive = true }; var scottd = new User("sadyer") { FirstName = "Scott", LastName = "Dyer", Email = "*****@*****.**", IsActive = true }; var jscub = new User("jscub") { FirstName = "James", LastName = "Cubbage", Email = "*****@*****.**", IsActive = true }; var jsylvest = new User("jsylvest") { FirstName = "Jason", LastName = "Sylvestre", Email = "*****@*****.**", IsActive = true }; var admin = session.Load<Role>("AD"); var deptAdmin = session.Load<Role>("DA"); var user = session.Load<Role>("RQ"); var approver = session.Load<Role>("AP"); var acctMgr = session.Load<Role>("AM"); var purchaser = session.Load<Role>("PR"); scott.Organizations.Add(session.Load<Organization>("AANS")); scott.Organizations.Add(session.Load<Organization>("AAES")); ken.Organizations.Add(session.Load<Organization>("AANS")); ken.Organizations.Add(session.Load<Organization>("ABAE")); scottd.Organizations.Add(session.Load<Organization>("AANS")); scottd.Organizations.Add(session.Load<Organization>("AAES")); scottd.Organizations.Add(session.Load<Organization>("AFST")); chris.Organizations.Add(session.Load<Organization>("AANS")); chris.Organizations.Add(session.Load<Organization>("AAES")); chris.Organizations.Add(session.Load<Organization>("AFST")); jscub.Organizations.Add(session.Load<Organization>("AFST")); jscub.Organizations.Add(session.Load<Organization>("AAES")); jsylvest.Organizations.Add(session.Load<Organization>("AFST")); jsylvest.Organizations.Add(session.Load<Organization>("AAES")); alan.Organizations.Add(session.Load<Organization>("AANS")); alan.Organizations.Add(session.Load<Organization>("AAES")); var testWorkgroup = new Workgroup() { Name = "Test Workgroup", IsActive = true, }; var workGroupAccount = new WorkgroupAccount() { }; workGroupAccount.Account = session.Load<Account>("3-6851000"); testWorkgroup.AddAccount(workGroupAccount); var workgroupAccountWithUsers = new WorkgroupAccount { Account = session.Load<Account>("3-APSO013"), Approver = approverUser, AccountManager = acctMgrUser }; testWorkgroup.AddAccount(workgroupAccountWithUsers); testWorkgroup.PrimaryOrganization = session.Load<Organization>("AAES"); testWorkgroup.Organizations.Add(session.Load<Organization>("AAES")); testWorkgroup.Organizations.Add(session.Load<Organization>("APLS")); // Add a vendor to the test workgroup var testWorkgroupVendor = new WorkgroupVendor { Name = "Office Max Corp.", City = "Sacramento", CountryCode = "US", Line1 = "3 1/2 External Drive",// (get it?) State = "CA", Zip = "95616" }; var testWorkgroupVendor2 = new WorkgroupVendor { Name = "Manually Added Vendor Corp.", City = "Sacramento", CountryCode = "US", Line1 = "5 1/4 External Drive",// (get it?) State = "CA", Zip = "95816" }; testWorkgroup.AddVendor(testWorkgroupVendor); testWorkgroup.AddVendor(testWorkgroupVendor2); var testWorkgroupAddress = new WorkgroupAddress() { Name = "The Office", Address = "One Shields Ave", Building = "Mrak", City = "Davis", State = "CA", Zip = "95616", IsActive = true }; testWorkgroup.AddAddress(testWorkgroupAddress); var workgroupPerm = new WorkgroupPermission() { User = scott, Role = deptAdmin, Workgroup = testWorkgroup }; var workgroupPerm2 = new WorkgroupPermission() { User = jsylvest, Role = deptAdmin, Workgroup = testWorkgroup }; var workgroupPerm3 = new WorkgroupPermission() { User = jsylvest, Role = user, Workgroup = testWorkgroup }; var workgroupPerm4 = new WorkgroupPermission() { User = jscub, Role = deptAdmin, Workgroup = testWorkgroup }; var workgroupPerm5 = new WorkgroupPermission() { User = alan, Role = deptAdmin, Workgroup = testWorkgroup }; var workgroupPerm6 = new WorkgroupPermission() { User = chris, Role = acctMgr, Workgroup = testWorkgroup }; var workgroupPerm7 = new WorkgroupPermission() { User = scott, Role = approver, Workgroup = testWorkgroup }; var workgroupPerm8 = new WorkgroupPermission() { User = alan, Role = approver, Workgroup = testWorkgroup }; var shippingType = session.Load<ShippingType>("ST"); var orderType = session.Load<Role>("OR"); var autoApproval = new AutoApproval //Approve anything scott sends to alan under $1000 for the next 2 years { TargetUser = scott, User = alan, IsActive = true, Expiration = DateTime.Now.AddYears(2), LessThan = true, MaxAmount = 1000.00M }; var autoApprovalAccount = new AutoApproval //Approve anything from account 3-APSO013 associated with approverUser under $1000 for 2 years { Account = session.Load<Account>("3-APSO013"), User = approverUser, IsActive = true, Expiration = DateTime.Now.AddYears(2), LessThan = true, MaxAmount = 1000.00M }; session.Save(testWorkgroup); session.Save(scott); session.Save(alan); session.Save(ken); session.Save(jscub); session.Save(chris); session.Save(scottd); session.Save(jsylvest); session.Save(approverUser); session.Save(acctMgrUser); session.Save(workgroupPerm); session.Save(workgroupPerm2); session.Save(workgroupPerm3); session.Save(workgroupPerm4); session.Save(workgroupPerm5); session.Save(workgroupPerm6); session.Save(workgroupPerm7); session.Save(workgroupPerm8); session.Save(autoApproval); session.Save(autoApprovalAccount); Roles.AddUsersToRole(new[] { "postit", "anlai", "cthielen" }, "AD"); Roles.AddUserToRole("anlai", "RQ"); Roles.AddUserToRole("anlai", "DA"); Roles.AddUserToRole("anlai", "AP"); Roles.AddUserToRole("taylorkj", "DA"); Roles.AddUserToRole("postit", "DA"); Roles.AddUserToRole("jscub", "DA"); Roles.AddUserToRole("jsylvest", "DA"); session.Flush(); //Flush out the changes }
/// <summary> /// Generate Random orders /// </summary> /// <param name="users">List of users to select from</param> /// <param name="vendors">List of vendors to select from</param> /// <param name="statusCode">Status code to set the order approved through</param> /// <returns></returns> private static Order GenderateRandomOrder(Workgroup workgroup, OrderStatusCode statusCode, ISession session, WorkgroupPermission user = null, WorkgroupPermission excludeUser = null ) { var randomizedPerms = workgroup.Permissions.Select(a => new {Permission = a, Key = Guid.NewGuid()}); var requester = user ?? (excludeUser == null ? randomizedPerms.Where(a=>a.Permission.Role.Id == "RQ").OrderBy(a => a.Key).Select(a => a.Permission).FirstOrDefault() : randomizedPerms.Where(a=>a.Permission.Role.Id == "RQ" && a.Permission != excludeUser).OrderBy(a => a.Key).Select(a => a.Permission).FirstOrDefault()); var approver = randomizedPerms.Where(a => a.Permission.Role.Id == "AP" && a.Permission.User.Id !="zoidberg").OrderBy(a => a.Key).Select(a => a.Permission).FirstOrDefault(); var conditionalApprover = session.Load<User>("zoidberg"); //workgroup.Permissions.Where(a => a.User.Id == "zoidberg").FirstOrDefault(); var accountmgr = randomizedPerms.Where(a => a.Permission.Role.Id == "AM").OrderBy(a => a.Key).Select(a => a.Permission).FirstOrDefault(); var purchaser = randomizedPerms.Where(a => a.Permission.Role.Id == "PR").OrderBy(a => a.Key).Select(a => a.Permission).FirstOrDefault(); var order = new Order() { Justification = _justifications.Skip(_random.Next() % 5).Take(1).FirstOrDefault(), OrderType = session.Load<OrderType>("OR"), Workgroup = workgroup, Organization = workgroup.PrimaryOrganization, Vendor = workgroup.Vendors.Skip(_random.Next() % workgroup.Vendors.Count).Take(1).FirstOrDefault(), Address = workgroup.Addresses.Skip(_random.Next() % workgroup.Addresses.Count).Take(1).FirstOrDefault(), ShippingType = session.QueryOver<ShippingType>().Skip(_random.Next() % 3).Take(1).SingleOrDefault(), DeliverTo = "Mr. Smith", DateNeeded = DateTime.Now.AddDays(_random.Next() % 30), AllowBackorder = _random.Next() % 2 == 1, EstimatedTax = 8.89m, CreatedBy = requester.User, StatusCode = statusCode }; order.GenerateRequestNumber(); // add the tracking order.AddApproval(new Approval() { StatusCode = session.Load<OrderStatusCode>("RQ"), Completed = true, User = requester.User }); order.AddApproval(new Approval() { StatusCode = session.Load<OrderStatusCode>("AP"), Completed = statusCode.Level > 2 , User = approver.User }); order.AddApproval(new Approval() { StatusCode = session.Load<OrderStatusCode>("AM"), Completed = statusCode.Level > 3 , User = accountmgr.User }); order.AddApproval(new Approval() { StatusCode = session.Load<OrderStatusCode>("PR"), Completed = statusCode.Level > 4 , User = purchaser.User }); // add the approvals var daysBack = ((-1)*(_random.Next()%10)) - 10; order.AddTracking(new OrderTracking() { User = requester.User, DateCreated = DateTime.Now.AddDays(daysBack), Description = "Order submitted by " + requester.User.FullName, StatusCode = session.Load<OrderStatusCode>("RQ") }); if (statusCode.Level > 2) { order.AddTracking(new OrderTracking() { User = approver.User, DateCreated = DateTime.Now.AddDays(daysBack + 1), Description = "Order reviewed by " + approver.User.FullName, StatusCode = session.Load<OrderStatusCode>("AP") }); } if (statusCode.Level > 3) { order.AddTracking(new OrderTracking() { User = accountmgr.User, DateCreated = DateTime.Now.AddDays(daysBack + 3), Description = "Order reviewed by " + accountmgr.User.FullName, StatusCode = session.Load<OrderStatusCode>("AM") }); } if (statusCode.Level > 4) { order.AddTracking(new OrderTracking() { User = purchaser.User, DateCreated = DateTime.Now.AddDays(daysBack + (_random.Next() % 4)+3), Description = "Order reviewed by " + purchaser.User.FullName, StatusCode = session.Load<OrderStatusCode>("PR") }); order.AddTracking(new OrderTracking() { User = purchaser.User, DateCreated = DateTime.Now.AddDays(daysBack + (_random.Next() % 4)+8), Description = "Order marked complete by " + purchaser.User.FullName, StatusCode = session.Load<OrderStatusCode>("CN") }); } // add the conditional stuff if we feel like it if (_random.Next() % 2 == 1) { order.AddApproval(new Approval() { StatusCode = session.Load<OrderStatusCode>("CA"), Completed = statusCode.Level > 2 , User = conditionalApprover }); if (statusCode.Level > 2) { order.AddTracking(new OrderTracking() { User = conditionalApprover, DateCreated = DateTime.Now.AddDays(daysBack + 2), Description = "Order reviewed by " + conditionalApprover.FullName, StatusCode = session.Load<OrderStatusCode>("AP") }); } } // add the line items var numLineItems = (_random.Next()%5) + 1; // minimum of 1 line item for (var i = 0; i < numLineItems; i++) { var item = _items.Skip(_random.Next()%_items.Count()).Take(1).FirstOrDefault(); order.AddLineItem(new LineItem() { Quantity = _random.Next() % 10, UnitPrice = item.Value + (item.Value * ((_random.Next() % 10)+1 / 10)), Unit = "each", Description = item.Key }); } // account information var splitType = _random.Next()%2; if (splitType == 1) { var numSplits = _random.Next()%2; var skip = _random.Next()%18; var accounts = session.QueryOver<Account>().Skip(skip+numSplits>=18 ? 18-numSplits : skip).Take(numSplits); foreach (var act in accounts.List()) { order.AddSplit(new Split(){Account = act.Id, Amount = order.Total()/numSplits}); } } // set shipping order.ShippingAmount = order.Total()*.1m; order.TotalFromDb = order.Total(); return order; }
//TODO: Move this into own file. //Load all existing matches into this structure with action = delete, then go through all found ones and if exists, change action to nothing. if not exists create with action of add. public WorkgroupPermissionActions(WorkgroupPermission workgroupPermission, string action = Actions.Nothing) { WorkgroupPermission = workgroupPermission; Action = action; }