diff --git a/devdocs/todo.txt b/devdocs/todo.txt index 1ce37939..31e787ee 100644 --- a/devdocs/todo.txt +++ b/devdocs/todo.txt @@ -19,9 +19,13 @@ CODING WORK +++++++++++ Overall plan for now: anything standing in the way of making the initial client shell UI needs to be done first, everything else can wait + - v7importusers + - Do a First test run of importing from v7 just to ensure it's fundamentally working + - Then continue on to flesh out the User import second pass stuff + - Then test - Event log make sure can set the date and time to prior values for importing - - v7importusers + - User route and controller and biz object - Check biz rules in v7 for anything that might be missed in RAVEN biz rules - v7import once have users imported then proper attribution in eventlog of creator,modifier, created,modified diff --git a/server/AyaNova/Startup.cs b/server/AyaNova/Startup.cs index 63eff61f..5e6525ce 100644 --- a/server/AyaNova/Startup.cs +++ b/server/AyaNova/Startup.cs @@ -401,7 +401,7 @@ namespace AyaNova if (TESTING_REFRESH_DB) { AyaNova.Core.License.Fetch(apiServerState, dbContext, _log); - Util.Seeder.SeedDatabase(Util.Seeder.SeedLevel.LargeCorporateMultiRegionalTrialDataSet); + Util.Seeder.SeedDatabase(Util.Seeder.SeedLevel.SmallOneManShopTrialDataSet); } //TESTING #endif diff --git a/server/AyaNova/biz/PrimeData.cs b/server/AyaNova/biz/PrimeData.cs index 147b00f4..19c200cf 100644 --- a/server/AyaNova/biz/PrimeData.cs +++ b/server/AyaNova/biz/PrimeData.cs @@ -35,6 +35,7 @@ namespace AyaNova.Biz u.Roles = AuthorizationRoles.BizAdminFull | AuthorizationRoles.OpsAdminFull | AuthorizationRoles.DispatchFull | AuthorizationRoles.InventoryFull; u.OwnerId = 1; u.LocaleId=ServerBootConfig.AYANOVA_DEFAULT_LANGUAGE_ID;//Ensure primeLocales is called first + u.UserType=UserType.Administrator; ct.User.Add(u); ct.SaveChanges(); } diff --git a/server/AyaNova/models/User.cs b/server/AyaNova/models/User.cs index b6fdad83..280081c6 100644 --- a/server/AyaNova/models/User.cs +++ b/server/AyaNova/models/User.cs @@ -13,7 +13,7 @@ namespace AyaNova.Models public long OwnerId { get; set; } [Required] public bool Active { get; set; } - [Required] + [Required, MaxLength(255)] public string Name { get; set; } [Required] public string Login { get; set; } @@ -30,6 +30,7 @@ namespace AyaNova.Models [Required] public UserType UserType { get; set; } + [MaxLength(255)] public string EmployeeNumber { get; set; } public string Notes { get; set; } public long? ClientId { get; set; } diff --git a/server/AyaNova/util/AySchema.cs b/server/AyaNova/util/AySchema.cs index fb7e17b3..f4c4de8a 100644 --- a/server/AyaNova/util/AySchema.cs +++ b/server/AyaNova/util/AySchema.cs @@ -22,7 +22,7 @@ namespace AyaNova.Util //!!!!WARNING: BE SURE TO UPDATE THE DbUtil::PrepareDatabaseForSeeding WHEN NEW TABLES ADDED!!!! private const int DESIRED_SCHEMA_LEVEL = 9; - internal const long EXPECTED_COLUMN_COUNT = 70; + internal const long EXPECTED_COLUMN_COUNT = 77; internal const long EXPECTED_INDEX_COUNT = 15; //!!!!WARNING: BE SURE TO UPDATE THE DbUtil::PrepareDatabaseForSeeding WHEN NEW TABLES ADDED!!!! @@ -141,7 +141,7 @@ namespace AyaNova.Util //Add user table exec("CREATE TABLE auser (id BIGSERIAL PRIMARY KEY, ownerid bigint not null, active bool not null, name varchar(255) not null, " + "login text not null, password text not null, salt text not null, roles integer not null, localeid bigint not null REFERENCES alocale (id), " + - "dlkey text, dlkeyexpire timestamp)"); + "dlkey text, dlkeyexpire timestamp, usertype integer not null, employeenumber varchar(255), notes text, clientid bigint, headofficeid bigint, subvendorid bigint)"); //Prime the db with the default MANAGER account AyaNova.Biz.PrimeData.PrimeManagerAccount(ct); diff --git a/server/AyaNova/util/Seeder.cs b/server/AyaNova/util/Seeder.cs index 2c7a3295..a6df40ba 100644 --- a/server/AyaNova/util/Seeder.cs +++ b/server/AyaNova/util/Seeder.cs @@ -70,10 +70,10 @@ namespace AyaNova.Util //This is for a busy but one man shop with a single office person handling stuff back at the shop case SeedLevel.SmallOneManShopTrialDataSet: //Generate owner and lead tech - GenSeedUser(1, AuthorizationRoles.BizAdminFull | AuthorizationRoles.DispatchFull | AuthorizationRoles.InventoryFull | AuthorizationRoles.OpsAdminFull); + GenSeedUser(1, AuthorizationRoles.BizAdminFull | AuthorizationRoles.DispatchFull | AuthorizationRoles.InventoryFull | AuthorizationRoles.OpsAdminFull, UserType.Schedulable); //Generate one office person / secretary - GenSeedUser(1, AuthorizationRoles.DispatchFull | AuthorizationRoles.InventoryFull | AuthorizationRoles.AccountingFull); + GenSeedUser(1, AuthorizationRoles.DispatchFull | AuthorizationRoles.InventoryFull | AuthorizationRoles.AccountingFull, UserType.NonSchedulable); //200 widgets GenSeedWidget(200); @@ -84,37 +84,37 @@ namespace AyaNova.Util case SeedLevel.MediumLocalServiceCompanyTrialDataSet: //One IT administrator, can change ops but nothing else - GenSeedUser(1, AuthorizationRoles.OpsAdminFull); + GenSeedUser(1, AuthorizationRoles.OpsAdminFull, UserType.NonSchedulable); //One business administrator, can view ops issues - GenSeedUser(1, AuthorizationRoles.BizAdminFull | AuthorizationRoles.OpsAdminLimited); + GenSeedUser(1, AuthorizationRoles.BizAdminFull | AuthorizationRoles.OpsAdminLimited, UserType.NonSchedulable); //One owner who doesn't control anything but views stuff - GenSeedUser(1, AuthorizationRoles.DispatchLimited | AuthorizationRoles.InventoryLimited | AuthorizationRoles.OpsAdminLimited); + GenSeedUser(1, AuthorizationRoles.DispatchLimited | AuthorizationRoles.InventoryLimited | AuthorizationRoles.OpsAdminLimited, UserType.NonSchedulable); //20 techs - GenSeedUser(20, AuthorizationRoles.TechFull | AuthorizationRoles.DispatchLimited); + GenSeedUser(20, AuthorizationRoles.TechFull | AuthorizationRoles.DispatchLimited, UserType.Schedulable); //2 subcontractors - GenSeedUser(2, AuthorizationRoles.SubContractorFull); + GenSeedUser(2, AuthorizationRoles.SubContractorFull, UserType.Subcontractor); //3 sales / generic office people people - GenSeedUser(3, AuthorizationRoles.DispatchLimited | AuthorizationRoles.InventoryLimited); + GenSeedUser(3, AuthorizationRoles.DispatchLimited | AuthorizationRoles.InventoryLimited, UserType.NonSchedulable); //1 dispatch manager - GenSeedUser(1, AuthorizationRoles.DispatchFull | AuthorizationRoles.InventoryLimited); + GenSeedUser(1, AuthorizationRoles.DispatchFull | AuthorizationRoles.InventoryLimited, UserType.NonSchedulable); //1 Inventory manager - GenSeedUser(1, AuthorizationRoles.InventoryFull | AuthorizationRoles.DispatchLimited); + GenSeedUser(1, AuthorizationRoles.InventoryFull | AuthorizationRoles.DispatchLimited, UserType.NonSchedulable); //1 accountant / bookkeeper - GenSeedUser(1, AuthorizationRoles.AccountingFull | AuthorizationRoles.BizAdminLimited); + GenSeedUser(1, AuthorizationRoles.AccountingFull | AuthorizationRoles.BizAdminLimited, UserType.NonSchedulable); //10 full on client users - GenSeedUser(10, AuthorizationRoles.ClientLimited); + GenSeedUser(10, AuthorizationRoles.ClientLimited, UserType.Client); //10 limited client users - GenSeedUser(10, AuthorizationRoles.ClientLimited); + GenSeedUser(10, AuthorizationRoles.ClientLimited, UserType.Client); //2000 widgets GenSeedWidget(2000); @@ -124,49 +124,49 @@ namespace AyaNova.Util //Each location has a full staff and corporate head office has an overarching staff member in charge of each location case SeedLevel.LargeCorporateMultiRegionalTrialDataSet: //IT administrator, can change ops but nothing else - GenSeedUser(2, AuthorizationRoles.OpsAdminFull); + GenSeedUser(2, AuthorizationRoles.OpsAdminFull, UserType.NonSchedulable); //business administrator, can view ops issues - GenSeedUser(2, AuthorizationRoles.BizAdminFull | AuthorizationRoles.OpsAdminLimited); + GenSeedUser(2, AuthorizationRoles.BizAdminFull | AuthorizationRoles.OpsAdminLimited, UserType.NonSchedulable); //owner / upper management who doesn't control anything but views stuff - GenSeedUser(5, AuthorizationRoles.DispatchLimited | AuthorizationRoles.InventoryLimited | AuthorizationRoles.OpsAdminLimited); + GenSeedUser(5, AuthorizationRoles.DispatchLimited | AuthorizationRoles.InventoryLimited | AuthorizationRoles.OpsAdminLimited, UserType.NonSchedulable); //techs - GenSeedUser(100, AuthorizationRoles.TechFull | AuthorizationRoles.DispatchLimited); + GenSeedUser(100, AuthorizationRoles.TechFull | AuthorizationRoles.DispatchLimited, UserType.Schedulable); //limited techs - GenSeedUser(50, AuthorizationRoles.TechLimited | AuthorizationRoles.DispatchLimited); + GenSeedUser(50, AuthorizationRoles.TechLimited | AuthorizationRoles.DispatchLimited, UserType.Schedulable); //20 subcontractors - GenSeedUser(20, AuthorizationRoles.SubContractorFull); + GenSeedUser(20, AuthorizationRoles.SubContractorFull, UserType.Subcontractor); //10 limited subcontractors - GenSeedUser(10, AuthorizationRoles.SubContractorLimited); + GenSeedUser(10, AuthorizationRoles.SubContractorLimited, UserType.Subcontractor); //30 sales / generic office people people - GenSeedUser(30, AuthorizationRoles.DispatchLimited | AuthorizationRoles.InventoryLimited); + GenSeedUser(30, AuthorizationRoles.DispatchLimited | AuthorizationRoles.InventoryLimited, UserType.NonSchedulable); //5 dispatch manager - GenSeedUser(5, AuthorizationRoles.DispatchFull | AuthorizationRoles.InventoryLimited); + GenSeedUser(5, AuthorizationRoles.DispatchFull | AuthorizationRoles.InventoryLimited, UserType.NonSchedulable); //5 Inventory manager - GenSeedUser(5, AuthorizationRoles.InventoryFull | AuthorizationRoles.DispatchLimited); + GenSeedUser(5, AuthorizationRoles.InventoryFull | AuthorizationRoles.DispatchLimited, UserType.NonSchedulable); //10 Inventory manager assistants - GenSeedUser(5, AuthorizationRoles.InventoryLimited); + GenSeedUser(5, AuthorizationRoles.InventoryLimited, UserType.NonSchedulable); //5 accountant / bookkeeper - GenSeedUser(5, AuthorizationRoles.AccountingFull | AuthorizationRoles.BizAdminLimited); + GenSeedUser(5, AuthorizationRoles.AccountingFull | AuthorizationRoles.BizAdminLimited, UserType.NonSchedulable); //100 full on client users - GenSeedUser(100, AuthorizationRoles.ClientFull); + GenSeedUser(100, AuthorizationRoles.ClientFull, UserType.Client); //100 limited client users - GenSeedUser(100, AuthorizationRoles.ClientLimited); - + GenSeedUser(100, AuthorizationRoles.ClientLimited, UserType.Client); + //20000 widgets - GenSeedWidget(20000); + GenSeedWidget(20000); break; } @@ -195,24 +195,24 @@ namespace AyaNova.Util //TEST USERS //one of each role type - GenSeedUser(1, AuthorizationRoles.BizAdminLimited, "BizAdminLimited", "BizAdminLimited"); - GenSeedUser(1, AuthorizationRoles.BizAdminFull, "BizAdminFull", "BizAdminFull"); - GenSeedUser(1, AuthorizationRoles.DispatchLimited, "DispatchLimited", "DispatchLimited"); - GenSeedUser(1, AuthorizationRoles.DispatchFull, "DispatchFull", "DispatchFull"); - GenSeedUser(1, AuthorizationRoles.InventoryLimited, "InventoryLimited", "InventoryLimited"); - GenSeedUser(1, AuthorizationRoles.InventoryFull, "InventoryFull", "InventoryFull"); - GenSeedUser(1, AuthorizationRoles.AccountingFull, "Accounting", "Accounting"); - GenSeedUser(1, AuthorizationRoles.TechLimited, "TechLimited", "TechLimited"); - GenSeedUser(1, AuthorizationRoles.TechFull, "TechFull", "TechFull"); - GenSeedUser(1, AuthorizationRoles.SubContractorLimited, "SubContractorLimited", "SubContractorLimited"); - GenSeedUser(1, AuthorizationRoles.SubContractorFull, "SubContractorFull", "SubContractorFull"); - GenSeedUser(1, AuthorizationRoles.ClientLimited, "ClientLimited", "ClientLimited"); - GenSeedUser(1, AuthorizationRoles.ClientFull, "ClientFull", "ClientFull"); - GenSeedUser(1, AuthorizationRoles.OpsAdminLimited, "OpsAdminLimited", "OpsAdminLimited"); - GenSeedUser(1, AuthorizationRoles.OpsAdminFull, "OpsAdminFull", "OpsAdminFull"); + GenSeedUser(1, AuthorizationRoles.BizAdminLimited, UserType.NonSchedulable, "BizAdminLimited", "BizAdminLimited"); + GenSeedUser(1, AuthorizationRoles.BizAdminFull, UserType.NonSchedulable, "BizAdminFull", "BizAdminFull"); + GenSeedUser(1, AuthorizationRoles.DispatchLimited, UserType.NonSchedulable, "DispatchLimited", "DispatchLimited"); + GenSeedUser(1, AuthorizationRoles.DispatchFull, UserType.NonSchedulable, "DispatchFull", "DispatchFull"); + GenSeedUser(1, AuthorizationRoles.InventoryLimited, UserType.NonSchedulable, "InventoryLimited", "InventoryLimited"); + GenSeedUser(1, AuthorizationRoles.InventoryFull, UserType.NonSchedulable, "InventoryFull", "InventoryFull"); + GenSeedUser(1, AuthorizationRoles.AccountingFull, UserType.NonSchedulable, "Accounting", "Accounting"); + GenSeedUser(1, AuthorizationRoles.TechLimited, UserType.Schedulable, "TechLimited", "TechLimited"); + GenSeedUser(1, AuthorizationRoles.TechFull, UserType.Schedulable, "TechFull", "TechFull"); + GenSeedUser(1, AuthorizationRoles.SubContractorLimited, UserType.Subcontractor, "SubContractorLimited", "SubContractorLimited"); + GenSeedUser(1, AuthorizationRoles.SubContractorFull, UserType.Subcontractor, "SubContractorFull", "SubContractorFull"); + GenSeedUser(1, AuthorizationRoles.ClientLimited, UserType.Client, "ClientLimited", "ClientLimited"); + GenSeedUser(1, AuthorizationRoles.ClientFull, UserType.Client, "ClientFull", "ClientFull"); + GenSeedUser(1, AuthorizationRoles.OpsAdminLimited, UserType.NonSchedulable, "OpsAdminLimited", "OpsAdminLimited"); + GenSeedUser(1, AuthorizationRoles.OpsAdminFull, UserType.NonSchedulable, "OpsAdminFull", "OpsAdminFull"); //PRIVACY TEST USER - this is used for a test to see if user info leaks into the logs - GenSeedUser(1, AuthorizationRoles.OpsAdminLimited, "TEST_PRIVACY_USER_ACCOUNT", "TEST_PRIVACY_USER_ACCOUNT"); + GenSeedUser(1, AuthorizationRoles.OpsAdminLimited, UserType.NonSchedulable, "TEST_PRIVACY_USER_ACCOUNT", "TEST_PRIVACY_USER_ACCOUNT"); } @@ -224,7 +224,7 @@ namespace AyaNova.Util ////////////////////////////////////////////////////// //Seed user - default login / pw is first name // - public static void GenSeedUser(int count, AuthorizationRoles roles, string login = null, string password = null) + public static void GenSeedUser(int count, AuthorizationRoles roles, UserType userType, string login = null, string password = null) { AyContext ct = ServiceProviderProvider.DBContext; @@ -247,12 +247,15 @@ namespace AyaNova.Util u.Password = Hasher.hash(u.Salt, u.Login); u.Roles = roles; u.LocaleId = ServerBootConfig.AYANOVA_DEFAULT_LANGUAGE_ID; + u.UserType = userType; + //TODO: if usertype is subcontractor or client or headoffice it needs to set a corresponding user's parent org record id to go with it + ct.User.Add(u); } //save to get id values ct.SaveChanges(); - //Now that we have the ID values bulk add the event log entries + //Now that we have the ID values bulk add the event log entries //To save a db call iterate the local collection in the context, but... //can't modify the context in the foreach, even if it's another collection entirely, so need to save the id's in a temporary list List ItemsAdded = new List();