public async Task AdminController_ManualChanges_POST_Fix_Organisation_Names_Works_When_Run_In_Live_Mode_Async() { // Arrange var orgThatWillBeFixed = new OrganisationName { Name = "Org to fix ltd", Created = VirtualDateTime.Now, OrganisationId = 55 }; var orgThatWontBeSelectedToBeFixed = new OrganisationName { Name = "Org not to be fixed", Created = VirtualDateTime.Now, OrganisationId = 66 }; #region setting up database and controller User notAdminUser = UserHelper.GetDatabaseAdmin(); var adminController = UiTestHelper.GetController <AdminController>(notAdminUser.UserId, null, null); Mock <IDataRepository> configurableDataRepository = AutoFacExtensions.ResolveAsMock <IDataRepository>(); configurableDataRepository .Setup(x => x.Get <User>(It.IsAny <long>())) .Returns(notAdminUser); configurableDataRepository .Setup(x => x.GetAll <OrganisationName>()) .Returns(new[] { orgThatWillBeFixed, orgThatWontBeSelectedToBeFixed }.AsQueryable().BuildMock().Object); var manualChangesViewModel = new ManualChangesViewModel { Command = FixOrganisationNamesCommand }; #endregion /* live */ manualChangesViewModel.LastTestedCommand = manualChangesViewModel.Command; manualChangesViewModel.LastTestedInput = manualChangesViewModel.Parameters; // Act IActionResult manualChangesResult = await adminController.ManualChanges(manualChangesViewModel); // Assert Assert.NotNull(manualChangesResult, "Expected a Result"); var manualChangesViewResult = manualChangesResult as ViewResult; Assert.NotNull(manualChangesViewResult, "Expected ViewResult"); var actualManualChangesViewModel = manualChangesViewResult.Model as ManualChangesViewModel; Assert.NotNull(actualManualChangesViewModel, "Expected ManualChangesViewModel"); Assert.Multiple( () => { Assert.AreEqual("SUCCESSFULLY EXECUTED 'Fix organisation names': 1 items", actualManualChangesViewModel.SuccessMessage); Assert.AreEqual( "An email will be sent to '*****@*****.**' when the background task 'FixOrganisationsNamesAsync' has completed\r\n", actualManualChangesViewModel.Results); Assert.IsNull(actualManualChangesViewModel.LastTestedCommand); Assert.IsNull(actualManualChangesViewModel.LastTestedInput); Assert.False(actualManualChangesViewModel.Tested, "Must be tested=false as this case is running in LIVE mode"); Assert.IsNull(actualManualChangesViewModel.Comment); }); }
public bool IsCompanyNameEqual(OrganisationName organisationName, string companyName) { return(string.Equals( organisationName.Name, companyName, StringComparison.Ordinal)); }
private void AddOrganisationName(Organisation organisation, string name, SourceOfData sourceOfData) { organisation.OrganisationName = name; string source; switch (sourceOfData) { case SourceOfData.CompaniesHouse: source = "CoHo"; break; case SourceOfData.Manual: source = "User"; break; default: throw new ArgumentOutOfRangeException(nameof(sourceOfData), sourceOfData, null); } var organisationName = new OrganisationName { Organisation = organisation, Name = name, Source = source }; organisation.OrganisationNames.Add(organisationName); dataRepository.Insert(organisationName); }
private void SetupContext() { _ovoNumber = new OvoNumber("OVO000015"); _datavlaanderenOrganisationName = new OrganisationName("Departement van verloren gebouwen"); _provenanceUri = "uri//11"; var dataVlaanderenProviderMock = new Mock <IDataVlaanderenProvider>(); _wegwijsProviderMock = new Mock <IWegwijsProvider>(); dataVlaanderenProviderMock .Setup(provider => provider.GetOrganisationAsync(_ovoNumber)) .ReturnsAsync(() => new Optional <Organisation>( new Organisation { Name = _datavlaanderenOrganisationName, OvoNumber = _ovoNumber, Provenance = OrganisationProvenance.FromDataVlaanderen(_provenanceUri) })); _sut = new OrganisationProvider( Mock.Of <ILogger <OrganisationProvider> >(), dataVlaanderenProviderMock.Object, _wegwijsProviderMock.Object); }
private void SetupContext() { _ovoNumber = new OvoNumber("OVO000015"); _wegwijsOrganisationName = new OrganisationName("Departement van verloren straten"); _provenanceUri = "uri//12"; _dataVlaanderenProviderMock = new Mock <IDataVlaanderenProvider>(); _wegwijsProviderMock = new Mock <IWegwijsProvider>(); _dataVlaanderenProviderMock .Setup(provider => provider.GetOrganisationAsync(_ovoNumber)) .ThrowsAsync(new Exception()); _dataVlaanderenProviderMock .Setup(provider => provider.GetOrganisationFailedMessage()) .Returns("error message"); _wegwijsProviderMock .Setup(provider => provider.GetOrganisationAsync(_ovoNumber)) .ReturnsAsync(() => new Optional <Organisation>( new Organisation { Name = _wegwijsOrganisationName, OvoNumber = _ovoNumber, Provenance = OrganisationProvenance.FromWegwijsSearch(_provenanceUri) })); _sut = new OrganisationProvider( Mock.Of <ILogger <OrganisationProvider> >(), _dataVlaanderenProviderMock.Object, _wegwijsProviderMock.Object); }
private void AddNewNameToOrganisation(OrganisationName organisationName, Organisation organisation) { organisationName.OrganisationId = organisation.OrganisationId; organisation.OrganisationNames.Add(organisationName); organisation.OrganisationName = organisationName.Name; SharedBusinessLogic.DataRepository.Insert(organisationName); }
private void AddNewNameToOrganisation(OrganisationName organisationName, Organisation organisation) { organisationName.OrganisationId = organisation.OrganisationId; organisation.OrganisationNames.Add(organisationName); organisation.OrganisationName = organisationName.Name; dataRepository.Insert(organisationName); }
private OrganisationName CreateOrganisationNameFromViewModel(ChangeOrganisationNameViewModel viewModel) { var organisationName = new OrganisationName { Name = viewModel.Name, Created = VirtualDateTime.Now, Source = "Service Desk", }; return(organisationName); }
private OrganisationDetailsViewModel ConvertToViewModel(OrganisationName organisation) { return(new OrganisationDetailsViewModel { Address = organisation.Address.FormatAddress(), Name = organisation.Name, Type = organisation.Type, DateOfInception = organisation.RegistrationDate, ReferenceNumber = organisation.Code, PublicSectorDataSource = (short?)organisation.SubType, Sector = organisation.Sector }); }
public CompetentAuthorityWasAssigned( PublicServiceId publicServiceId, OvoNumber competentAuthorityCode, OrganisationName competentAuthorityName, PublicServiceRegistry.PublicService.OrganisationProvenance competentAuthorityProvenance) { PublicServiceId = publicServiceId; CompetentAuthorityCode = competentAuthorityCode; CompetentAuthorityName = competentAuthorityName; CompetentAuthorityProvenance = new OrganisationProvenance( competentAuthorityProvenance.Source, competentAuthorityProvenance.Uri); }
public IActionResult DeleteNameGet(long organisationId, long nameId) { Organisation organisation = dataRepository.Get <Organisation>(organisationId); OrganisationName name = organisation.OrganisationNames.FirstOrDefault(oa => oa.OrganisationNameId == nameId); if (name == null) { throw new Exception($"Name ID {nameId} is not a valid name for this Organisation"); } var viewModel = new DeleteOrganisationNameViewModel { Organisation = organisation, OrganisationNameToBeDeleted = name }; return(View("DeleteNameCheck", viewModel)); }
public void UpdateName(Organisation organisation, CompaniesHouseCompany organisationFromCompaniesHouse) { string companyNameFromCompaniesHouse = organisationFromCompaniesHouse.CompanyName; companyNameFromCompaniesHouse = FirstHundredChars(companyNameFromCompaniesHouse); if (IsCompanyNameEqual(organisation.GetName(), companyNameFromCompaniesHouse)) { return; } var nameToAdd = new OrganisationName { Organisation = organisation, Name = companyNameFromCompaniesHouse, Source = SourceOfChange, Created = VirtualDateTime.Now }; organisation.OrganisationNames.Add(nameToAdd); organisation.OrganisationName = companyNameFromCompaniesHouse; dataRepository.Insert(nameToAdd); }
protected override void ExecuteActivity(CodeActivityContext context) { TracingService.Trace("Hello!"); // Extract email domain var orgName = OrganisationName.Get <string>(context); if (string.IsNullOrEmpty(orgName)) { TracingService.Trace("No organisation name specified."); return; } // Get organisations using this domain var fetchXml = $@" <fetch distinct='true' aggregate='true' returntotalrecordcount='true'> <entity name='account'> <attribute name='accountid' alias='accountid' groupby='true' /> <attribute name='ace_mainorganisation' alias='ace_mainorganisation' groupby='true' /> <attribute name='new_grantiumapplicantnumber' alias='new_grantiumapplicantnumber' groupby='true' /> <filter> <condition attribute='name' operator='eq' value='{orgName}'/> <condition attribute='statecode' operator='eq' value='0'/> </filter> <link-entity name='contact' from='parentcustomerid' to='accountid' link-type='outer' alias='c'> <order alias='numberOfContacts' descending='true' /> <attribute name='parentcustomerid' alias='numberOfContacts' aggregate='count' /> </link-entity> </entity> </fetch>"; TracingService.Trace(fetchXml); var result = Service.RetrieveMultiple(new FetchExpression(fetchXml)); TracingService.Trace("Got {0} organisations...", result.TotalRecordCount); if (result.TotalRecordCount > 0 && result.TotalRecordCount <= 10) { var org = result.Entities[0].ToEntityReference(); Account.Set(context, org); } }
private void SaveChangesAndAuditAction(ChangeOrganisationNameViewModel viewModel, Organisation organisation) { string oldName = organisation.OrganisationName; OrganisationName newOrganisationName = CreateOrganisationNameFromViewModel(viewModel); AddNewNameToOrganisation(newOrganisationName, organisation); dataRepository.SaveChanges(); auditLogger.AuditChangeToOrganisation( AuditedAction.AdminChangeOrganisationName, organisation, new { Action = viewModel.Action, OldName = oldName, NewName = newOrganisationName.Name, NewNameId = newOrganisationName.OrganisationNameId, Reason = viewModel.Reason }, User); }
public IActionResult DeleteNamePost(long organisationId, long nameId, DeleteOrganisationNameViewModel viewModel) { Organisation organisation = dataRepository.Get <Organisation>(organisationId); OrganisationName name = organisation.OrganisationNames.FirstOrDefault(oa => oa.OrganisationNameId == nameId); if (name == null) { throw new Exception($"Name ID {nameId} is not a valid name for this Organisation"); } viewModel.ParseAndValidateParameters(Request, m => m.Reason); if (viewModel.HasAnyErrors()) { viewModel.Organisation = organisation; viewModel.OrganisationNameToBeDeleted = name; return(View("DeleteNameCheck", viewModel)); } auditLogger.AuditChangeToOrganisation( AuditedAction.AdminDeleteOrganisationPreviousName, organisation, new { DeletedName = name.Name, DeletedNameId = name.OrganisationNameId, DeletedNameSource = name.Source, DeletedNameCreatedDate = name.Created.ToString("d MMM yyyy"), Reason = viewModel.Reason }, User); dataRepository.Delete(name); dataRepository.SaveChanges(); return(View("SuccessfullyDeletedOrganisationName", organisation)); }
public async Task DnBImportAsync(ILogger log, long currentUserId) { if (RunningJobs.Contains(nameof(CompaniesHouseCheck)) || RunningJobs.Contains(nameof(DnBImportAsync))) { return; } RunningJobs.Add(nameof(DnBImportAsync)); string userEmail = null; string error = null; var startTime = VirtualDateTime.Now; var totalChanges = 0; var totalInserts = 0; try { #region Load and Prechecks //Load the D&B records var dnbOrgsPaths = await _SharedBusinessLogic.FileRepository.GetFilesAsync(_SharedBusinessLogic.SharedOptions.DataPath, Filenames.DnBOrganisations()); var dnbOrgsPath = dnbOrgsPaths.OrderByDescending(f => f).FirstOrDefault(); if (string.IsNullOrEmpty(dnbOrgsPath)) { return; } if (!await _SharedBusinessLogic.FileRepository.GetFileExistsAsync(dnbOrgsPath)) { throw new Exception("Could not find " + dnbOrgsPath); } var AllDnBOrgs = await _SharedBusinessLogic.FileRepository.ReadCSVAsync <DnBOrgsModel>(dnbOrgsPath); if (!AllDnBOrgs.Any()) { log.LogWarning($"No records found in '{dnbOrgsPath}'"); return; } AllDnBOrgs = AllDnBOrgs.OrderBy(o => o.OrganisationName).ToList(); //Check for duplicate DUNS var count = AllDnBOrgs.Count() - AllDnBOrgs.Select(o => o.DUNSNumber).Distinct().Count(); if (count > 0) { throw new Exception($"There are {count} duplicate DUNS numbers detected"); } //Check for no addresses count = AllDnBOrgs.Count(o => !o.IsValidAddress()); if (count > 0) { throw new Exception( $"There are {count} organisations with no address detected (i.e., no AddressLine1, AddressLine2, PostalCode, and PoBox)."); } //Check for no organisation name count = AllDnBOrgs.Count(o => string.IsNullOrWhiteSpace(o.OrganisationName)); if (count > 0) { throw new Exception($"There are {count} organisations with no OrganisationName detected."); } //Check for duplicate employer references var allEmployerReferenceCount = AllDnBOrgs.Count(o => !string.IsNullOrWhiteSpace(o.EmployerReference)); var employerReferences = new SortedSet <string>( AllDnBOrgs.Where(o => !string.IsNullOrWhiteSpace(o.EmployerReference)) .Select(o => o.EmployerReference).Distinct()); count = allEmployerReferenceCount - employerReferences.Count; if (count > 0) { throw new Exception($"There are {count} duplicate EmployerReferences detected"); } //Check companies have been updated count = AllDnBOrgs.Count( o => !string.IsNullOrWhiteSpace(o.CompanyNumber) && o.DateOfCessation == null && (o.StatusCheckedDate == null || o.StatusCheckedDate.Value.AddMonths(1) < VirtualDateTime.Now)); if (count > 0) { throw new Exception( $"There are {count} active companies who have not been checked with companies house within the last month"); } //Fix Company Number Parallel.ForEach( AllDnBOrgs.Where(o => !string.IsNullOrWhiteSpace(o.CompanyNumber)), dnbOrg => { if (dnbOrg.CompanyNumber.IsNumber()) { dnbOrg.CompanyNumber = dnbOrg.CompanyNumber.PadLeft(8, '0'); } }); //Check for duplicate company numbers var companyNumbers = AllDnBOrgs.Where(o => !string.IsNullOrWhiteSpace(o.CompanyNumber)).Select(o => o.CompanyNumber); count = companyNumbers.Count() - companyNumbers.Distinct().Count(); if (count > 0) { throw new Exception($"There are {count} duplicate CompanyNumbers detected"); } //Get the current users email address var user = await _SharedBusinessLogic.DataRepository.GetAll <User>() .FirstOrDefaultAsync(u => u.UserId == currentUserId); userEmail = user?.EmailAddress; //Count records requiring import count = AllDnBOrgs.Count( o => !o.GetIsDissolved() && (o.ImportedDate == null || string.IsNullOrWhiteSpace(o.CompanyNumber) || o.ImportedDate < o.StatusCheckedDate)); if (count == 0) { return; } var dbOrgs = _SharedBusinessLogic.DataRepository.GetAll <Organisation>().ToList(); #endregion //Set all existing org employer references await ReferenceEmployersAsync(); #region Set all existing org DUNS var dnbOrgs = AllDnBOrgs .Where(o => o.OrganisationId > 0 && string.IsNullOrWhiteSpace(o.EmployerReference)) .ToList(); if (dnbOrgs.Count > 0) { foreach (var dnbOrg in dnbOrgs) { var org = dbOrgs.FirstOrDefault(o => o.OrganisationId == dnbOrg.OrganisationId); if (org == null) { if (!_SharedBusinessLogic.SharedOptions.IsProduction()) { continue; } throw new Exception($"OrganisationId:{dnbOrg.OrganisationId} does not exist in database"); } if (!string.IsNullOrWhiteSpace(org.DUNSNumber)) { continue; } org.DUNSNumber = dnbOrg.DUNSNumber; dnbOrg.OrganisationId = null; } await _SharedBusinessLogic.DataRepository.SaveChangesAsync(); dbOrgs = await _SharedBusinessLogic.DataRepository.GetAll <Organisation>().ToListAsync(); await _SharedBusinessLogic.FileRepository.SaveCSVAsync(AllDnBOrgs, dnbOrgsPath); AllDnBOrgs = await _SharedBusinessLogic.FileRepository.ReadCSVAsync <DnBOrgsModel>(dnbOrgsPath); AllDnBOrgs = AllDnBOrgs.OrderBy(o => o.OrganisationName).ToList(); } #endregion var allSicCodes = await _SharedBusinessLogic.DataRepository.GetAll <SicCode>().ToListAsync(); dnbOrgs = AllDnBOrgs.Where(o => o.ImportedDate == null || o.ImportedDate < o.StatusCheckedDate) .ToList(); while (dnbOrgs.Count > 0) { var allBadSicCodes = new ConcurrentBag <OrganisationSicCode>(); var c = 0; var dbChanges = 0; var dnbChanges = 0; foreach (var dnbOrg in dnbOrgs) { //Only do 100 records at a time if (c > 100) { break; } var dbChanged = false; var dbOrg = dbOrgs.FirstOrDefault(o => o.DUNSNumber == dnbOrg.DUNSNumber); var dataSource = string.IsNullOrWhiteSpace(dnbOrg.NameSource) ? "D&B" : dnbOrg.NameSource; var orgName = new OrganisationName { Name = dnbOrg.OrganisationName.Left(100), Source = dataSource }; if (dbOrg == null) { dbOrg = string.IsNullOrWhiteSpace(dnbOrg.CompanyNumber) ? null : dbOrgs.FirstOrDefault(o => o.CompanyNumber == dnbOrg.CompanyNumber); if (dbOrg != null) { dbOrg.DUNSNumber = dnbOrg.DUNSNumber; } else { dbOrg = new Organisation { DUNSNumber = dnbOrg.DUNSNumber, EmployerReference = dnbOrg.EmployerReference, OrganisationName = orgName.Name, CompanyNumber = string.IsNullOrWhiteSpace(dnbOrg.CompanyNumber) ? null : dnbOrg.CompanyNumber, SectorType = dnbOrg.SectorType, DateOfCessation = dnbOrg.DateOfCessation }; dbOrg.OrganisationNames.Add(orgName); //Create a presumed in-scope for current year var newScope = new OrganisationScope { Organisation = dbOrg, ScopeStatus = ScopeStatuses.PresumedInScope, ScopeStatusDate = VirtualDateTime.Now, Status = ScopeRowStatuses.Active, SnapshotDate = _snapshotDateHelper.GetSnapshotDate(dbOrg.SectorType) }; _SharedBusinessLogic.DataRepository.Insert(newScope); dbOrg.OrganisationScopes.Add(newScope); //Create a presumed out-of-scope for previous year var oldScope = new OrganisationScope { Organisation = dbOrg, ScopeStatus = ScopeStatuses.PresumedOutOfScope, ScopeStatusDate = VirtualDateTime.Now, Status = ScopeRowStatuses.Active, SnapshotDate = newScope.SnapshotDate.AddYears(-1) }; _SharedBusinessLogic.DataRepository.Insert(oldScope); dbOrg.OrganisationScopes.Add(oldScope); dbOrg.SetStatus(OrganisationStatuses.Active, currentUserId, "Imported from D&B"); } } //Skip dissolved companies else if (_OrganisationBusinessLogic.GetOrganisationWasDissolvedBeforeCurrentAccountingYear(dbOrg)) { dnbOrg.ImportedDate = VirtualDateTime.Now; dnbChanges++; continue; } else if (dbOrg.OrganisationName != orgName.Name) { var oldOrgName = dbOrg.GetLatestName(); if (oldOrgName == null || _SharedBusinessLogic.SourceComparer.CanReplace(orgName.Source, oldOrgName.Source)) { dbOrg.OrganisationName = orgName.Name; dbOrg.OrganisationNames.Add(orgName); dbChanged = true; } } //Ensure D&B gas an organisationID if (dnbOrg.OrganisationId == null || dnbOrg.OrganisationId.Value == 0) { dnbOrg.OrganisationId = dbOrg.OrganisationId; dnbChanges++; } //Add the cessation date if (dbOrg.DateOfCessation == null && dbOrg.DateOfCessation != dnbOrg.DateOfCessation) { dbOrg.DateOfCessation = dnbOrg.DateOfCessation; dbChanged = true; } //Set the employer reference if (string.IsNullOrWhiteSpace(dbOrg.EmployerReference)) { string employerReference; do { employerReference = _OrganisationBusinessLogic.GenerateEmployerReference(); } while (employerReferences.Contains(employerReference)); dbOrg.EmployerReference = employerReference; employerReferences.Add(employerReference); dbChanged = true; } if (dnbOrg.EmployerReference != dbOrg.EmployerReference) { dnbOrg.EmployerReference = dbOrg.EmployerReference; dnbChanges++; } //Add the new address var fullAddress = dnbOrg.GetAddress(); var newAddress = dbOrg.LatestAddress; //add the address if there isnt one dataSource = string.IsNullOrWhiteSpace(dnbOrg.AddressSource) ? "D&B" : dnbOrg.AddressSource; if (newAddress == null || !newAddress.GetAddressString().EqualsI(fullAddress) && _SharedBusinessLogic.SourceComparer.CanReplace(dataSource, newAddress.Source)) { var statusDate = VirtualDateTime.Now; newAddress = new OrganisationAddress(); newAddress.Organisation = dbOrg; newAddress.CreatedByUserId = currentUserId; newAddress.Address1 = dnbOrg.AddressLine1; newAddress.Address2 = dnbOrg.AddressLine2; newAddress.Address3 = dnbOrg.AddressLine3; newAddress.County = dnbOrg.County; newAddress.Country = dnbOrg.Country; newAddress.TownCity = dnbOrg.City; newAddress.PostCode = dnbOrg.PostalCode; newAddress.PoBox = dnbOrg.PoBox; newAddress.Source = dataSource; newAddress.SetStatus(AddressStatuses.Active, currentUserId, "Imported from D&B"); if (dbOrg.LatestAddress != null) { dbOrg.LatestAddress.SetStatus(AddressStatuses.Retired, currentUserId, $"Replaced by {newAddress.Source}"); } } //Update the sic codes var newCodeIds = dnbOrg.GetSicCodesIds(); var newCodesList = dnbOrg.GetSicCodesIds().ToList(); for (var i = 0; i < newCodesList.Count; i++) { var code = newCodesList[i]; if (code <= 0) { continue; } var sicCode = allSicCodes.FirstOrDefault(sic => sic.SicCodeId == code); if (sicCode != null) { continue; } sicCode = allSicCodes.FirstOrDefault( sic => sic.SicCodeId == code * 10 && sic.Description.EqualsI(dnbOrg.SicDescription)); if (sicCode != null) { newCodesList[i] = sicCode.SicCodeId; } } newCodeIds = new SortedSet <int>(newCodesList); var newCodes = new List <OrganisationSicCode>(); var oldCodes = dbOrg.GetLatestSicCodes().ToList(); var oldSicSource = dbOrg.GetLatestSicSource(); var oldCodeIds = oldCodes.Select(s => s.SicCodeId); if (dbOrg.SectorType == SectorTypes.Public) { newCodeIds.Add(1); } if (!_SharedBusinessLogic.SharedOptions.IsProduction()) { Debug.WriteLine( $"OLD:{oldCodes.Select(s => s.SicCodeId).ToDelimitedString()} NEW:{newCodeIds.ToDelimitedString()}"); } dataSource = string.IsNullOrWhiteSpace(dnbOrg.SicSource) ? "D&B" : dnbOrg.SicSource; if (!newCodeIds.SetEquals(oldCodeIds) && _SharedBusinessLogic.SourceComparer.CanReplace(dataSource, oldSicSource)) { foreach (var code in newCodeIds) { if (code <= 0) { continue; } var sicCode = allSicCodes.FirstOrDefault(sic => sic.SicCodeId == code); var newSic = new OrganisationSicCode { Organisation = dbOrg, SicCodeId = code, Source = dataSource }; if (sicCode == null) { allBadSicCodes.Add(newSic); continue; } newCodes.Add(newSic); } if (newCodes.Any()) { //Add new codes only foreach (var newSic in newCodes) { dbOrg.OrganisationSicCodes.Add(newSic); dbChanged = true; } //Retire the old codes foreach (var oldSic in oldCodes) { oldSic.Retired = VirtualDateTime.Now; dbChanged = true; } } } await _SharedBusinessLogic.DataRepository.BeginTransactionAsync( async() => { try { //Save the name, Sic, EmployerReference, DateOfCessasion changes if (dbChanged) { await _SharedBusinessLogic.DataRepository.SaveChangesAsync(); } //Save the changes dnbOrg.ImportedDate = VirtualDateTime.Now; dnbChanges++; var insert = false; if (dbOrg.OrganisationId == 0) { _SharedBusinessLogic.DataRepository.Insert(dbOrg); await _SharedBusinessLogic.DataRepository.SaveChangesAsync(); dbChanged = true; insert = true; } if (newAddress != null && newAddress.AddressId == 0) { dbOrg.OrganisationAddresses.Add(newAddress); dbOrg.LatestAddress = newAddress; await _SharedBusinessLogic.DataRepository.SaveChangesAsync(); dbChanged = true; } if (dbChanged) { dbChanges++; _SharedBusinessLogic.DataRepository.CommitTransaction(); totalChanges++; if (insert) { totalInserts++; } //Add or remove this organisation to/from the search index await SearchBusinessLogic.UpdateSearchIndexAsync(dbOrg); } } catch { _SharedBusinessLogic.DataRepository.RollbackTransaction(); } }); c++; } //Reload all the changes if (dbChanges > 0) { dbOrgs = await _SharedBusinessLogic.DataRepository.GetAll <Organisation>().ToListAsync(); } //Save the D&B records if (dnbChanges > 0) { await _SharedBusinessLogic.FileRepository.SaveCSVAsync(AllDnBOrgs, dnbOrgsPath); AllDnBOrgs = await _SharedBusinessLogic.FileRepository.ReadCSVAsync <DnBOrgsModel>(dnbOrgsPath); AllDnBOrgs = AllDnBOrgs.OrderBy(o => o.OrganisationName).ToList(); dnbOrgs = AllDnBOrgs.Where(o => o.ImportedDate == null || o.ImportedDate < o.StatusCheckedDate) .ToList(); } //Save the bad sic codes if (allBadSicCodes.Count > 0) { //Create the logging tasks var badSicLoggingtasks = new List <Task>(); allBadSicCodes.ForEach( bsc => badSicLoggingtasks.Add( _BadSicLog.WriteAsync( new BadSicLogModel { OrganisationId = bsc.Organisation.OrganisationId, OrganisationName = bsc.Organisation.OrganisationName, SicCode = bsc.SicCodeId, Source = bsc.Source }))); //Wait for all the logging tasks to complete await Task.WhenAll(badSicLoggingtasks); } } } catch (Exception ex) { error = ex.Message; throw; } finally { if (!string.IsNullOrWhiteSpace(userEmail)) { var endTime = VirtualDateTime.Now; var duration = endTime - startTime; try { if (!string.IsNullOrWhiteSpace(error)) { await _Messenger.SendMessageAsync( "D&B Import Failed", userEmail, $"The D&B import failed at {endTime} after {duration.ToFriendly()}.\nChanged {totalChanges} organisations including {totalInserts} new.\n\nERROR:{error}"); } else if (totalChanges == 0) { await _Messenger.SendMessageAsync( "D&B Import Complete", userEmail, "The D&B import process completed successfully with no records requiring import."); } else { await _Messenger.SendMessageAsync( "D&B Import Complete", userEmail, $"The D&B import process completed successfully at {endTime} after {duration.ToFriendly()}.\nChanged {totalChanges} organisations including {totalInserts} new."); } } catch (Exception ex) { log.LogError(ex, ex.Message); } } RunningJobs.Remove(nameof(DnBImportAsync)); } }
public void RegistrationController_AddAddress_POST_AuthorisedNoAddress_ToConfirm() { //ARRANGE: //1.Arrange the test setup variables var user = new User { UserId = 1, EmailAddress = "*****@*****.**", EmailVerifiedDate = VirtualDateTime.Now }; var address0 = new OrganisationAddress { AddressId = 1, Status = AddressStatuses.Active, Source = "CoHo", Address1 = "123", Address2 = "evergreen terrace", Address3 = "Westminster", TownCity = "City1", County = "County1", Country = "United Kingdom", PoBox = "PoBox 12", PostCode = "W1 5qr" }; var sicCode1 = new SicCode { SicCodeId = 2100, Description = "Desc1", SicSection = new SicSection { SicSectionId = "4321", Description = "Section1" } }; var sicCode2 = new SicCode { SicCodeId = 10520, Description = "Desc2", SicSection = new SicSection { SicSectionId = "4326", Description = "Section2" } }; var org0 = new Core.Entities.Organisation { OrganisationId = 1, OrganisationName = "Company1", SectorType = SectorTypes.Private, Status = OrganisationStatuses.Active, CompanyNumber = "12345678" }; org0.OrganisationAddresses.Add(address0); var name = new OrganisationName { OrganisationNameId = 1, Name = org0.OrganisationName, Created = org0.Created, Organisation = org0, OrganisationId = org0.OrganisationId }; org0.OrganisationNames.Add(name); var sic1 = new OrganisationSicCode { SicCode = sicCode1, SicCodeId = 2100, Created = org0.Created, Organisation = org0, OrganisationId = org0.OrganisationId }; org0.OrganisationSicCodes.Add(sic1); var sic2 = new OrganisationSicCode { SicCode = sicCode2, SicCodeId = 10520, Created = org0.Created, Organisation = org0, OrganisationId = org0.OrganisationId }; org0.OrganisationSicCodes.Add(sic2); //Set user email address verified code and expired sent date var routeData = new RouteData(); routeData.Values.Add("Action", nameof(RegistrationController.AddAddress)); routeData.Values.Add("Controller", "Registration"); var controller = UiTestHelper.GetController <RegistrationController>(user.UserId, routeData, user, org0, address0, name, sic1, sic2); var employerResult = new PagedResult <EmployerRecord>(); employerResult.Results = new List <EmployerRecord> { EmployerRecord.Create(org0) }; //use the include and exclude functions here to save typing var model = new OrganisationViewModel { NoReference = false, SearchText = "Searchtext", ManualAddress = true, SelectedAuthorised = true, ManualRegistration = false, SectorType = SectorTypes.Public, PINExpired = false, PINSent = false, SelectedEmployerIndex = 0, Employers = employerResult, //0 record returned ManualEmployers = new List <EmployerRecord>(), ManualEmployerIndex = -1, AddressReturnAction = nameof(RegistrationController.ConfirmOrganisation), ConfirmReturnAction = nameof(RegistrationController.ChooseOrganisation) }; //Stash the object for the unstash to happen in code controller.StashModel(model); OrganisationViewModel savedModel = model.GetClone(); savedModel.Address1 = "Unit 2"; savedModel.Address2 = "Bank Road"; savedModel.Address3 = "Essex"; savedModel.Postcode = "PoStCode 13"; controller.Bind(savedModel); //Set the expected model OrganisationViewModel expectedModel = savedModel.GetClone(); expectedModel.AddressSource = user.EmailAddress; expectedModel.ConfirmReturnAction = nameof(RegistrationController.AddAddress); //ACT: var result = controller.AddAddress(savedModel) as RedirectToActionResult; //ASSERTS: //3.Check that the result is not null Assert.NotNull(result, "Expected RedirectToActionResult"); //4.Check that the redirection went to the right url step. Assert.That(result.ActionName == nameof(RegistrationController.ConfirmOrganisation), "Redirected to the wrong view"); //5.If the redirection successfull retrieve the model stash sent with the redirect. var unstashedModel = controller.UnstashModel <OrganisationViewModel>(); //6.Check that the unstashed model is not null Assert.NotNull(unstashedModel, "Expected OrganisationViewModel"); //Check model is same as expected expectedModel.Compare(unstashedModel); }
/* * public void CreateEnquiryCase(string orgName, string contactName, string team, string status, string priority, string triageLevel, string caseOrigin, string subject, string description) * { * WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(50)); * wait.Until(ExpectedConditions.ElementToBeClickable(_txtOrganisationName)); * OrganisationName.Clear(); * OrganisationName.SendKeys(orgName); * Thread.Sleep(2000); * wait.Until(ExpectedConditions.ElementToBeClickable(_txtContactName)); * ContactName.Clear(); * ContactName.SendKeys(contactName); * Thread.Sleep(2000); * * if (Team.Displayed) * { * Team.Click(); * var x2 = team; * var x1 = "//*[contains(text(),'"; * var x3 = "')]"; * Thread.Sleep(3000); * driver.FindElement(By.XPath(x1 + x2 + x3)).Click(); * * } * else * { * throw new Exception("Team could not be selected"); * } * if (CaseStatus.Displayed == true) * { * CaseStatus.Click(); * var x2 = status; * var x1 = "//*[contains(text(),'"; * var x3 = "')]"; * Thread.Sleep(3000); * driver.FindElement(By.XPath(x1 + x2 + x3)).Click(); * * } * else * { * throw new Exception("Status List could not be selected"); * } * if (CasePriority.Displayed) * { * CasePriority.Click(); * var x2 = priority; * var x1 = "//*[contains(text(),'"; * var x3 = "')]"; * Thread.Sleep(3000); * driver.FindElement(By.XPath(x1 + x2 + x3)).Click(); * * } * else * { * throw new Exception("Case Priority could not be selected"); * } * * wait.Until(ExpectedConditions.ElementToBeClickable(_txtTriageLevel)); * TriageLevel.Clear(); * TriageLevel.SendKeys(triageLevel); * Thread.Sleep(2000); * * if (CaseOrigin.Displayed) * { * CaseOrigin.Click(); * var x2 = caseOrigin; * var x1 = "//*[contains(text(),'"; * var x3 = "')]"; * Thread.Sleep(3000); * driver.FindElement(By.XPath(x1 + x2 + x3)).Click(); * * } * else * { * throw new Exception("Case Origin could not be selected"); * } * * wait.Until(ExpectedConditions.ElementToBeClickable(_txtSubject)); * Subject.Clear(); * Subject.SendKeys(subject); * Thread.Sleep(2000); * * wait.Until(ExpectedConditions.ElementToBeClickable(_txtDescription)); * Description.Clear(); * Description.SendKeys(description); * Thread.Sleep(2000); * * } */ public void CreateTechSupportCase(string orgName, string contactName, string technologyTeam, string caseOrigin, string workflow, string category, string status, string priority, string supportClassification, string SCLevel1, string SCLevel2, string subject, string description) { WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(50)); wait.Until(ExpectedConditions.ElementToBeClickable(_txtOrganisationName)); OrganisationName.Clear(); OrganisationName.SendKeys(orgName); Thread.Sleep(2000); wait.Until(ExpectedConditions.ElementToBeClickable(_txtContactName)); ContactName.Clear(); ContactName.SendKeys(contactName); Thread.Sleep(2000); if (TechnologyTeam.Displayed) { TechnologyTeam.Click(); var x2 = technologyTeam; var x1 = "//*[contains(text(),'"; var x3 = "')]"; Thread.Sleep(3000); driver.FindElement(By.XPath(x1 + x2 + x3)).Click(); } else { throw new Exception("Team could not be selected"); } IWebElement dropDownOriginListBox = driver.FindElement(_listCaseOrigin); SelectElement clickOrigin = new SelectElement(dropDownOriginListBox); //Thread.Sleep(2000); clickOrigin.SelectByText(caseOrigin); //Thread.Sleep(2000); IWebElement dropDownWorkFlowListBox = driver.FindElement(_listWorkflow); SelectElement clickWorkFlow = new SelectElement(dropDownWorkFlowListBox); //Thread.Sleep(2000); clickWorkFlow.SelectByText(workflow); //Thread.Sleep(2000); IWebElement dropDownCategoryListBox = driver.FindElement(_listCategory); SelectElement clickCategory = new SelectElement(dropDownCategoryListBox); //Thread.Sleep(2000); clickCategory.SelectByText(category); //Thread.Sleep(2000); IWebElement dropDownStatusListBox = driver.FindElement(_listStatus); SelectElement clickStatus = new SelectElement(dropDownStatusListBox); Thread.Sleep(2000); clickStatus.SelectByText(status); Thread.Sleep(2000); if (CasePriority.Displayed) { CasePriority.Click(); var x2 = priority; var x1 = "//*[contains(text(),'"; var x3 = "')]"; Thread.Sleep(3000); driver.FindElement(By.XPath(x1 + x2 + x3)).Click(); } else { throw new Exception("Case Priority could not be selected"); } IWebElement dropDownSCListBox = driver.FindElement(_listSupportClassification); SelectElement clickSC = new SelectElement(dropDownSCListBox); //Thread.Sleep(2000); clickSC.SelectByText(supportClassification); //Thread.Sleep(2000); IWebElement dropDownSCL1ListBox = driver.FindElement(_listSCLevel1); SelectElement clickSCL1 = new SelectElement(dropDownSCL1ListBox); //Thread.Sleep(2000); clickSCL1.SelectByText(SCLevel1); //Thread.Sleep(2000); IWebElement dropDownSCL2ListBox = driver.FindElement(_listSCLevel2); SelectElement clickSCL2 = new SelectElement(dropDownSCL2ListBox); //Thread.Sleep(2000); clickSCL2.SelectByText(SCLevel2); //Thread.Sleep(2000); wait.Until(ExpectedConditions.ElementToBeClickable(_txtSubject)); Subject.Clear(); Subject.SendKeys(subject); Thread.Sleep(2000); wait.Until(ExpectedConditions.ElementToBeClickable(_txtDescription)); Description.Clear(); Description.SendKeys(description); Thread.Sleep(2000); }