public void SetUp() { _coordinatesMock = NSubstitute.Substitute.For <IAddressCoordinates>(); _repoMock = NSubstitute.Substitute.For <IGenericRepository <CachedAddress> >(); _repoMock.AsQueryable().ReturnsForAnyArgs(new List <CachedAddress>() { new CachedAddress() { StreetName = "Jens Baggesens Vej", StreetNumber = "44", ZipCode = 8210, Town = "Aarhus V", IsDirty = true, DirtyString = "Jens Baggesens Vej 44, 8210 Aarhus V" }, new CachedAddress() { StreetName = "Katrinebjergvej", StreetNumber = "93b", ZipCode = 8200, Town = "Aarhus N", IsDirty = false, DirtyString = "Katrinebjergvej 93b, 8200 Aarhus N" } }.AsQueryable()); _laundryMock = NSubstitute.Substitute.For <IAddressLaunderer>(); _laundryMock.WhenForAnyArgs(x => x.Launder(new Address())).DoNotCallBase(); _uut = new CachedAddressLaunderer(_repoMock, _laundryMock, _coordinatesMock); }
public APIService( IGenericRepository <OrgUnit> orgUnitRepo, IGenericRepository <CachedAddress> cachedRepo, IAddressLaunderer actualLaunderer, IAddressCoordinates coordinates, IGenericRepository <Person> personRepo, ISubstituteService subService, IGenericRepository <Substitute> subRepo, IGenericRepository <Report> reportRepo, IReportService <Report> reportService, ILogger <APIService> logger ) { _orgUnitRepo = orgUnitRepo; _cachedRepo = cachedRepo; _actualLaunderer = actualLaunderer; _coordinates = coordinates; _personRepo = personRepo; _subService = subService; _subRepo = subRepo; _reportRepo = reportRepo; _reportService = reportService; _logger = logger; _launderer = new CachedAddressLaunderer(_cachedRepo, _actualLaunderer, _coordinates); // manually handle changes on these large datasets to improve performance _orgUnitRepo.SetChangeTrackingEnabled(false); _personRepo.SetChangeTrackingEnabled(false); _subRepo.SetChangeTrackingEnabled(false); _reportRepo.SetChangeTrackingEnabled(false); }
public WorkAddress GetWorkAddressIDM(IDMOrganisation org) { var launderer = new CachedAddressLaunderer(_cachedRepo, _actualLaunderer, _coordinates); if (org.Vejnavn == null || org.Vejnavn == "") { return(null); } var splitStreetAddress = SplitAddressIDM(org.Vejnavn, org.PostNr, org.PostDistrikt); var addressToLaunder = new Address { StreetName = splitStreetAddress.ElementAt(0), StreetNumber = splitStreetAddress.ElementAt(1), ZipCode = Convert.ToInt32(splitStreetAddress.ElementAt(3)), Town = splitStreetAddress.ElementAt(2), Description = org.Navn }; addressToLaunder = launderer.Launder(addressToLaunder); var launderedAddress = new WorkAddress() { StreetName = addressToLaunder.StreetName, StreetNumber = addressToLaunder.StreetNumber, ZipCode = addressToLaunder.ZipCode, Town = addressToLaunder.Town, Latitude = addressToLaunder.Latitude ?? "", Longitude = addressToLaunder.Longitude ?? "", Description = org.Navn }; var existingOrg = _orgRepo.AsQueryable().FirstOrDefault(x => x.OrgOUID.Equals(org.OUID)); // If the address hasn't changed then set the Id to be the same as the existing one. // That way a new address won't be created in the database. // If the address is not the same as the existing one, // Then the Id will be 0, and a new address will be created in the database. if (existingOrg != null && existingOrg.Address != null && existingOrg.Address.StreetName == launderedAddress.StreetName && existingOrg.Address.StreetNumber == launderedAddress.StreetNumber && existingOrg.Address.ZipCode == launderedAddress.ZipCode && existingOrg.Address.Town == launderedAddress.Town && existingOrg.Address.Latitude == launderedAddress.Latitude && existingOrg.Address.Longitude == launderedAddress.Longitude && existingOrg.Address.Description == launderedAddress.Description) { launderedAddress.Id = (int)existingOrg.AddressId; } else { var a = 2; } return(launderedAddress); }
/// <summary> /// Gets work address wor organisation. /// </summary> /// <param name="org"></param> /// <returns>WorkAddress</returns> public WorkAddress GetWorkAddress(Organisation org) { var launderer = new CachedAddressLaunderer(_cachedRepo, _actualLaunderer, _coordinates); if (org.Gade == null) { return(null); } var splitStreetAddress = SplitAddressOnNumber(org.Gade); var addressToLaunder = new Address { StreetName = splitStreetAddress.ElementAt(0), StreetNumber = splitStreetAddress.Count > 1 ? splitStreetAddress.ElementAt(1) : "1", ZipCode = org.Postnr ?? 0, Town = org.By, Description = org.Navn }; addressToLaunder = launderer.Launder(addressToLaunder); var launderedAddress = new WorkAddress() { StreetName = addressToLaunder.StreetName, StreetNumber = addressToLaunder.StreetNumber, ZipCode = addressToLaunder.ZipCode, Town = addressToLaunder.Town, Latitude = addressToLaunder.Latitude ?? "", Longitude = addressToLaunder.Longitude ?? "", Description = org.Navn }; var existingOrg = _orgRepo.AsQueryable().FirstOrDefault(x => x.OrgId.Equals(org.LOSOrgId)); // If the address hasn't changed then set the Id to be the same as the existing one. // That way a new address won't be created in the database. // If the address is not the same as the existing one, // Then the Id will be 0, and a new address will be created in the database. if (existingOrg != null && existingOrg.Address != null && existingOrg.Address.StreetName == launderedAddress.StreetName && existingOrg.Address.StreetNumber == launderedAddress.StreetNumber && existingOrg.Address.ZipCode == launderedAddress.ZipCode && existingOrg.Address.Town == launderedAddress.Town && existingOrg.Address.Latitude == launderedAddress.Latitude && existingOrg.Address.Longitude == launderedAddress.Longitude && existingOrg.Address.Description == launderedAddress.Description) { launderedAddress.Id = existingOrg.AddressId; } else { var a = 2; } return(launderedAddress); }
/// <summary> /// Gets work address from API Address. /// </summary> /// <param name="org"></param> /// <returns>WorkAddress</returns> private WorkAddress GetWorkAddress(APIOrgUnit apiOrgunit) { var launderer = new CachedAddressLaunderer(_cachedRepo, _actualLaunderer, _coordinates); if (apiOrgunit.Address?.Street == null) { return(null); } var splitStreetAddress = SplitAddressOnNumber(apiOrgunit.Address.Street); var addressToLaunder = new Address { StreetName = splitStreetAddress.ElementAt(0), StreetNumber = splitStreetAddress.Count > 1 ? splitStreetAddress.ElementAt(1) : "1", ZipCode = apiOrgunit.Address.PostalCode, Town = apiOrgunit.Address.City, Description = apiOrgunit.Name }; addressToLaunder = launderer.Launder(addressToLaunder); var launderedAddress = new WorkAddress() { StreetName = addressToLaunder.StreetName, StreetNumber = addressToLaunder.StreetNumber, ZipCode = addressToLaunder.ZipCode, Town = addressToLaunder.Town, Latitude = addressToLaunder.Latitude ?? "", Longitude = addressToLaunder.Longitude ?? "", Description = apiOrgunit.Name }; var existingOrg = _orgUnitRepo.AsNoTracking().FirstOrDefault(x => x.OrgId.Equals(apiOrgunit.Id)); // If the address hasn't changed then set the Id to be the same as the existing one. // That way a new address won't be created in the database. // If the address is not the same as the existing one, // Then the Id will be 0, and a new address will be created in the database. if (existingOrg != null && existingOrg.Address != null && existingOrg.Address.StreetName == launderedAddress.StreetName && existingOrg.Address.StreetNumber == launderedAddress.StreetNumber && existingOrg.Address.ZipCode == launderedAddress.ZipCode && existingOrg.Address.Town == launderedAddress.Town && existingOrg.Address.Latitude == launderedAddress.Latitude && existingOrg.Address.Longitude == launderedAddress.Longitude && existingOrg.Address.Description == launderedAddress.Description) { launderedAddress.Id = existingOrg.AddressId; } return(launderedAddress); }
public APIService(IServiceProvider provider) { _orgUnitRepo = provider.GetService <IGenericRepository <OrgUnit> >(); _cachedRepo = provider.GetService <IGenericRepository <CachedAddress> >(); _actualLaunderer = provider.GetService <IAddressLaunderer>(); _coordinates = provider.GetService <IAddressCoordinates>();; _personRepo = provider.GetService <IGenericRepository <Person> >();; _subService = provider.GetService <ISubstituteService>();; _subRepo = provider.GetService <IGenericRepository <Substitute> >();; _reportRepo = provider.GetService <IGenericRepository <DriveReport> >();; _driveService = provider.GetService <IDriveReportService>();; _logger = provider.GetService <ILogger <APIService> >();; _launderer = new CachedAddressLaunderer(_cachedRepo, _actualLaunderer, _coordinates); _addressHistoryService = provider.GetService <AddressHistoryService>(); _configuration = provider.GetService <IConfiguration>(); // manually handle changes on these large datasets to improve performance _orgUnitRepo.SetChangeTrackingEnabled(false); _personRepo.SetChangeTrackingEnabled(false); _subRepo.SetChangeTrackingEnabled(false); _reportRepo.SetChangeTrackingEnabled(false); }
/// <summary> /// Updates home address for person identified by personId. /// </summary> /// <param name="empl"></param> /// <param name="personId"></param> public void UpdateHomeAddressIDM(IDMEmployee empl, string cpr) { try { if (empl.Vejnavn == null || empl.Vejnavn == "") { return; } var person = _personRepo.AsQueryable().FirstOrDefault(x => x.CprNumber == cpr); if (person == null) { throw new Exception("Person does not exist."); } var launderer = new CachedAddressLaunderer(_cachedRepo, _actualLaunderer, _coordinates); var splitStreetAddress = SplitAddressIDM(empl.Vejnavn, empl.PostNr, empl.PostDistrikt); var addressToLaunder = new Address { Description = person.FirstName + " " + person.LastName + " [" + person.Initials + "]", StreetName = splitStreetAddress.ElementAtOrDefault(0), StreetNumber = splitStreetAddress.ElementAtOrDefault(1) ?? "", ZipCode = Convert.ToInt32(splitStreetAddress.ElementAtOrDefault(3) ?? "9999"), Town = splitStreetAddress.ElementAtOrDefault(2) ?? "" }; addressToLaunder = launderer.Launder(addressToLaunder); var launderedAddress = new PersonalAddress() { PersonId = person.Id, Type = PersonalAddressType.Home, StreetName = addressToLaunder.StreetName, StreetNumber = addressToLaunder.StreetNumber, ZipCode = addressToLaunder.ZipCode, Town = addressToLaunder.Town, Latitude = addressToLaunder.Latitude ?? "", Longitude = addressToLaunder.Longitude ?? "", Description = addressToLaunder.Description }; var homeAddr = _personalAddressRepo.AsQueryable().FirstOrDefault(x => x.PersonId.Equals(person.Id) && x.Type == PersonalAddressType.Home); if (homeAddr == null) { _personalAddressRepo.Insert(launderedAddress); } else { if (homeAddr != launderedAddress) { // Address has changed // Change type of current (The one about to be changed) home address to OldHome. // Is done in loop because there was an error that created one or more home addresses for the same person. // This will make sure all home addresses are set to old if more than one exists. foreach (var addr in _personalAddressRepo.AsQueryable().Where(x => x.PersonId.Equals(person.Id) && x.Type == PersonalAddressType.Home).ToList()) { addr.Type = PersonalAddressType.OldHome;; } // Update actual current home address. _personalAddressRepo.Insert(launderedAddress); _personalAddressRepo.Save(); } } } catch (Exception e) { _logger.Error($"{this.GetType().Name}, UpdateHomeAddressIDM(), Error when updating address for CPR={cpr}", e); throw; } }
/// <summary> /// Updates home address for person identified by personId. /// </summary> /// <param name="empl"></param> /// <param name="personId"></param> public void UpdateHomeAddress(Employee empl, int personId) { if (empl.Adresse == null) { return; } var person = _personRepo.AsQueryable().FirstOrDefault(x => x.Id == personId); if (person == null) { _logger.Error($"{this.GetType().Name}, UpdateHomeAddress(), Person does not exist. personId={personId}, MaNr={empl.MaNr}"); throw new Exception("Person does not exist."); } var launderer = new CachedAddressLaunderer(_cachedRepo, _actualLaunderer, _coordinates); List <string> splitStreetAddress = null; try { splitStreetAddress = SplitAddressOnNumber(empl.Adresse); } catch (Exception e) { _logger.Error($"{this.GetType().Name}, UpdateHomeAddress(), Error when splitting address. personId={personId}, address={empl.Adresse}", e); throw; } var addressToLaunder = new Address { Description = person.FirstName + " " + person.LastName + " [" + person.Initials + "]", StreetName = splitStreetAddress.ElementAt(0), StreetNumber = splitStreetAddress.Count > 1 ? splitStreetAddress.ElementAt(1) : "1", ZipCode = empl.PostNr ?? 0, Town = empl.By ?? "", }; addressToLaunder = launderer.Launder(addressToLaunder); var launderedAddress = new PersonalAddress() { PersonId = personId, Type = PersonalAddressType.Home, StreetName = addressToLaunder.StreetName, StreetNumber = addressToLaunder.StreetNumber, ZipCode = addressToLaunder.ZipCode, Town = addressToLaunder.Town, Latitude = addressToLaunder.Latitude ?? "", Longitude = addressToLaunder.Longitude ?? "", Description = addressToLaunder.Description }; var homeAddr = _personalAddressRepo.AsQueryable().FirstOrDefault(x => x.PersonId.Equals(personId) && x.Type == PersonalAddressType.Home); if (homeAddr == null) { _personalAddressRepo.Insert(launderedAddress); } else { if (homeAddr != launderedAddress) { // Address has changed // Change type of current (The one about to be changed) home address to OldHome. // Is done in loop because there was an error that created one or more home addresses for the same person. // This will make sure all home addresses are set to old if more than one exists. foreach (var addr in _personalAddressRepo.AsQueryable().Where(x => x.PersonId.Equals(personId) && x.Type == PersonalAddressType.Home).ToList()) { addr.Type = PersonalAddressType.OldHome;; } // Update actual current home address. _personalAddressRepo.Insert(launderedAddress); _personalAddressRepo.Save(); } } }