private Organisation GetOrganisationElementValue(string key, FormAnswers formAnswers) { var orgObject = new Organisation(); var organisationKey = $"{key}{OrganisationConstants.SELECT_SUFFIX}"; var organisationDescriptionKey = $"{key}{OrganisationConstants.DESCRIPTION_SUFFIX}"; var value = formAnswers.Pages.SelectMany(_ => _.Answers) .Where(_ => _.QuestionId.Equals(organisationKey) || _.QuestionId.Equals(organisationDescriptionKey)) .ToList(); orgObject.Reference = value.FirstOrDefault(_ => _.QuestionId.Equals(organisationKey))?.Response ?? string.Empty; orgObject.Name = value.FirstOrDefault(_ => _.QuestionId.Equals(organisationDescriptionKey))?.Response ?? string.Empty; return(orgObject); }
public async Task <FWTObjectID> CreateAsync(StockportGovUK.NetStandard.Models.Verint.Organisation organisation) { _logger.LogDebug($"OrganisationService.Create: Attempting to Create - { organisation.Name }"); if (organisation.Address != null) { organisation.Address.UPRN = await _propertyService.CheckUPRNForId(organisation.Address); } var fwtOrganisation = organisation.Map(); var response = await _verintConnection.createOrganisationAsync(fwtOrganisation); _logger.LogDebug($"OrganisationService.ResolveOrganisation: Created new organisation - { fwtOrganisation.Name.First().FullName }, { response.FLNewOrganisationID.ObjectReference.First() }"); return(response.FLNewOrganisationID); }
public int Calculate(FWTOrganisation organisationObject, StockportGovUK.NetStandard.Models.Verint.Organisation organisation) { if (organisation.Address == null || organisationObject.ContactPostals == null || !string.IsNullOrEmpty(organisation.Address.UPRN)) { _logger.LogDebug($"AddressWeighting.Calculate - No contact postals or address null or uprn is not empty - Returning 0 - {organisation.Name}"); return(0); } var hasMatchingPostcode = false; var hasMatchingNumber = false; // This is effectively the same as a UPRN match (i.e. House Number and Postcode must match to be given weight) if (!string.IsNullOrEmpty(organisation.Address.Postcode) && organisationObject.ContactPostals.Any(x => !string.IsNullOrEmpty(x.Postcode) && string.Equals(x.Postcode.Trim().Replace(" ", string.Empty), organisation.Address.Postcode.Trim().Replace(" ", string.Empty), StringComparison.CurrentCultureIgnoreCase))) { _logger.LogDebug($"AddressWeighting.Calculate - IS matching postcode {organisation.Address.Postcode}, {organisation.Name}"); hasMatchingPostcode = true; } else { _logger.LogDebug($"AddressWeighting.Calculate - NON matching postcode {organisation.Address.Postcode}, {organisation.Name}"); } // if (!string.IsNullOrEmpty(organisation.Address.Number) && // organisationObject.ContactPostals.Any(x => !string.IsNullOrEmpty(x.AddressNumber) && // string.Equals(x.AddressNumber.Trim(), organisation.Address.Number.ToString(), StringComparison.CurrentCultureIgnoreCase))) // { // _logger.LogDebug($"AddressWeighting.Calculate - IS matching number {organisation.Address.Number}, {organisation.Name}"); // hasMatchingNumber = true; // } // else{ // _logger.LogDebug($"AddressWeighting.Calculate - NON matching number {organisation.Address.Number}, {organisation.Name}"); // } if (hasMatchingPostcode) { _logger.LogDebug($"AddressWeighting.Calculate - IS Matching address (postcode, number) - Returning 1 - {organisation.Name}"); return(1); } _logger.LogDebug($"AddressWeighting.Calculate - NON Matching address (postcode, number) - Returning 0 - {organisation.Name}"); return(0); }
public async Task <FWTObjectID> ResolveAsync(StockportGovUK.NetStandard.Models.Verint.Organisation organisation) { _logger.LogDebug($"OrganisationService.Resolve: Attempting to resolve { organisation.Name }"); if (organisation.Address != null) { organisation.Address.UPRN = await _propertyService.CheckUPRNForId(organisation.Address); } var organisationObject = await MatchAsync(organisation); if (organisationObject != null) { return(organisationObject); } _logger.LogDebug($"OrganisationService.Resolve: No match - Creating new organisation - { organisation.Name }"); return(await CreateAsync(organisation)); }
public async Task <FWTObjectID> MatchAsync(StockportGovUK.NetStandard.Models.Verint.Organisation organisation) { _logger.LogDebug($"OrganisationService.MatchAsync - Organisation: {organisation.Name.Trim()}"); var search = new FWTPartySearch { SearchType = "organisation", Name = organisation.Name.Trim() }; if (!string.IsNullOrEmpty(organisation.Telephone)) { search.PhoneNumber = organisation.Telephone; } if (!string.IsNullOrEmpty(organisation.Email)) { search.EmailAddress = organisation.Email; } var searchResults = await _verintConnection.searchForPartyAsync(search); _logger.LogDebug($"OrganisationService.MatchAsync - SearchResults: { searchResults.FWTObjectBriefDetailsList.Count() }"); FWTObjectID matchingOrganisation = null; if (searchResults.FWTObjectBriefDetailsList.Any() && searchResults != null) { matchingOrganisation = await GetBestMatchingOrganisationAsync(searchResults.FWTObjectBriefDetailsList.Take(50).ToArray(), organisation); if (matchingOrganisation != null) { _logger.LogDebug($"OrganisationService.MatchAsync - Organisation Found: { matchingOrganisation.ObjectReference.First() }"); return(matchingOrganisation); } } _logger.LogDebug($"OrganisationService.MatchAsync - Organisation Not Found: { organisation.Name }"); return(null); }
private async Task <FWTObjectID> GetBestMatchingOrganisationAsync(FWTObjectBriefDetails[] searchResults, StockportGovUK.NetStandard.Models.Verint.Organisation organisation) { FWTOrganisation bestMatch = null; FWTObjectID bestMatchingObjectID = null; var bestMatchScore = 0; var tasks = new List <Task <retrieveOrganisationResponse> >(); foreach (var result in searchResults) { tasks.Add(Task.Run(async() => { _logger.LogDebug($"OrganisationService.GetBestMatchingOrganisationAsync - Get core Orgnisation Record : { result.ObjectID }"); return(await _verintConnection.retrieveOrganisationAsync(result.ObjectID)); })); } var results = await Task.WhenAll(tasks); results.ToList().ForEach((result) => { var orgnisationResult = result.FWTOrganisation; var score = 0; _organisationWeightings.ToList().ForEach(_ => score += _.Calculate(orgnisationResult, organisation)); _logger.LogDebug($"OrganisationService.GetBestMatchingOrganisationAsync - Organisation: { orgnisationResult.Name } Score: { score }"); if (score > bestMatchScore) { bestMatchScore = score; bestMatch = orgnisationResult; } }); if (bestMatch != null && bestMatchScore >= 3) { _logger.LogDebug($"OrganisationService.GetBestMatchingOrganisation Match Found - Organisation: {bestMatch.Name} Score: {bestMatchScore}"); // await UpdateIndividual(bestMatch, customer); bestMatchingObjectID = bestMatch.BriefDetails.ObjectID; } _logger.LogDebug($"OrganisationService.GetBestMatchingOrganisation Match Not Found"); return(bestMatchingObjectID); }