public AccountController(IConfiguration configuration, SharePointFileManager sharePointFileManager, IHttpContextAccessor httpContextAccessor, BCeIDBusinessQuery bceid, ILoggerFactory loggerFactory, IDynamicsClient dynamicsClient) { Configuration = configuration; _bceid = bceid; _dynamicsClient = dynamicsClient; _httpContextAccessor = httpContextAccessor; _sharePointFileManager = sharePointFileManager; _logger = loggerFactory.CreateLogger(typeof(AccountController)); }
public OrganisationsController(IConfiguration configuration, IHttpContextAccessor httpContextAccessor, BCeIDBusinessQuery bceid, ILoggerFactory loggerFactory) { Configuration = configuration; _bceid = bceid; _httpContextAccessor = httpContextAccessor; //_sharePointFileManager = sharePointFileManager; _logger = loggerFactory.CreateLogger(typeof(OrganisationsController)); }
public AccountController(Interfaces.Microsoft.Dynamics.CRM.System context, IConfiguration configuration, IDistributedCache distributedCache, IHttpContextAccessor httpContextAccessor, BCeIDBusinessQuery bceid, ILoggerFactory loggerFactory, IDynamicsClient dynamicsClient) { Configuration = configuration; this._system = context; this._distributedCache = null; //distributedCache; this._httpContextAccessor = httpContextAccessor; this._bceid = bceid; this._dynamicsClient = dynamicsClient; _logger = loggerFactory.CreateLogger(typeof(AccountController)); }
public void Execute(IDynamicsClient _dynamicsClient, BCeIDBusinessQuery _bceidQuery) { // first find bad accounts string filter = "accountnumber eq '' or accountnumber eq null"; try { var badAccounts = _dynamicsClient.Accounts.Get().Value; Console.Out.WriteLine($"Found {badAccounts.Count} accounts missing the BN9 Account Number."); Console.Out.WriteLine($"Account ID - Account Name - Account Siteminder ID - BN9"); foreach (var badAccount in badAccounts) { if (string.IsNullOrEmpty(badAccount._primarycontactidValue)) { Console.Out.WriteLine($"{badAccount.Accountid} - {badAccount.Name} - {badAccount.AdoxioExternalid} - no primary contact."); } else { // get the primary contact external id. var contact = _dynamicsClient.GetContactById(badAccount._primarycontactidValue).GetAwaiter().GetResult(); if (contact == null || string.IsNullOrEmpty(contact.AdoxioExternalid)) { Console.Out.WriteLine($"{badAccount.Accountid} - {badAccount.Name} - {badAccount.AdoxioExternalid} - no primary contact user identifier."); } else { // get the BN9. string bn9 = ""; try { var result = _bceidQuery.ProcessBusinessQuery(contact.AdoxioExternalid).GetAwaiter().GetResult(); bn9 = result.businessNumber; Console.Out.WriteLine("** Found BN9"); Console.Out.WriteLine($"{badAccount.Accountid} - {badAccount.Name} - {badAccount.AdoxioExternalid} - {bn9} - {result.incorporationNumber}"); } catch (Exception e) { Console.Out.WriteLine("ERROR during get BCEID"); Console.Out.WriteLine(e.Message); } } } } } catch (Exception e) { Console.Out.WriteLine("Error getting bad accounts."); Console.Out.WriteLine(e.Message); } }
public AccountsController(IConfiguration configuration, IHttpContextAccessor httpContextAccessor, IOrgBookClient orgBookClient, BCeIDBusinessQuery bceid, ILoggerFactory loggerFactory, IDynamicsClient dynamicsClient) { _configuration = configuration; _bceid = bceid; _dynamicsClient = dynamicsClient; _orgBookclient = orgBookClient; _httpContextAccessor = httpContextAccessor; _logger = loggerFactory.CreateLogger(typeof(AccountsController)); }
// the one parameter is the BCeID guid for an individual. static void Main(string[] args) { bool isBackfill = false; bool isSingleQuery = false; string singleQuery = null; if (args.Length > 0) { string arg = args[0]; if (!string.IsNullOrEmpty(arg)) { if (arg.ToLower().Equals("backfill")) { isBackfill = true; Console.Out.WriteLine("Backfill enabled."); } else { isSingleQuery = true; singleQuery = arg; Console.Out.WriteLine("Single query enabled."); } } } // get the environment settings. string bceidServiceSvcid = Environment.GetEnvironmentVariable("BCEID_SERVICE_SVCID"); string bceidServiceUser = Environment.GetEnvironmentVariable("BCEID_SERVICE_USER"); string bceidServicePasswd = Environment.GetEnvironmentVariable("BCEID_SERVICE_PASSWD"); string bceidServiceUrl = Environment.GetEnvironmentVariable("BCEID_SERVICE_URL"); string dynamicsOdataUri = Environment.GetEnvironmentVariable("DYNAMICS_ODATA_URI"); string ssgUsername = Environment.GetEnvironmentVariable("SSG_USERNAME"); string ssgPassword = Environment.GetEnvironmentVariable("SSG_PASSWORD"); string dynamicsNativeOdataUri = Environment.GetEnvironmentVariable("DYNAMICS_NATIVE_ODATA_URI"); BCeIDBusinessQuery bCeIDBusinessQuery = new BCeIDBusinessQuery(bceidServiceSvcid, bceidServiceUser, bceidServicePasswd, bceidServiceUrl); var serviceClientCredentials = new BasicAuthenticationCredentials() { UserName = ssgUsername, Password = ssgPassword }; var _dynamicsClient = new DynamicsClient(new Uri(dynamicsOdataUri), serviceClientCredentials); if (isBackfill) { var contacts = _dynamicsClient.Contacts.Get().Value; foreach (MicrosoftDynamicsCRMcontact contact in contacts) { if (string.IsNullOrEmpty(contact.Emailaddress1)) { string externalId = contact.AdoxioExternalid; if (!string.IsNullOrEmpty(externalId)) { var caller = bCeIDBusinessQuery.ProcessBusinessQuery(externalId); caller.Wait(); Gov.Lclb.Cllb.Interfaces.BCeIDBusiness bceidBusiness = caller.Result; if (bceidBusiness != null) { MicrosoftDynamicsCRMcontact patchRecord = new MicrosoftDynamicsCRMcontact(); if (string.IsNullOrEmpty(contact.Firstname)) { patchRecord.Firstname = bceidBusiness.individualFirstname; } if (string.IsNullOrEmpty(contact.Lastname)) { patchRecord.Lastname = bceidBusiness.individualSurname; } if (string.IsNullOrEmpty(contact.Middlename)) { patchRecord.Middlename = bceidBusiness.individualMiddlename; } if (string.IsNullOrEmpty(contact.Emailaddress1)) { patchRecord.Emailaddress1 = bceidBusiness.contactEmail; } if (string.IsNullOrEmpty(contact.Telephone1)) { patchRecord.Telephone1 = bceidBusiness.contactPhone; } // update the contact. try { _dynamicsClient.Contacts.Update(contact.Contactid, patchRecord); Console.Out.WriteLine("Updated contact " + contact.Firstname + " " + contact.Lastname); } catch (OdataerrorException odee) { Console.Out.WriteLine("Error patching contact"); Console.Out.WriteLine("Request:"); Console.Out.WriteLine(odee.Request.Content); Console.Out.WriteLine("Response:"); Console.Out.WriteLine(odee.Response.Content); } } } } } IList <MicrosoftDynamicsCRMaccount> accounts = null; // now get a list of all the related accounts. try { accounts = _dynamicsClient.Accounts.Get().Value; } catch (OdataerrorException odee) { Console.Out.WriteLine("Error getting accounts"); Console.Out.WriteLine("Request:"); Console.Out.WriteLine(odee.Request.Content); Console.Out.WriteLine("Response:"); Console.Out.WriteLine(odee.Response.Content); } if (accounts != null) { foreach (var account in accounts) { // get the contact. string contactid = account._primarycontactidValue; // only process accounts with missing email address. if (!string.IsNullOrEmpty(contactid) && string.IsNullOrEmpty(account.Emailaddress1)) { var contact = _dynamicsClient.Contacts.GetByKey(contactid); string guid = contact.AdoxioExternalid; if (!string.IsNullOrEmpty(guid)) { var caller = bCeIDBusinessQuery.ProcessBusinessQuery(guid); caller.Wait(); Gov.Lclb.Cllb.Interfaces.BCeIDBusiness bceidBusiness = caller.Result; if (bceidBusiness != null) { MicrosoftDynamicsCRMaccount accountPatchRecord = new MicrosoftDynamicsCRMaccount(); if (string.IsNullOrEmpty(account.Emailaddress1)) { accountPatchRecord.Emailaddress1 = bceidBusiness.contactEmail; } if (string.IsNullOrEmpty(account.Telephone1)) { accountPatchRecord.Telephone1 = bceidBusiness.contactEmail; } if (string.IsNullOrEmpty(account.Address1City)) { accountPatchRecord.Address1City = bceidBusiness.addressCity; } if (string.IsNullOrEmpty(account.Address1Postalcode)) { accountPatchRecord.Address1Postalcode = bceidBusiness.addressPostal; } if (string.IsNullOrEmpty(account.Address1Line1)) { accountPatchRecord.Address1Line1 = bceidBusiness.addressLine1; } if (string.IsNullOrEmpty(account.Address1Line2)) { accountPatchRecord.Address1Line2 = bceidBusiness.addressLine2; } try { _dynamicsClient.Accounts.Update(account.Accountid, accountPatchRecord); Console.Out.WriteLine("Updated account " + account.Name); } catch (OdataerrorException odee) { Console.Out.WriteLine("Error patching account"); Console.Out.WriteLine("Request:"); Console.Out.WriteLine(odee.Request.Content); Console.Out.WriteLine("Response:"); Console.Out.WriteLine(odee.Response.Content); } } } } } } } else if (isSingleQuery) { Console.Out.WriteLine("\"BCEID GUID\",\"Given name\",\"Surname\",\"Email\",\"Phone\",\"Business Number\""); // query BCeID if (!string.IsNullOrEmpty(singleQuery)) { var caller = bCeIDBusinessQuery.ProcessBusinessQuery(singleQuery); caller.Wait(); var result = caller.Result; if (result != null) { Console.Out.WriteLine("\"" + singleQuery + "\",\"" + result.individualFirstname + "\",\"" + result.individualSurname + "\",\"" + result.contactEmail + "\",\"" + result.contactPhone + "\",\"" + result.businessNumber + "\""); } } } else // get all contacts. { // first parse the contacts file. List <string> stringList = new List <string>(); // read from file. /* * string jsonString = File.ReadAllText("filename"); * * var jsonData = JsonConvert.DeserializeObject<GetOKResponseModelModelModelModelModelModelModelModel>(jsonString); * var contacts = jsonData.Value; */ // Get contacts from dynamics. var contacts = _dynamicsClient.Contacts.Get().Value; foreach (var contact in contacts) { stringList.Add(contact.AdoxioExternalid); } Console.Out.WriteLine("\"BCEID GUID\",\"Given name\",\"Surname\",\"Email\",\"Phone\",\"Business Number\""); foreach (string guid in stringList) { // query BCeID if (!string.IsNullOrEmpty(guid)) { var caller = bCeIDBusinessQuery.ProcessBusinessQuery(guid); caller.Wait(); var result = caller.Result; if (result != null) { Console.Out.WriteLine("\"" + guid + "\",\"" + result.individualFirstname + "\",\"" + result.individualSurname + "\",\"" + result.contactEmail + "\",\"" + result.contactPhone + "\",\"" + result.businessNumber + "\""); } } } } }
// the one parameter is the BCeID guid for an individual. static void Main(string[] args) { bool isObfuscate = false; bool isClean = false; bool isApplicationClean = false; bool isImport = false; bool isMove = false; bool isDetectBadAccountData = false; bool isFixBadAccountData = false; bool isFixSharePointNaming = false; bool doRename = false; // start by getting secrets. var builder = new ConfigurationBuilder() .AddEnvironmentVariables() .AddUserSecrets <Program>(); var Configuration = builder.Build(); string basepath = Directory.GetParent(Directory.GetCurrentDirectory()).ToString(); basepath = Directory.GetParent(basepath).ToString(); basepath = Directory.GetParent(basepath).ToString(); basepath = Directory.GetParent(basepath).ToString(); basepath = Directory.GetParent(basepath).ToString(); basepath = Directory.GetParent(basepath).ToString(); basepath = Directory.GetParent(basepath).ToString(); basepath += "\\data"; string rawbase = basepath + "\\raw"; string exportbase = basepath + "\\export"; if (args.Length > 0) { string arg = args[0]; if (!string.IsNullOrEmpty(arg)) { if (arg.ToLower().Equals("obfuscate")) { isObfuscate = true; Console.Out.WriteLine("Data obfuscation enabled"); } else if (arg.ToLower().Equals("import")) { isImport = true; Console.Out.WriteLine("Data import enabled"); } else if (arg.ToLower().Equals("detect-bad-account-data")) { isDetectBadAccountData = true; Console.Out.WriteLine("detect-bad-account-data enabled"); } else if (arg.ToLower().Equals("fix-bad-account-data")) { isFixBadAccountData = true; Console.Out.WriteLine("fix-bad-account-data enabled"); } else if (arg.ToLower().Equals("fix-sharepoint-naming")) { isFixSharePointNaming = true; Console.Out.WriteLine("fix-sharepoint-naming enabled"); if (args.Length > 1) { string secondArg = args[1]; if (secondArg.ToLower().Equals("rename")) { Console.Out.WriteLine("rename enabled"); doRename = true; } else { Console.Out.WriteLine( "Dry run only - rename not enabled. Add parameter 'rename' to enable."); } } } else { Console.Out.WriteLine("USAGE - enter the obfuscate parameter to obfuscate data"); } } } if (isObfuscate) { var obfuscator = new Obfuscator( ContactMap, AccountMap, WorkerMap, AliasMap, InvoiceMap, LicenceMap, ApplicationMap, EstablishmentMap, LegalEntityMap, LocalgovindigenousnationMap ); string filename = $"{rawbase}\\accounts.json"; List <MicrosoftDynamicsCRMaccount> accounts = JsonConvert.DeserializeObject <List <MicrosoftDynamicsCRMaccount> >(File.ReadAllText(filename)); filename = $"{rawbase}\\contacts.json"; List <MicrosoftDynamicsCRMcontact> contacts = JsonConvert.DeserializeObject <List <MicrosoftDynamicsCRMcontact> >(File.ReadAllText(filename)); filename = $"{rawbase}\\adoxio_aliases.json"; List <MicrosoftDynamicsCRMadoxioAlias> adoxio_aliases = JsonConvert.DeserializeObject <List <MicrosoftDynamicsCRMadoxioAlias> >(File.ReadAllText(filename)); filename = $"{rawbase}\\adoxio_applications.json"; List <MicrosoftDynamicsCRMadoxioApplication> adoxio_applications = JsonConvert.DeserializeObject <List <MicrosoftDynamicsCRMadoxioApplication> >(File.ReadAllText(filename)); filename = $"{rawbase}\\adoxio_establishments.json"; List <MicrosoftDynamicsCRMadoxioEstablishment> adoxio_establishments = JsonConvert.DeserializeObject <List <MicrosoftDynamicsCRMadoxioEstablishment> >(File.ReadAllText(filename)); filename = $"{rawbase}\\adoxio_legalentities.json"; List <MicrosoftDynamicsCRMadoxioLegalentity> adoxio_legalEntities = JsonConvert.DeserializeObject <List <MicrosoftDynamicsCRMadoxioLegalentity> >(File.ReadAllText(filename)); filename = $"{rawbase}\\adoxio_licences.json"; List <MicrosoftDynamicsCRMadoxioLicences> adoxio_licences = JsonConvert.DeserializeObject <List <MicrosoftDynamicsCRMadoxioLicences> >(File.ReadAllText(filename)); filename = $"{rawbase}\\adoxio_workers.json"; List <MicrosoftDynamicsCRMadoxioWorker> adoxio_workers = JsonConvert.DeserializeObject <List <MicrosoftDynamicsCRMadoxioWorker> >(File.ReadAllText(filename)); filename = $"{rawbase}\\invoices.json"; List <MicrosoftDynamicsCRMinvoice> invoices = JsonConvert.DeserializeObject <List <MicrosoftDynamicsCRMinvoice> >(File.ReadAllText(filename)); // obfuscate the data. var o_accounts = obfuscator.ObfuscateAccounts(accounts); var o_contacts = obfuscator.ObfuscateContacts(contacts); var o_aliases = obfuscator.ObfuscateAliases(adoxio_aliases); var o_invoices = obfuscator.ObfuscateInvoices(invoices); var o_establishments = obfuscator.ObfuscateEstablishments(adoxio_establishments); var o_applications = obfuscator.ObfuscateApplications(adoxio_applications); var o_workers = obfuscator.ObfuscateWorkers(adoxio_workers); var o_licences = obfuscator.ObfuscateLicences(adoxio_licences); var o_legalentities = obfuscator.ObfuscateLegalEntities(adoxio_legalEntities); // now save the data filename = $"{exportbase}\\accounts.json"; File.WriteAllText(filename, JsonConvert.SerializeObject(o_accounts)); filename = $"{exportbase}\\contacts.json"; File.WriteAllText(filename, JsonConvert.SerializeObject(o_contacts)); filename = $"{exportbase}\\adoxio_aliases.json"; File.WriteAllText(filename, JsonConvert.SerializeObject(o_aliases)); filename = $"{exportbase}\\adoxio_applications.json"; File.WriteAllText(filename, JsonConvert.SerializeObject(o_applications)); filename = $"{exportbase}\\adoxio_establishments.json"; File.WriteAllText(filename, JsonConvert.SerializeObject(o_establishments)); filename = $"{exportbase}\\adoxio_legalentities.json"; File.WriteAllText(filename, JsonConvert.SerializeObject(o_legalentities)); filename = $"{exportbase}\\adoxio_licences.json"; File.WriteAllText(filename, JsonConvert.SerializeObject(o_licences)); filename = $"{exportbase}\\adoxio_workers.json"; File.WriteAllText(filename, JsonConvert.SerializeObject(o_workers)); filename = $"{exportbase}\\invoices.json"; File.WriteAllText(filename, JsonConvert.SerializeObject(o_invoices)); /* * // remove all BusinessContacts. * var businessContacts = _dynamicsClient.Businesscontacts.Get().Value; * * foreach (var businessContact in businessContacts) * { * try * { * _dynamicsClient.Businesscontacts.Delete(businessContact.BcgovBusinesscontactid); * Console.Out.WriteLine("Deleted BusinessContact " + businessContact.BcgovBusinesscontactid); * } * catch (HttpOperationException odee) * { * Console.Out.WriteLine("Error deleting business contact"); * Console.Out.WriteLine("Request:"); * Console.Out.WriteLine(odee.Request.Content); * Console.Out.WriteLine("Response:"); * Console.Out.WriteLine(odee.Response.Content); * } * } */ } if (isClean) { var conn = GetDynamicsConnection(Configuration); Cleaner cleaner = new Cleaner(); cleaner.Clean(conn); } if (isApplicationClean) { var conn = GetDynamicsConnection(Configuration); ApplicationCleaner cleaner = new ApplicationCleaner(); cleaner.Clean(conn); } if (isImport) { var importer = new Importer( ContactMap, AccountMap, WorkerMap, AliasMap, InvoiceMap, LicenceMap, ApplicationMap, EstablishmentMap, LegalEntityMap, LocalgovindigenousnationMap ); var conn = GetDynamicsConnection(Configuration); // read the exported data. string filename = $"{exportbase}\\accounts.json"; List <MicrosoftDynamicsCRMaccount> accounts = JsonConvert.DeserializeObject <List <MicrosoftDynamicsCRMaccount> >(File.ReadAllText(filename)); filename = $"{exportbase}\\contacts.json"; List <MicrosoftDynamicsCRMcontact> contacts = JsonConvert.DeserializeObject <List <MicrosoftDynamicsCRMcontact> >(File.ReadAllText(filename)); filename = $"{exportbase}\\adoxio_aliases.json"; List <MicrosoftDynamicsCRMadoxioAlias> aliases = JsonConvert.DeserializeObject <List <MicrosoftDynamicsCRMadoxioAlias> >(File.ReadAllText(filename)); filename = $"{exportbase}\\adoxio_applications.json"; List <MicrosoftDynamicsCRMadoxioApplication> applications = JsonConvert.DeserializeObject <List <MicrosoftDynamicsCRMadoxioApplication> >(File.ReadAllText(filename)); filename = $"{exportbase}\\adoxio_establishments.json"; List <MicrosoftDynamicsCRMadoxioEstablishment> establishments = JsonConvert.DeserializeObject <List <MicrosoftDynamicsCRMadoxioEstablishment> >(File.ReadAllText(filename)); filename = $"{exportbase}\\adoxio_legalentities.json"; List <MicrosoftDynamicsCRMadoxioLegalentity> legalEntities = JsonConvert.DeserializeObject <List <MicrosoftDynamicsCRMadoxioLegalentity> >(File.ReadAllText(filename)); filename = $"{exportbase}\\adoxio_licences.json"; List <MicrosoftDynamicsCRMadoxioLicences> licences = JsonConvert.DeserializeObject <List <MicrosoftDynamicsCRMadoxioLicences> >(File.ReadAllText(filename)); filename = $"{exportbase}\\adoxio_workers.json"; List <MicrosoftDynamicsCRMadoxioWorker> workers = JsonConvert.DeserializeObject <List <MicrosoftDynamicsCRMadoxioWorker> >(File.ReadAllText(filename)); filename = $"{exportbase}\\invoices.json"; List <MicrosoftDynamicsCRMinvoice> invoices = JsonConvert.DeserializeObject <List <MicrosoftDynamicsCRMinvoice> >(File.ReadAllText(filename)); filename = $"{exportbase}\\adoxio_localgovindigenousnations.json"; List <MicrosoftDynamicsCRMadoxioLocalgovindigenousnation> lgin = JsonConvert.DeserializeObject <List <MicrosoftDynamicsCRMadoxioLocalgovindigenousnation> >(File.ReadAllText(filename)); // the order of import is important. Console.Out.WriteLine("Importing Accounts"); importer.ImportAccounts(conn, accounts); Console.Out.WriteLine("Importing Contacts"); importer.ImportContacts(conn, contacts); Console.Out.WriteLine("Importing Workers"); importer.ImportWorkers(conn, workers); Console.Out.WriteLine("Importing Aliases"); importer.ImportAliases(conn, aliases); Console.Out.WriteLine("Importing LG IN data"); importer.ImportLocalGovIndigenousNations(conn, lgin); Console.Out.WriteLine("Importing Legal Entities"); importer.ImportLegalEntities(conn, legalEntities); Console.Out.WriteLine("Importing Establishments"); importer.ImportEstablishments(conn, establishments); Console.Out.WriteLine("Importing Invoices"); importer.ImportInvoices(conn, invoices); Console.Out.WriteLine("Importing Licences"); importer.ImportLicences(conn, licences); Console.Out.WriteLine("Importing Applications"); importer.ImportApplications(conn, applications); } if (isMove) { var conn = GetDynamicsConnection(Configuration); Mover mover = new Mover(); mover.Move(conn); } if (isDetectBadAccountData) { var conn = GetDynamicsConnection(Configuration); DetectBadAccountData detector = new DetectBadAccountData(); detector.Execute(conn); } if (isFixBadAccountData) { string bceidUrl = Configuration["BCEID_SERVICE_URL"]; string bceidSvcId = Configuration["BCEID_SERVICE_SVCID"]; string bceidUserid = Configuration["BCEID_SERVICE_USER"]; string bceidPasswd = Configuration["BCEID_SERVICE_PASSWD"]; var bCeIDBusinessQuery = new BCeIDBusinessQuery(bceidSvcId, bceidUserid, bceidPasswd, bceidUrl); var conn = GetDynamicsConnection(Configuration); FixBadAccountData fixer = new FixBadAccountData(); fixer.Execute(conn, bCeIDBusinessQuery); } if (isFixSharePointNaming) { FixSharePointNaming fix = new FixSharePointNaming(); fix.Execute(Configuration, doRename); } }