diff --git a/src/Spd.Manager.Licence/MDRARegistrationContract.cs b/src/Spd.Manager.Licence/MDRARegistrationContract.cs index bcee939fd4..8ef3476a78 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 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; public record MDRARegistrationRequest { @@ -31,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; } @@ -46,3 +46,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..cf35b94800 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,9 +67,15 @@ public async Task Handle(MDRARegistrationUpdate { return new MDRARegistrationCommandResponse { OrgRegistrationId = Guid.Empty }; } + + public async Task Handle(GetMDRARegistrationIdQuery cmd, CancellationToken ct) + { + OrgQryResult org = (OrgQryResult)await _orgRepository.QueryOrgAsync(new OrgByIdentifierQry(cmd.BizId), ct); + return org.OrgResult.OrgRegistrationId; + } #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/LicenceController.cs b/src/Spd.Presentation.Licensing/Controllers/LicenceController.cs index 879488969f..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 /// /// /// @@ -94,6 +94,10 @@ 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 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 diff --git a/src/Spd.Presentation.Licensing/Controllers/MDRAController.cs b/src/Spd.Presentation.Licensing/Controllers/MDRAController.cs index 5a2054625e..ce8d84d26b 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. @@ -55,7 +65,7 @@ public MDRAController(IMediator mediator, 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); } 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.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() 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]);