From aa4589b523cd31bb576d157af1be0f8d71e1b22a Mon Sep 17 00:00:00 2001 From: peggy-quartech Date: Wed, 11 Jun 2025 09:14:15 -0700 Subject: [PATCH 01/10] duplicate detection --- .../MDRARegistrationContract.cs | 8 +++- .../MDRARegistrationManager.cs | 44 ++++++++++++++++++- 2 files changed, 49 insertions(+), 3 deletions(-) diff --git a/src/Spd.Manager.Licence/MDRARegistrationContract.cs b/src/Spd.Manager.Licence/MDRARegistrationContract.cs index 97d2834103..bee495f56a 100644 --- a/src/Spd.Manager.Licence/MDRARegistrationContract.cs +++ b/src/Spd.Manager.Licence/MDRARegistrationContract.cs @@ -10,7 +10,7 @@ public interface IMDRARegistrationManager public Task Handle(MDRARegistrationUpdateCommand command, CancellationToken ct); } -public record MDRARegistrationNewCommand(MDRARegistrationRequest SubmitRequest, IEnumerable LicAppFileInfos) : IRequest; +public record MDRARegistrationNewCommand(MDRARegistrationNewRequest SubmitRequest, IEnumerable LicAppFileInfos) : IRequest; public record MDRARegistrationRenewCommand(MDRARegistrationRequest ChangeRequest, IEnumerable LicAppFileInfos) : IRequest; public record MDRARegistrationUpdateCommand(MDRARegistrationRequest ChangeRequest, IEnumerable LicAppFileInfos) : IRequest; @@ -32,8 +32,14 @@ public record MDRARegistrationRequest public IEnumerable? DocumentKeyCodes { get; set; } } +public record MDRARegistrationNewRequest : MDRARegistrationRequest +{ + public BooleanTypeCode HasPotentialDuplicate { get; set; } = BooleanTypeCode.No; + public bool RequireDuplicateCheck { get; set; } = true; +} public record MDRARegistrationCommandResponse { public Guid? OrgRegistrationId { get; set; } + public bool? HasPotentialDuplicate { get; set; } = null; } diff --git a/src/Spd.Manager.Licence/MDRARegistrationManager.cs b/src/Spd.Manager.Licence/MDRARegistrationManager.cs index a3e2bda41d..1386336649 100644 --- a/src/Spd.Manager.Licence/MDRARegistrationManager.cs +++ b/src/Spd.Manager.Licence/MDRARegistrationManager.cs @@ -4,6 +4,8 @@ using Spd.Resource.Repository.Application; using Spd.Resource.Repository.Document; using Spd.Resource.Repository.MDRARegistration; +using Spd.Resource.Repository.Org; +using Spd.Resource.Repository.Registration; using Spd.Utilities.Shared.Exceptions; using System.Net; @@ -17,19 +19,34 @@ internal class MDRARegistrationManager : private readonly IMapper _mapper; private readonly IMDRARegistrationRepository _repository; private readonly IDocumentRepository _documentRepository; + private readonly IOrgRepository _orgRepository; + private readonly IOrgRegistrationRepository _orgRegistrationRepository; public MDRARegistrationManager(IMapper mapper, IMDRARegistrationRepository repository, - IDocumentRepository documentRepository) + IDocumentRepository documentRepository, + IOrgRepository orgRepository, + IOrgRegistrationRepository orgRegistrationRepository) { this._mapper = mapper; this._repository = repository; this._documentRepository = documentRepository; + this._orgRepository = orgRepository; + this._orgRegistrationRepository = orgRegistrationRepository; } #region anonymous public async Task Handle(MDRARegistrationNewCommand cmd, CancellationToken ct) { + MDRARegistrationCommandResponse response; + if (cmd.SubmitRequest.RequireDuplicateCheck) + { + response = await CheckDuplicate(cmd.SubmitRequest, ct); + if (response.HasPotentialDuplicate == true) + { + return response = new MDRARegistrationCommandResponse { HasPotentialDuplicate = true }; + } + } ValidateFilesForNewApp(cmd); CreateMDRARegistrationCmd createCmd = _mapper.Map(cmd.SubmitRequest); MDRARegistrationResp respone = await _repository.CreateMDRARegistrationAsync(createCmd, ct); @@ -48,6 +65,29 @@ public async Task Handle(MDRARegistrationUpdate } #endregion + private async Task CheckDuplicate(MDRARegistrationNewRequest request, CancellationToken cancellationToken) + { + MDRARegistrationCommandResponse resp = new MDRARegistrationCommandResponse(); + var searchOrgQry = _mapper.Map(request); + bool hasDuplicateInOrg = await _orgRepository.CheckDuplicateAsync(searchOrgQry, cancellationToken); + if (hasDuplicateInOrg) + { + resp.HasPotentialDuplicate = true; + resp.DuplicateFoundIn = OrgProcess.ExistingOrganization; + return resp; + } + + var searchQry = _mapper.Map(request); + bool hasDuplicateInOrgReg = await _orgRegRepository.CheckDuplicateAsync(searchQry, cancellationToken); + if (hasDuplicateInOrgReg) + { + resp.HasPotentialDuplicate = true; + resp.DuplicateFoundIn = OrgProcess.Registration; + } + + return resp; + } + private static void ValidateFilesForNewApp(MDRARegistrationNewCommand cmd) { MDRARegistrationRequest request = cmd.SubmitRequest; @@ -63,7 +103,7 @@ private static void ValidateFilesForNewApp(MDRARegistrationNewCommand cmd) } //upload file from cache to main bucket - protected async Task UploadNewDocsAsync( + private async Task UploadNewDocsAsync( IEnumerable newFileInfos, Guid? orgRegistrationId, CancellationToken ct) From 3c03005b57ace26658e7a39080f3cb1042627917 Mon Sep 17 00:00:00 2001 From: peggy-quartech Date: Wed, 11 Jun 2025 10:17:36 -0700 Subject: [PATCH 02/10] add org reg duplicate check --- src/Spd.Manager.Licence/MDRARegistrationContract.cs | 2 +- src/Spd.Manager.Licence/MDRARegistrationManager.cs | 4 +--- src/Spd.Manager.Licence/Mappings.cs | 6 ++++++ src/Spd.Resource.Repository/Registration/Contract.cs | 3 ++- .../Registration/OrgRegistrationRepository.cs | 6 +++++- 5 files changed, 15 insertions(+), 6 deletions(-) diff --git a/src/Spd.Manager.Licence/MDRARegistrationContract.cs b/src/Spd.Manager.Licence/MDRARegistrationContract.cs index bee495f56a..c595f745b0 100644 --- a/src/Spd.Manager.Licence/MDRARegistrationContract.cs +++ b/src/Spd.Manager.Licence/MDRARegistrationContract.cs @@ -40,6 +40,6 @@ public record MDRARegistrationNewRequest : MDRARegistrationRequest public record MDRARegistrationCommandResponse { public Guid? OrgRegistrationId { get; set; } - public bool? HasPotentialDuplicate { get; set; } = null; + public bool? HasPotentialDuplicate { get; set; } } diff --git a/src/Spd.Manager.Licence/MDRARegistrationManager.cs b/src/Spd.Manager.Licence/MDRARegistrationManager.cs index 1386336649..012e140b1c 100644 --- a/src/Spd.Manager.Licence/MDRARegistrationManager.cs +++ b/src/Spd.Manager.Licence/MDRARegistrationManager.cs @@ -73,16 +73,14 @@ private async Task CheckDuplicate(MDRARegistrat if (hasDuplicateInOrg) { resp.HasPotentialDuplicate = true; - resp.DuplicateFoundIn = OrgProcess.ExistingOrganization; return resp; } var searchQry = _mapper.Map(request); - bool hasDuplicateInOrgReg = await _orgRegRepository.CheckDuplicateAsync(searchQry, cancellationToken); + bool hasDuplicateInOrgReg = await _orgRegistrationRepository.CheckDuplicateAsync(searchQry, cancellationToken); if (hasDuplicateInOrgReg) { resp.HasPotentialDuplicate = true; - resp.DuplicateFoundIn = OrgProcess.Registration; } return resp; diff --git a/src/Spd.Manager.Licence/Mappings.cs b/src/Spd.Manager.Licence/Mappings.cs index c1011d9210..f6e5ab6d39 100644 --- a/src/Spd.Manager.Licence/Mappings.cs +++ b/src/Spd.Manager.Licence/Mappings.cs @@ -20,6 +20,7 @@ using Spd.Resource.Repository.MDRARegistration; using Spd.Resource.Repository.PersonLicApplication; using Spd.Resource.Repository.PortalUser; +using Spd.Resource.Repository.Registration; using Spd.Resource.Repository.RetiredDogApp; using System.Collections.Immutable; using System.Text.Json; @@ -510,6 +511,11 @@ public Mappings() CreateMap(); CreateMap() .ForMember(d => d.Branches, opt => opt.MapFrom(s => GetBranchAddr(s.Branches))); + CreateMap() + .ForMember(d => d.GenericEmail, opt => opt.MapFrom(s => s.BizEmailAddress)) + .ForMember(d => d.MailingPostalCode, opt => opt.MapFrom(s => s.BizMailingAddress.PostalCode)) + .ForMember(d => d.RegistrationTypeCode, opt => opt.MapFrom(s => RegistrationTypeCode.MDRA)) + .ForMember(d => d.OrganizationName, opt => opt.MapFrom(s => s.BizTradeName)); } private static WorkerCategoryTypeEnum[] GetCategories(IEnumerable codes) diff --git a/src/Spd.Resource.Repository/Registration/Contract.cs b/src/Spd.Resource.Repository/Registration/Contract.cs index 02b5917718..921f937ad8 100644 --- a/src/Spd.Resource.Repository/Registration/Contract.cs +++ b/src/Spd.Resource.Repository/Registration/Contract.cs @@ -67,7 +67,8 @@ public record OrgRegistrationResult : OrgRegistration public enum RegistrationTypeCode { Employee, - Volunteer + Volunteer, + MDRA } public enum ScreeningsCountTypeCode diff --git a/src/Spd.Resource.Repository/Registration/OrgRegistrationRepository.cs b/src/Spd.Resource.Repository/Registration/OrgRegistrationRepository.cs index 8b40eb6111..781c604ab3 100644 --- a/src/Spd.Resource.Repository/Registration/OrgRegistrationRepository.cs +++ b/src/Spd.Resource.Repository/Registration/OrgRegistrationRepository.cs @@ -65,7 +65,11 @@ public async Task AddRegistrationAsync(CreateOrganizationRegistrationComma public async Task CheckDuplicateAsync(SearchRegistrationQry searchQry, CancellationToken ct) { string key; - if (searchQry.RegistrationTypeCode == RegistrationTypeCode.Employee) + if (searchQry.RegistrationTypeCode == RegistrationTypeCode.MDRA) + { + key = "MetalDealerRecycler"; + } + else if (searchQry.RegistrationTypeCode == RegistrationTypeCode.Employee) { key = $"{searchQry.RegistrationTypeCode}-{searchQry.EmployeeOrganizationTypeCode}"; } From db11e851ad4cab48cd2222f15b4edc46045496fc Mon Sep 17 00:00:00 2001 From: peggy-quartech Date: Wed, 11 Jun 2025 12:36:21 -0700 Subject: [PATCH 03/10] add org duplicate check --- src/Spd.Manager.Licence/MDRARegistrationManager.cs | 6 +++--- src/Spd.Manager.Licence/Mappings.cs | 8 +++++++- .../Controllers/MDRAController.cs | 2 +- src/Spd.Resource.Repository/Org/OrgRepository.cs | 6 +++++- 4 files changed, 16 insertions(+), 6 deletions(-) diff --git a/src/Spd.Manager.Licence/MDRARegistrationManager.cs b/src/Spd.Manager.Licence/MDRARegistrationManager.cs index 012e140b1c..150b8cac20 100644 --- a/src/Spd.Manager.Licence/MDRARegistrationManager.cs +++ b/src/Spd.Manager.Licence/MDRARegistrationManager.cs @@ -49,9 +49,9 @@ public async Task Handle(MDRARegistrationNewCom } ValidateFilesForNewApp(cmd); CreateMDRARegistrationCmd createCmd = _mapper.Map(cmd.SubmitRequest); - MDRARegistrationResp respone = await _repository.CreateMDRARegistrationAsync(createCmd, ct); - await UploadNewDocsAsync(cmd.LicAppFileInfos, respone.RegistrationId, ct); - return new MDRARegistrationCommandResponse { OrgRegistrationId = respone.RegistrationId }; + MDRARegistrationResp resp = await _repository.CreateMDRARegistrationAsync(createCmd, ct); + await UploadNewDocsAsync(cmd.LicAppFileInfos, resp.RegistrationId, ct); + return new MDRARegistrationCommandResponse { OrgRegistrationId = resp.RegistrationId }; } public async Task Handle(MDRARegistrationRenewCommand cmd, CancellationToken ct) diff --git a/src/Spd.Manager.Licence/Mappings.cs b/src/Spd.Manager.Licence/Mappings.cs index f6e5ab6d39..d4ceeb926e 100644 --- a/src/Spd.Manager.Licence/Mappings.cs +++ b/src/Spd.Manager.Licence/Mappings.cs @@ -18,6 +18,7 @@ using Spd.Resource.Repository.Licence; using Spd.Resource.Repository.LicenceFee; using Spd.Resource.Repository.MDRARegistration; +using Spd.Resource.Repository.Org; using Spd.Resource.Repository.PersonLicApplication; using Spd.Resource.Repository.PortalUser; using Spd.Resource.Repository.Registration; @@ -513,7 +514,12 @@ public Mappings() .ForMember(d => d.Branches, opt => opt.MapFrom(s => GetBranchAddr(s.Branches))); CreateMap() .ForMember(d => d.GenericEmail, opt => opt.MapFrom(s => s.BizEmailAddress)) - .ForMember(d => d.MailingPostalCode, opt => opt.MapFrom(s => s.BizMailingAddress.PostalCode)) + .ForMember(d => d.MailingPostalCode, opt => opt.MapFrom(s => s.BizMailingAddress == null ? null : s.BizMailingAddress.PostalCode)) + .ForMember(d => d.RegistrationTypeCode, opt => opt.MapFrom(s => RegistrationTypeCode.MDRA)) + .ForMember(d => d.OrganizationName, opt => opt.MapFrom(s => s.BizTradeName)); + CreateMap() + .ForMember(d => d.GenericEmail, opt => opt.MapFrom(s => s.BizEmailAddress)) + .ForMember(d => d.MailingPostalCode, opt => opt.MapFrom(s => s.BizMailingAddress == null ? null : s.BizMailingAddress.PostalCode)) .ForMember(d => d.RegistrationTypeCode, opt => opt.MapFrom(s => RegistrationTypeCode.MDRA)) .ForMember(d => d.OrganizationName, opt => opt.MapFrom(s => s.BizTradeName)); } diff --git a/src/Spd.Presentation.Licensing/Controllers/MDRAController.cs b/src/Spd.Presentation.Licensing/Controllers/MDRAController.cs index 350d60ad09..5a2054625e 100644 --- a/src/Spd.Presentation.Licensing/Controllers/MDRAController.cs +++ b/src/Spd.Presentation.Licensing/Controllers/MDRAController.cs @@ -55,7 +55,7 @@ public MDRAController(IMediator mediator, MDRARegistrationCommandResponse? response = null; if (jsonRequest.ApplicationTypeCode == ApplicationTypeCode.New) { - MDRARegistrationNewCommand command = new(jsonRequest, newDocInfos); + MDRARegistrationNewCommand command = new((MDRARegistrationNewRequest)jsonRequest, newDocInfos); response = await _mediator.Send(command, ct); } diff --git a/src/Spd.Resource.Repository/Org/OrgRepository.cs b/src/Spd.Resource.Repository/Org/OrgRepository.cs index 06943b3e76..f6ec5d6b0a 100644 --- a/src/Spd.Resource.Repository/Org/OrgRepository.cs +++ b/src/Spd.Resource.Repository/Org/OrgRepository.cs @@ -98,7 +98,11 @@ public OrgRepository(IDynamicsContextFactory ctx, IMapper mapper, ILogger CheckDuplicateAsync(SearchOrgQry searchQry, CancellationToken cancellationToken) { string key; - if (searchQry.RegistrationTypeCode == RegistrationTypeCode.Employee) + if (searchQry.RegistrationTypeCode == RegistrationTypeCode.MDRA) + { + key = "MetalDealerRecycler"; + } + else if (searchQry.RegistrationTypeCode == RegistrationTypeCode.Employee) { key = $"{searchQry.RegistrationTypeCode}-{searchQry.EmployeeOrganizationTypeCode}"; } From d2609201ae2539294b4f9ab9466e03c547d2d56b Mon Sep 17 00:00:00 2001 From: peggy-quartech Date: Wed, 11 Jun 2025 12:56:04 -0700 Subject: [PATCH 04/10] clean up --- .../Controllers/LicenceController.cs | 16 +++------------- .../Controllers/LicenceController.cs | 8 +------- 2 files changed, 4 insertions(+), 20 deletions(-) diff --git a/src/Spd.Presentation.GuideDogServiceDog/Controllers/LicenceController.cs b/src/Spd.Presentation.GuideDogServiceDog/Controllers/LicenceController.cs index c4c94aea79..ceae7bc160 100644 --- a/src/Spd.Presentation.GuideDogServiceDog/Controllers/LicenceController.cs +++ b/src/Spd.Presentation.GuideDogServiceDog/Controllers/LicenceController.cs @@ -76,13 +76,7 @@ public async Task> GetApplicantGdsdCertificati LicenceResponse? response = await _mediator.Send(new LicenceQuery(licenceNumber, accessCode)); Guid latestAppId = Guid.Empty; - if (response?.ServiceTypeCode == ServiceTypeCode.SecurityWorkerLicence) - latestAppId = await _mediator.Send(new GetLatestWorkerLicenceApplicationIdQuery((Guid)response.LicenceHolderId)); - else if (response?.ServiceTypeCode == ServiceTypeCode.SecurityBusinessLicence) - return response; - else if (response?.ServiceTypeCode == ServiceTypeCode.BodyArmourPermit || response?.ServiceTypeCode == ServiceTypeCode.ArmouredVehiclePermit) - latestAppId = await _mediator.Send(new GetLatestPermitApplicationIdQuery((Guid)response.LicenceHolderId, (ServiceTypeCode)response.ServiceTypeCode)); - else if (response?.ServiceTypeCode == ServiceTypeCode.GDSDTeamCertification + if (response?.ServiceTypeCode == ServiceTypeCode.GDSDTeamCertification || response?.ServiceTypeCode == ServiceTypeCode.DogTrainerCertification || response?.ServiceTypeCode == ServiceTypeCode.RetiredServiceDogCertification) { @@ -92,14 +86,10 @@ public async Task> GetApplicantGdsdCertificati SetValueToResponseCookie(SessionConstants.AnonymousApplicationContext, str); return response; } - - if (response != null) + else { - SetValueToResponseCookie(SessionConstants.AnonymousApplicantContext, response.LicenceHolderId.Value.ToString()); - string str = $"{response.LicenceId}*{latestAppId}"; - SetValueToResponseCookie(SessionConstants.AnonymousApplicationContext, str); + throw new ApiException(HttpStatusCode.BadRequest, "Invalid licence type."); } - return response; } /// diff --git a/src/Spd.Presentation.Licensing/Controllers/LicenceController.cs b/src/Spd.Presentation.Licensing/Controllers/LicenceController.cs index b71838d8c9..879488969f 100644 --- a/src/Spd.Presentation.Licensing/Controllers/LicenceController.cs +++ b/src/Spd.Presentation.Licensing/Controllers/LicenceController.cs @@ -17,8 +17,6 @@ public class LicenceController : SpdLicenceControllerBase { private readonly IMediator _mediator; private static List PersonalSecurityLicences = new() { ServiceTypeCode.BodyArmourPermit, ServiceTypeCode.ArmouredVehiclePermit, ServiceTypeCode.SecurityWorkerLicence }; - private static List GdsdCertifications = new() { ServiceTypeCode.GDSDTeamCertification, ServiceTypeCode.RetiredServiceDogCertification, ServiceTypeCode.DogTrainerCertification }; - public LicenceController( IMediator mediator, IRecaptchaVerificationService recaptchaVerificationService, @@ -102,11 +100,7 @@ public async Task> GetApplicantLicences([FromR || response?.ServiceTypeCode == ServiceTypeCode.DogTrainerCertification || response?.ServiceTypeCode == ServiceTypeCode.RetiredServiceDogCertification) { - //gdsd, dog - SetValueToResponseCookie(SessionConstants.AnonymousApplicantContext, response.LicenceHolderId.Value.ToString()); - string str = $"{response.LicenceId}*{response.LicenceAppId}"; - SetValueToResponseCookie(SessionConstants.AnonymousApplicationContext, str); - return response; + throw new ApiException(HttpStatusCode.BadRequest, "Invalid licence type."); } if (response != null) From b20f6b1d5e85f662e8095df135f68bed4f947507 Mon Sep 17 00:00:00 2001 From: peggy-quartech Date: Thu, 12 Jun 2025 11:14:15 -0700 Subject: [PATCH 05/10] duplicate --- .../MDRARegistrationContract.cs | 4 ++- .../MDRARegistrationManager.cs | 31 ++++++++----------- .../MDRARegistration/Contract.cs | 2 +- .../MDRARegistration/Mappings.cs | 1 + 4 files changed, 18 insertions(+), 20 deletions(-) diff --git a/src/Spd.Manager.Licence/MDRARegistrationContract.cs b/src/Spd.Manager.Licence/MDRARegistrationContract.cs index c595f745b0..4976c15c9d 100644 --- a/src/Spd.Manager.Licence/MDRARegistrationContract.cs +++ b/src/Spd.Manager.Licence/MDRARegistrationContract.cs @@ -19,7 +19,7 @@ public record MDRARegistrationRequest public ApplicationTypeCode ApplicationTypeCode { get; set; } public ApplicationOriginTypeCode ApplicationOriginTypeCode { get; set; } = ApplicationOriginTypeCode.WebForm; public string BizOwnerSurname { get; set; } - public string BizOwnerGivenNames { get; set; } + public string? BizOwnerGivenNames { get; set; } public string? BizLegalName { get; set; } public string? BizTradeName { get; set; } public Address? BizMailingAddress { get; set; } @@ -40,6 +40,8 @@ public record MDRARegistrationNewRequest : MDRARegistrationRequest public record MDRARegistrationCommandResponse { public Guid? OrgRegistrationId { get; set; } + + //this = true, then fe show message that "if user still want to proceed", if user response with yes, set HasPotentialDuplicate=true, RequireDuplicateCheck= false. public bool? HasPotentialDuplicate { get; set; } } diff --git a/src/Spd.Manager.Licence/MDRARegistrationManager.cs b/src/Spd.Manager.Licence/MDRARegistrationManager.cs index 150b8cac20..ed05757a9c 100644 --- a/src/Spd.Manager.Licence/MDRARegistrationManager.cs +++ b/src/Spd.Manager.Licence/MDRARegistrationManager.cs @@ -39,16 +39,19 @@ public MDRARegistrationManager(IMapper mapper, public async Task Handle(MDRARegistrationNewCommand cmd, CancellationToken ct) { MDRARegistrationCommandResponse response; + bool? hasSilentDuplicate = null; if (cmd.SubmitRequest.RequireDuplicateCheck) { - response = await CheckDuplicate(cmd.SubmitRequest, ct); - if (response.HasPotentialDuplicate == true) + bool hasDuplicate; + (hasDuplicate, hasSilentDuplicate) = await CheckDuplicate(cmd.SubmitRequest, ct); + if (hasDuplicate) { return response = new MDRARegistrationCommandResponse { HasPotentialDuplicate = true }; } } ValidateFilesForNewApp(cmd); CreateMDRARegistrationCmd createCmd = _mapper.Map(cmd.SubmitRequest); + createCmd.HasPotentialDuplicate = cmd.SubmitRequest.HasPotentialDuplicate == BooleanTypeCode.Yes || hasSilentDuplicate == true; MDRARegistrationResp resp = await _repository.CreateMDRARegistrationAsync(createCmd, ct); await UploadNewDocsAsync(cmd.LicAppFileInfos, resp.RegistrationId, ct); return new MDRARegistrationCommandResponse { OrgRegistrationId = resp.RegistrationId }; @@ -65,25 +68,17 @@ public async Task Handle(MDRARegistrationUpdate } #endregion - private async Task CheckDuplicate(MDRARegistrationNewRequest request, CancellationToken cancellationToken) + private async Task<(bool HasPotentialDuplicate, bool HasSilentPotentialDuplicate)> CheckDuplicate(MDRARegistrationNewRequest request, CancellationToken cancellationToken) { - MDRARegistrationCommandResponse resp = new MDRARegistrationCommandResponse(); - var searchOrgQry = _mapper.Map(request); - bool hasDuplicateInOrg = await _orgRepository.CheckDuplicateAsync(searchOrgQry, cancellationToken); - if (hasDuplicateInOrg) - { - resp.HasPotentialDuplicate = true; - return resp; - } - + bool hasPotentialDuplicate = false; + bool hasSilentPotentialDuplicate = false; var searchQry = _mapper.Map(request); - bool hasDuplicateInOrgReg = await _orgRegistrationRepository.CheckDuplicateAsync(searchQry, cancellationToken); - if (hasDuplicateInOrgReg) - { - resp.HasPotentialDuplicate = true; - } + hasPotentialDuplicate = await _orgRegistrationRepository.CheckDuplicateAsync(searchQry, cancellationToken); + + var searchOrgQry = _mapper.Map(request); + hasSilentPotentialDuplicate = await _orgRepository.CheckDuplicateAsync(searchOrgQry, cancellationToken); - return resp; + return (hasPotentialDuplicate, hasSilentPotentialDuplicate); } private static void ValidateFilesForNewApp(MDRARegistrationNewCommand cmd) diff --git a/src/Spd.Resource.Repository/MDRARegistration/Contract.cs b/src/Spd.Resource.Repository/MDRARegistration/Contract.cs index 3fbc38853a..5ecd4256c2 100644 --- a/src/Spd.Resource.Repository/MDRARegistration/Contract.cs +++ b/src/Spd.Resource.Repository/MDRARegistration/Contract.cs @@ -25,6 +25,6 @@ public record CreateMDRARegistrationCmd public string? BizEmailAddress { get; set; } public IEnumerable? Branches { get; set; } public IEnumerable? DocumentKeyCodes { get; set; } - + public bool? HasPotentialDuplicate { get; set; } } diff --git a/src/Spd.Resource.Repository/MDRARegistration/Mappings.cs b/src/Spd.Resource.Repository/MDRARegistration/Mappings.cs index 82bbc7fd4b..7e91266822 100644 --- a/src/Spd.Resource.Repository/MDRARegistration/Mappings.cs +++ b/src/Spd.Resource.Repository/MDRARegistration/Mappings.cs @@ -14,6 +14,7 @@ public Mappings() .ForMember(d => d.spd_authorizedcontactsurname, opt => opt.MapFrom(s => s.BizOwnerSurname)) .ForMember(d => d.spd_organizationlegalname, opt => opt.MapFrom(s => s.BizLegalName)) .ForMember(d => d.spd_organizationname, opt => opt.MapFrom(s => s.BizTradeName)) + .ForMember(d => d.spd_potentialduplicate, opt => opt.MapFrom(s => SharedMappingFuncs.GetYesNo(s.HasPotentialDuplicate))) .ForMember(d => d.spd_email, opt => opt.MapFrom(s => s.BizEmailAddress)) .ForMember(d => d.spd_phonenumber, opt => opt.MapFrom(s => s.BizPhoneNumber)) .ForMember(d => d.spd_declaration, opt => opt.MapFrom(s => true)) From c280ae799f04d7d81be2fce5d394b7ce75510bcf Mon Sep 17 00:00:00 2001 From: peggy-quartech Date: Thu, 12 Jun 2025 12:06:21 -0700 Subject: [PATCH 06/10] temp --- src/Spd.Manager.Licence/MDRARegistrationContract.cs | 4 ++++ src/Spd.Manager.Licence/MDRARegistrationManager.cs | 6 ++++++ .../Controllers/LicenceController.cs | 2 ++ src/Spd.Resource.Repository/MDRARegistration/Contract.cs | 1 - src/Spd.Resource.Repository/Org/Contract.cs | 1 + src/Spd.Resource.Repository/Org/Mappings.cs | 1 + 6 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/Spd.Manager.Licence/MDRARegistrationContract.cs b/src/Spd.Manager.Licence/MDRARegistrationContract.cs index bcee939fd4..dc36fa8997 100644 --- a/src/Spd.Manager.Licence/MDRARegistrationContract.cs +++ b/src/Spd.Manager.Licence/MDRARegistrationContract.cs @@ -8,11 +8,14 @@ public interface IMDRARegistrationManager public Task Handle(MDRARegistrationNewCommand command, CancellationToken ct); public Task Handle(MDRARegistrationRenewCommand command, CancellationToken ct); public Task Handle(MDRARegistrationUpdateCommand command, CancellationToken ct); + public Task Handle(GetMDRARegistrationIdQuery query, CancellationToken ct); + } public record MDRARegistrationNewCommand(MDRARegistrationNewRequest SubmitRequest, IEnumerable LicAppFileInfos) : IRequest; public record MDRARegistrationRenewCommand(MDRARegistrationRequest ChangeRequest, IEnumerable LicAppFileInfos) : IRequest; public record MDRARegistrationUpdateCommand(MDRARegistrationRequest ChangeRequest, IEnumerable LicAppFileInfos) : IRequest; +public record GetMDRARegistrationIdQuery(Guid BizId) : IRequest; public record MDRARegistrationRequest { @@ -46,3 +49,4 @@ public record MDRARegistrationCommandResponse public bool? HasPotentialDuplicate { get; set; } } + diff --git a/src/Spd.Manager.Licence/MDRARegistrationManager.cs b/src/Spd.Manager.Licence/MDRARegistrationManager.cs index 408cf6159c..a3ed52d818 100644 --- a/src/Spd.Manager.Licence/MDRARegistrationManager.cs +++ b/src/Spd.Manager.Licence/MDRARegistrationManager.cs @@ -14,6 +14,7 @@ internal class MDRARegistrationManager : IRequestHandler, IRequestHandler, IRequestHandler, + IRequestHandler, IMDRARegistrationManager { private readonly IMapper _mapper; @@ -66,6 +67,11 @@ public async Task Handle(MDRARegistrationUpdate { return new MDRARegistrationCommandResponse { OrgRegistrationId = Guid.Empty }; } + + public async Task Handle(Get cmd, CancellationToken ct) + { + return new MDRARegistrationCommandResponse { OrgRegistrationId = Guid.Empty }; + } #endregion private async Task<(bool HasPotentialDuplicate, bool HasSilentPotentialDuplicate)> CheckDuplicate(MDRARegistrationNewRequest request, CancellationToken cancellationToken) diff --git a/src/Spd.Presentation.Licensing/Controllers/LicenceController.cs b/src/Spd.Presentation.Licensing/Controllers/LicenceController.cs index 879488969f..3fc70bedb7 100644 --- a/src/Spd.Presentation.Licensing/Controllers/LicenceController.cs +++ b/src/Spd.Presentation.Licensing/Controllers/LicenceController.cs @@ -94,6 +94,8 @@ public async Task> GetApplicantLicences([FromR latestAppId = await _mediator.Send(new GetLatestWorkerLicenceApplicationIdQuery((Guid)response.LicenceHolderId)); else if (response?.ServiceTypeCode == ServiceTypeCode.SecurityBusinessLicence) return response; + else if (response?.ServiceTypeCode == ServiceTypeCode.MDRA) + latestAppId = await _mediator.Send(new GetLatestWorkerLicenceApplicationIdQuery((Guid)response.LicenceHolderId)) else if (response?.ServiceTypeCode == ServiceTypeCode.BodyArmourPermit || response?.ServiceTypeCode == ServiceTypeCode.ArmouredVehiclePermit) latestAppId = await _mediator.Send(new GetLatestPermitApplicationIdQuery((Guid)response.LicenceHolderId, (ServiceTypeCode)response.ServiceTypeCode)); else if (response?.ServiceTypeCode == ServiceTypeCode.GDSDTeamCertification diff --git a/src/Spd.Resource.Repository/MDRARegistration/Contract.cs b/src/Spd.Resource.Repository/MDRARegistration/Contract.cs index 4185f8a971..0f5782aa68 100644 --- a/src/Spd.Resource.Repository/MDRARegistration/Contract.cs +++ b/src/Spd.Resource.Repository/MDRARegistration/Contract.cs @@ -8,7 +8,6 @@ public interface IMDRARegistrationRepository } public record MDRARegistrationResp(Guid RegistrationId); - public record CreateMDRARegistrationCmd { public ApplicationTypeEnum ApplicationTypeCode { get; set; } diff --git a/src/Spd.Resource.Repository/Org/Contract.cs b/src/Spd.Resource.Repository/Org/Contract.cs index 2ce71a820d..2e3de68235 100644 --- a/src/Spd.Resource.Repository/Org/Contract.cs +++ b/src/Spd.Resource.Repository/Org/Contract.cs @@ -53,6 +53,7 @@ public record Org public string? AddressProvince { get; set; } public EmployeeInteractionTypeCode? EmployeeInteractionType { get; set; } public bool HasInvoiceSupport { get; set; } + public Guid? OrgRegistrationId { get; set; } } public record OrgResult : Org { diff --git a/src/Spd.Resource.Repository/Org/Mappings.cs b/src/Spd.Resource.Repository/Org/Mappings.cs index c863ebaa51..7ea430fe62 100644 --- a/src/Spd.Resource.Repository/Org/Mappings.cs +++ b/src/Spd.Resource.Repository/Org/Mappings.cs @@ -26,6 +26,7 @@ public Mappings() .ForMember(d => d.PayerPreference, opt => opt.MapFrom(s => GetPayerPreferenceType(s.spd_payerpreference))) .ForMember(d => d.ContractorsNeedVulnerableSectorScreening, opt => opt.MapFrom(s => GetBooleanType(s.spd_havecontractors))) .ForMember(d => d.EmployeeInteractionType, opt => opt.MapFrom(s => GetEmployeeInteractionCode(s.spd_workswith))) + .ForMember(d => d.OrgRegistrationId, opt => opt.MapFrom(s => s._spd_orgregistrationid_value)) .ForMember(d => d.LicenseesNeedVulnerableSectorScreening, opt => opt.MapFrom(s => GetBooleanType(s.spd_havelicenseesorregistrants))); _ = CreateMap() From 3e450f3775ce62dff409e3c033efbdb00ab7e1a3 Mon Sep 17 00:00:00 2001 From: peggy-quartech Date: Thu, 12 Jun 2025 12:15:44 -0700 Subject: [PATCH 07/10] fix --- src/Spd.Manager.Licence/MDRARegistrationContract.cs | 2 +- src/Spd.Manager.Licence/MDRARegistrationManager.cs | 7 ++++--- .../Controllers/LicenceController.cs | 4 +++- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/Spd.Manager.Licence/MDRARegistrationContract.cs b/src/Spd.Manager.Licence/MDRARegistrationContract.cs index dc36fa8997..1fa7248a1f 100644 --- a/src/Spd.Manager.Licence/MDRARegistrationContract.cs +++ b/src/Spd.Manager.Licence/MDRARegistrationContract.cs @@ -15,7 +15,7 @@ public interface IMDRARegistrationManager public record MDRARegistrationNewCommand(MDRARegistrationNewRequest SubmitRequest, IEnumerable LicAppFileInfos) : IRequest; public record MDRARegistrationRenewCommand(MDRARegistrationRequest ChangeRequest, IEnumerable LicAppFileInfos) : IRequest; public record MDRARegistrationUpdateCommand(MDRARegistrationRequest ChangeRequest, IEnumerable LicAppFileInfos) : IRequest; -public record GetMDRARegistrationIdQuery(Guid BizId) : IRequest; +public record GetMDRARegistrationIdQuery(Guid BizId) : IRequest; public record MDRARegistrationRequest { diff --git a/src/Spd.Manager.Licence/MDRARegistrationManager.cs b/src/Spd.Manager.Licence/MDRARegistrationManager.cs index a3ed52d818..975c99bbc0 100644 --- a/src/Spd.Manager.Licence/MDRARegistrationManager.cs +++ b/src/Spd.Manager.Licence/MDRARegistrationManager.cs @@ -14,7 +14,7 @@ internal class MDRARegistrationManager : IRequestHandler, IRequestHandler, IRequestHandler, - IRequestHandler, + IRequestHandler, IMDRARegistrationManager { private readonly IMapper _mapper; @@ -68,9 +68,10 @@ public async Task Handle(MDRARegistrationUpdate return new MDRARegistrationCommandResponse { OrgRegistrationId = Guid.Empty }; } - public async Task Handle(Get cmd, CancellationToken ct) + public async Task Handle(GetMDRARegistrationIdQuery cmd, CancellationToken ct) { - return new MDRARegistrationCommandResponse { OrgRegistrationId = Guid.Empty }; + OrgQryResult org = (OrgQryResult)await _orgRepository.QueryOrgAsync(new OrgByIdentifierQry(cmd.BizId), ct); + return org.OrgResult.OrgRegistrationId; } #endregion diff --git a/src/Spd.Presentation.Licensing/Controllers/LicenceController.cs b/src/Spd.Presentation.Licensing/Controllers/LicenceController.cs index 3fc70bedb7..ee13c46975 100644 --- a/src/Spd.Presentation.Licensing/Controllers/LicenceController.cs +++ b/src/Spd.Presentation.Licensing/Controllers/LicenceController.cs @@ -95,7 +95,9 @@ public async Task> GetApplicantLicences([FromR else if (response?.ServiceTypeCode == ServiceTypeCode.SecurityBusinessLicence) return response; else if (response?.ServiceTypeCode == ServiceTypeCode.MDRA) - latestAppId = await _mediator.Send(new GetLatestWorkerLicenceApplicationIdQuery((Guid)response.LicenceHolderId)) + { + latestAppId = await _mediator.Send(new GetMDRARegistrationIdQuery((Guid)response.LicenceHolderId)) ?? Guid.Empty; + } else if (response?.ServiceTypeCode == ServiceTypeCode.BodyArmourPermit || response?.ServiceTypeCode == ServiceTypeCode.ArmouredVehiclePermit) latestAppId = await _mediator.Send(new GetLatestPermitApplicationIdQuery((Guid)response.LicenceHolderId, (ServiceTypeCode)response.ServiceTypeCode)); else if (response?.ServiceTypeCode == ServiceTypeCode.GDSDTeamCertification From 487a4e3941770249c70c69bb67d4e91244efe602 Mon Sep 17 00:00:00 2001 From: peggy-quartech Date: Thu, 12 Jun 2025 12:29:49 -0700 Subject: [PATCH 08/10] fix --- src/Spd.Manager.Licence/MDRARegistrationContract.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Spd.Manager.Licence/MDRARegistrationContract.cs b/src/Spd.Manager.Licence/MDRARegistrationContract.cs index 1fa7248a1f..bdb2168f50 100644 --- a/src/Spd.Manager.Licence/MDRARegistrationContract.cs +++ b/src/Spd.Manager.Licence/MDRARegistrationContract.cs @@ -8,7 +8,7 @@ public interface IMDRARegistrationManager public Task Handle(MDRARegistrationNewCommand command, CancellationToken ct); public Task Handle(MDRARegistrationRenewCommand command, CancellationToken ct); public Task Handle(MDRARegistrationUpdateCommand command, CancellationToken ct); - public Task Handle(GetMDRARegistrationIdQuery query, CancellationToken ct); + public Task Handle(GetMDRARegistrationIdQuery query, CancellationToken ct); } From b16b0908c56488c99408c9426977a37a0f1a4e77 Mon Sep 17 00:00:00 2001 From: peggy-quartech Date: Thu, 12 Jun 2025 14:47:16 -0700 Subject: [PATCH 09/10] make licence lookup working --- .../Controllers/LicenceController.cs | 2 +- .../Controllers/MDRAController.cs | 10 +++++ .../Licence/Mappings.cs | 37 ++++++++++++++----- .../DynamicsContextLookupHelpers.cs | 2 +- 4 files changed, 40 insertions(+), 11 deletions(-) diff --git a/src/Spd.Presentation.Licensing/Controllers/LicenceController.cs b/src/Spd.Presentation.Licensing/Controllers/LicenceController.cs index ee13c46975..c6d5a19392 100644 --- a/src/Spd.Presentation.Licensing/Controllers/LicenceController.cs +++ b/src/Spd.Presentation.Licensing/Controllers/LicenceController.cs @@ -74,7 +74,7 @@ public async Task> GetApplicantLicences([FromR /// /// Get latest licence by licence number with google recaptcha for anonymous - /// Example: http://localhost:5114/api/licence-lookup/TEST-02?accessCode=TEST + /// Example: http://localhost:5114/api/licence-lookup/anonymous/TEST-02?accessCode=TEST /// /// /// diff --git a/src/Spd.Presentation.Licensing/Controllers/MDRAController.cs b/src/Spd.Presentation.Licensing/Controllers/MDRAController.cs index 5a2054625e..b6c5b7ef98 100644 --- a/src/Spd.Presentation.Licensing/Controllers/MDRAController.cs +++ b/src/Spd.Presentation.Licensing/Controllers/MDRAController.cs @@ -32,6 +32,16 @@ public MDRAController(IMediator mediator, #region anonymous + [Route("api/mdra-registration")] + [HttpGet] + public async Task GetMDRARegistraionAnonymous() + { + + //string swlApplicationId = GetInfoFromRequestCookie(SessionConstants.AnonymousApplicantContext); + //return await _mediator.Send(new GetWorkerLicenceQuery(Guid.Parse(swlApplicationId))); + return null; + } + /// /// Submit MDRA registration Anonymously /// After fe done with the uploading files, then fe do post with json payload, inside payload, it needs to contain an array of keycode for the files. diff --git a/src/Spd.Resource.Repository/Licence/Mappings.cs b/src/Spd.Resource.Repository/Licence/Mappings.cs index cfabaa14fb..05f9afe4a6 100644 --- a/src/Spd.Resource.Repository/Licence/Mappings.cs +++ b/src/Spd.Resource.Repository/Licence/Mappings.cs @@ -7,23 +7,24 @@ namespace Spd.Resource.Repository.Licence { internal class Mappings : Profile { + private static List OrgServiceTypes = new List { ServiceTypeEnum.MDRA, ServiceTypeEnum.SecurityBusinessLicence }; public Mappings() { _ = CreateMap() .ForMember(d => d.LicenceId, opt => opt.MapFrom(s => s.spd_licenceid)) - .ForMember(d => d.LicenceAppId, opt => opt.MapFrom(s => s.spd_CaseId._spd_applicationid_value)) - .ForMember(d => d.LicenceHolderId, opt => opt.MapFrom(s => SharedMappingFuncs.GetServiceType(s._spd_licencetype_value) == ServiceTypeEnum.SecurityBusinessLicence ? s.spd_LicenceHolder_account.accountid : s.spd_LicenceHolder_contact.contactid)) + .ForMember(d => d.LicenceAppId, opt => opt.MapFrom(s => s.spd_CaseId == null ? null : s.spd_CaseId._spd_applicationid_value)) + .ForMember(d => d.LicenceHolderId, opt => opt.MapFrom(s => GetLicenceHolderId(s))) .ForMember(d => d.LicenceNumber, opt => opt.MapFrom(s => s.spd_licencenumber)) .ForMember(d => d.ExpiryDate, opt => opt.MapFrom(s => SharedMappingFuncs.GetDateOnlyFromDateTimeOffset(s.spd_expirydate))) .ForMember(d => d.ServiceTypeCode, opt => opt.MapFrom(s => SharedMappingFuncs.GetServiceType(s._spd_licencetype_value))) .ForMember(d => d.LicenceTermCode, opt => opt.MapFrom(s => SharedMappingFuncs.GetLicenceTermEnum(s.spd_licenceterm))) - .ForMember(d => d.BizLegalName, opt => opt.MapFrom(s => SharedMappingFuncs.GetServiceType(s._spd_licencetype_value) == ServiceTypeEnum.SecurityBusinessLicence ? s.spd_LicenceHolder_account.spd_organizationlegalname : null)) - .ForMember(d => d.LicenceHolderDateOfBirth, opt => opt.MapFrom(s => SharedMappingFuncs.GetServiceType(s._spd_licencetype_value) == ServiceTypeEnum.SecurityBusinessLicence ? null : s.spd_LicenceHolder_contact.birthdate)) - .ForMember(d => d.LicenceHolderFirstName, opt => opt.MapFrom(s => SharedMappingFuncs.GetServiceType(s._spd_licencetype_value) == ServiceTypeEnum.SecurityBusinessLicence ? s.spd_LicenceHolder_account.name : s.spd_LicenceHolder_contact.firstname)) + .ForMember(d => d.BizLegalName, opt => opt.MapFrom(s => GetBizLegalName(s))) + .ForMember(d => d.LicenceHolderDateOfBirth, opt => opt.MapFrom(s => OrgServiceTypes.Contains(SharedMappingFuncs.GetServiceType(s._spd_licencetype_value).Value) ? null : s.spd_LicenceHolder_contact.birthdate)) + .ForMember(d => d.LicenceHolderFirstName, opt => opt.MapFrom(s => OrgServiceTypes.Contains(SharedMappingFuncs.GetServiceType(s._spd_licencetype_value).Value) ? s.spd_LicenceHolder_account.name : s.spd_LicenceHolder_contact.firstname)) .ForMember(d => d.LicenceStatusCode, opt => opt.MapFrom(s => GetLicenceStatusEnum(s.statuscode))) - .ForMember(d => d.LicenceHolderLastName, opt => opt.MapFrom(s => SharedMappingFuncs.GetServiceType(s._spd_licencetype_value) == ServiceTypeEnum.SecurityBusinessLicence ? null : s.spd_LicenceHolder_contact.lastname)) - .ForMember(d => d.LicenceHolderMiddleName1, opt => opt.MapFrom(s => SharedMappingFuncs.GetServiceType(s._spd_licencetype_value) == ServiceTypeEnum.SecurityBusinessLicence ? null : s.spd_LicenceHolder_contact.spd_middlename1)) + .ForMember(d => d.LicenceHolderLastName, opt => opt.MapFrom(s => OrgServiceTypes.Contains(SharedMappingFuncs.GetServiceType(s._spd_licencetype_value).Value) ? null : s.spd_LicenceHolder_contact.lastname)) + .ForMember(d => d.LicenceHolderMiddleName1, opt => opt.MapFrom(s => OrgServiceTypes.Contains(SharedMappingFuncs.GetServiceType(s._spd_licencetype_value).Value) ? null : s.spd_LicenceHolder_contact.spd_middlename1)) .ForMember(d => d.NameOnCard, opt => opt.MapFrom(s => s.spd_nameonlicence)) .ForMember(d => d.CreatedOn, opt => opt.MapFrom(s => s.createdon)) .ForMember(d => d.PermitOtherRequiredReason, opt => opt.MapFrom(s => s.spd_permitpurposeother)) @@ -35,7 +36,7 @@ public Mappings() .ForMember(d => d.Rationale, opt => opt.MapFrom(s => s.spd_rationale)) .ForMember(d => d.PhotoDocumentUrlId, opt => opt.MapFrom(s => s._spd_photographid_value)) .ForMember(d => d.PrintingPreviewJobId, opt => opt.MapFrom(s => s.spd_bcmpjobid)) - .ForMember(d => d.IsTemporary, opt => opt.MapFrom(s => SharedMappingFuncs.GetBool(s.spd_temporarylicence))) + .ForMember(d => d.IsTemporary, opt => opt.MapFrom(s => SharedMappingFuncs.GetBool(s.spd_temporarylicence)))// .ForMember(d => d.PermitPurposeEnums, opt => opt.MapFrom(s => SharedMappingFuncs.GetPermitPurposeEnums(s.spd_permitpurpose))) .ForMember(d => d.CategoryCodes, opt => opt.MapFrom(s => GetCategoryCodes(s.spd_spd_licence_spd_caselicencecategory_licenceid.ToList()))) .ForMember(d => d.BizTypeCode, opt => opt.MapFrom(s => GetBizType(s))) @@ -47,7 +48,7 @@ public Mappings() .ForMember(d => d.CarryAndUseRestraints, opt => opt.MapFrom(s => SharedMappingFuncs.GetBool(s.spd_requestrestraints))) .ForMember(d => d.UseDogs, opt => opt.MapFrom(s => SharedMappingFuncs.GetBool(s.spd_requestdogs))) .ForMember(d => d.Conditions, opt => opt.MapFrom(s => s.spd_spd_licence_spd_licencecondition)) - .ForMember(d => d.GDSDTeamId, opt => opt.MapFrom(s => s.spd_licence_spd_dogteam_LicenceId.FirstOrDefault().spd_dogteamid)) + .ForMember(d => d.GDSDTeamId, opt => opt.MapFrom(s => s.spd_licence_spd_dogteam_LicenceId.FirstOrDefault() == null ? null : s.spd_licence_spd_dogteam_LicenceId.FirstOrDefault().spd_dogteamid)) .ForMember(d => d.IsDogAssessor, opt => opt.MapFrom(s => SharedMappingFuncs.GetBool(s.spd_outd))) ; @@ -107,5 +108,23 @@ internal static BizTypeEnum GetBizType(spd_licence s) else return SharedMappingFuncs.GetBizTypeEnum(bizTypeInt).Value; } + + internal Guid? GetLicenceHolderId(spd_licence lic) + { + ServiceTypeEnum? servicetype = SharedMappingFuncs.GetServiceType(lic._spd_licencetype_value); + if (servicetype == ServiceTypeEnum.SecurityBusinessLicence || servicetype == ServiceTypeEnum.MDRA) + return lic.spd_LicenceHolder_account.accountid; + else + return lic.spd_LicenceHolder_contact.contactid; + } + + internal string? GetBizLegalName(spd_licence lic) + { + ServiceTypeEnum? servicetype = SharedMappingFuncs.GetServiceType(lic._spd_licencetype_value); + if (servicetype == ServiceTypeEnum.SecurityBusinessLicence || servicetype == ServiceTypeEnum.MDRA) + return lic.spd_LicenceHolder_account.spd_organizationlegalname; + else + return null; + } } } diff --git a/src/Spd.Utilities.Dynamics/DynamicsContextLookupHelpers.cs b/src/Spd.Utilities.Dynamics/DynamicsContextLookupHelpers.cs index 425cb37005..f7db701b5c 100644 --- a/src/Spd.Utilities.Dynamics/DynamicsContextLookupHelpers.cs +++ b/src/Spd.Utilities.Dynamics/DynamicsContextLookupHelpers.cs @@ -50,7 +50,7 @@ public static (string?, string?) GetTypeFromTypeId(Guid? orgTypeId) if (orgTypeId == null) return (null, null); string key = LookupOrganizationTypeKey((Guid)orgTypeId); var str = key.Split("-"); - if (str.Length == 0 || str.Length > 2) return (null, null); + if (str.Length != 2) return (null, null); if (str[0].Equals("Volunteer", StringComparison.InvariantCultureIgnoreCase)) { return (null, str[1]); From ea816043767e87376995dcf5caef792a98416fec Mon Sep 17 00:00:00 2001 From: peggy-quartech Date: Thu, 12 Jun 2025 14:52:36 -0700 Subject: [PATCH 10/10] fix --- src/Spd.Manager.Licence/MDRARegistrationContract.cs | 9 +++------ src/Spd.Manager.Licence/MDRARegistrationManager.cs | 2 +- src/Spd.Manager.Licence/Mappings.cs | 4 ++-- .../Controllers/MDRAController.cs | 2 +- 4 files changed, 7 insertions(+), 10 deletions(-) diff --git a/src/Spd.Manager.Licence/MDRARegistrationContract.cs b/src/Spd.Manager.Licence/MDRARegistrationContract.cs index bdb2168f50..8ef3476a78 100644 --- a/src/Spd.Manager.Licence/MDRARegistrationContract.cs +++ b/src/Spd.Manager.Licence/MDRARegistrationContract.cs @@ -12,7 +12,7 @@ public interface IMDRARegistrationManager } -public record MDRARegistrationNewCommand(MDRARegistrationNewRequest SubmitRequest, IEnumerable LicAppFileInfos) : IRequest; +public record MDRARegistrationNewCommand(MDRARegistrationRequest SubmitRequest, IEnumerable LicAppFileInfos) : IRequest; public record MDRARegistrationRenewCommand(MDRARegistrationRequest ChangeRequest, IEnumerable LicAppFileInfos) : IRequest; public record MDRARegistrationUpdateCommand(MDRARegistrationRequest ChangeRequest, IEnumerable LicAppFileInfos) : IRequest; public record GetMDRARegistrationIdQuery(Guid BizId) : IRequest; @@ -34,13 +34,10 @@ public record MDRARegistrationRequest public string? BizEmailAddress { get; set; } public IEnumerable? Branches { get; set; } public IEnumerable? DocumentKeyCodes { get; set; } + public BooleanTypeCode HasPotentialDuplicate { get; set; } = BooleanTypeCode.No; //only for new + public bool RequireDuplicateCheck { get; set; } = true; //only for new } -public record MDRARegistrationNewRequest : MDRARegistrationRequest -{ - public BooleanTypeCode HasPotentialDuplicate { get; set; } = BooleanTypeCode.No; - public bool RequireDuplicateCheck { get; set; } = true; -} public record MDRARegistrationCommandResponse { public Guid? OrgRegistrationId { get; set; } diff --git a/src/Spd.Manager.Licence/MDRARegistrationManager.cs b/src/Spd.Manager.Licence/MDRARegistrationManager.cs index 975c99bbc0..cf35b94800 100644 --- a/src/Spd.Manager.Licence/MDRARegistrationManager.cs +++ b/src/Spd.Manager.Licence/MDRARegistrationManager.cs @@ -75,7 +75,7 @@ public async Task Handle(MDRARegistrationUpdate } #endregion - private async Task<(bool HasPotentialDuplicate, bool HasSilentPotentialDuplicate)> CheckDuplicate(MDRARegistrationNewRequest request, CancellationToken cancellationToken) + private async Task<(bool HasPotentialDuplicate, bool HasSilentPotentialDuplicate)> CheckDuplicate(MDRARegistrationRequest request, CancellationToken cancellationToken) { bool hasPotentialDuplicate = false; bool hasSilentPotentialDuplicate = false; diff --git a/src/Spd.Manager.Licence/Mappings.cs b/src/Spd.Manager.Licence/Mappings.cs index 1675d4da1a..56c33c134e 100644 --- a/src/Spd.Manager.Licence/Mappings.cs +++ b/src/Spd.Manager.Licence/Mappings.cs @@ -512,12 +512,12 @@ public Mappings() CreateMap(); CreateMap() .ForMember(d => d.Branches, opt => opt.MapFrom(s => GetBranchAddr(s.Branches))); - CreateMap() + CreateMap() .ForMember(d => d.GenericEmail, opt => opt.MapFrom(s => s.BizEmailAddress)) .ForMember(d => d.MailingPostalCode, opt => opt.MapFrom(s => s.BizMailingAddress == null ? null : s.BizMailingAddress.PostalCode)) .ForMember(d => d.RegistrationTypeCode, opt => opt.MapFrom(s => RegistrationTypeCode.MDRA)) .ForMember(d => d.OrganizationName, opt => opt.MapFrom(s => s.BizTradeName)); - CreateMap() + CreateMap() .ForMember(d => d.GenericEmail, opt => opt.MapFrom(s => s.BizEmailAddress)) .ForMember(d => d.MailingPostalCode, opt => opt.MapFrom(s => s.BizMailingAddress == null ? null : s.BizMailingAddress.PostalCode)) .ForMember(d => d.RegistrationTypeCode, opt => opt.MapFrom(s => RegistrationTypeCode.MDRA)) diff --git a/src/Spd.Presentation.Licensing/Controllers/MDRAController.cs b/src/Spd.Presentation.Licensing/Controllers/MDRAController.cs index b6c5b7ef98..ce8d84d26b 100644 --- a/src/Spd.Presentation.Licensing/Controllers/MDRAController.cs +++ b/src/Spd.Presentation.Licensing/Controllers/MDRAController.cs @@ -65,7 +65,7 @@ public async Task GetMDRARegistraionAnonymous() MDRARegistrationCommandResponse? response = null; if (jsonRequest.ApplicationTypeCode == ApplicationTypeCode.New) { - MDRARegistrationNewCommand command = new((MDRARegistrationNewRequest)jsonRequest, newDocInfos); + MDRARegistrationNewCommand command = new(jsonRequest, newDocInfos); response = await _mediator.Send(command, ct); }