Skip to content

Commit 92b7211

Browse files
[SPDBT-4245] MDRA-Search Licence with licence Number (#2733)
# Description This PR includes the following proposed change(s): - [SPDBT-4245] MDRA-Search Licence with licence Number - fix the mdra new request issue
1 parent a6efbc0 commit 92b7211

File tree

10 files changed

+64
-22
lines changed

10 files changed

+64
-22
lines changed

src/Spd.Manager.Licence/MDRARegistrationContract.cs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,14 @@ public interface IMDRARegistrationManager
88
public Task<MDRARegistrationCommandResponse> Handle(MDRARegistrationNewCommand command, CancellationToken ct);
99
public Task<MDRARegistrationCommandResponse> Handle(MDRARegistrationRenewCommand command, CancellationToken ct);
1010
public Task<MDRARegistrationCommandResponse> Handle(MDRARegistrationUpdateCommand command, CancellationToken ct);
11+
public Task<Guid?> Handle(GetMDRARegistrationIdQuery query, CancellationToken ct);
12+
1113
}
1214

13-
public record MDRARegistrationNewCommand(MDRARegistrationNewRequest SubmitRequest, IEnumerable<LicAppFileInfo> LicAppFileInfos) : IRequest<MDRARegistrationCommandResponse>;
15+
public record MDRARegistrationNewCommand(MDRARegistrationRequest SubmitRequest, IEnumerable<LicAppFileInfo> LicAppFileInfos) : IRequest<MDRARegistrationCommandResponse>;
1416
public record MDRARegistrationRenewCommand(MDRARegistrationRequest ChangeRequest, IEnumerable<LicAppFileInfo> LicAppFileInfos) : IRequest<MDRARegistrationCommandResponse>;
1517
public record MDRARegistrationUpdateCommand(MDRARegistrationRequest ChangeRequest, IEnumerable<LicAppFileInfo> LicAppFileInfos) : IRequest<MDRARegistrationCommandResponse>;
18+
public record GetMDRARegistrationIdQuery(Guid BizId) : IRequest<Guid?>;
1619

1720
public record MDRARegistrationRequest
1821
{
@@ -31,13 +34,10 @@ public record MDRARegistrationRequest
3134
public string? BizEmailAddress { get; set; }
3235
public IEnumerable<BranchInfo>? Branches { get; set; }
3336
public IEnumerable<Guid>? DocumentKeyCodes { get; set; }
37+
public BooleanTypeCode HasPotentialDuplicate { get; set; } = BooleanTypeCode.No; //only for new
38+
public bool RequireDuplicateCheck { get; set; } = true; //only for new
3439
}
3540

36-
public record MDRARegistrationNewRequest : MDRARegistrationRequest
37-
{
38-
public BooleanTypeCode HasPotentialDuplicate { get; set; } = BooleanTypeCode.No;
39-
public bool RequireDuplicateCheck { get; set; } = true;
40-
}
4141
public record MDRARegistrationCommandResponse
4242
{
4343
public Guid? OrgRegistrationId { get; set; }
@@ -46,3 +46,4 @@ public record MDRARegistrationCommandResponse
4646
public bool? HasPotentialDuplicate { get; set; }
4747
}
4848

49+

src/Spd.Manager.Licence/MDRARegistrationManager.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ internal class MDRARegistrationManager :
1414
IRequestHandler<MDRARegistrationNewCommand, MDRARegistrationCommandResponse>,
1515
IRequestHandler<MDRARegistrationRenewCommand, MDRARegistrationCommandResponse>,
1616
IRequestHandler<MDRARegistrationUpdateCommand, MDRARegistrationCommandResponse>,
17+
IRequestHandler<GetMDRARegistrationIdQuery, Guid?>,
1718
IMDRARegistrationManager
1819
{
1920
private readonly IMapper _mapper;
@@ -66,9 +67,15 @@ public async Task<MDRARegistrationCommandResponse> Handle(MDRARegistrationUpdate
6667
{
6768
return new MDRARegistrationCommandResponse { OrgRegistrationId = Guid.Empty };
6869
}
70+
71+
public async Task<Guid?> Handle(GetMDRARegistrationIdQuery cmd, CancellationToken ct)
72+
{
73+
OrgQryResult org = (OrgQryResult)await _orgRepository.QueryOrgAsync(new OrgByIdentifierQry(cmd.BizId), ct);
74+
return org.OrgResult.OrgRegistrationId;
75+
}
6976
#endregion
7077

71-
private async Task<(bool HasPotentialDuplicate, bool HasSilentPotentialDuplicate)> CheckDuplicate(MDRARegistrationNewRequest request, CancellationToken cancellationToken)
78+
private async Task<(bool HasPotentialDuplicate, bool HasSilentPotentialDuplicate)> CheckDuplicate(MDRARegistrationRequest request, CancellationToken cancellationToken)
7279
{
7380
bool hasPotentialDuplicate = false;
7481
bool hasSilentPotentialDuplicate = false;

src/Spd.Manager.Licence/Mappings.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -512,12 +512,12 @@ public Mappings()
512512
CreateMap<RetiredDogAppResp, RetiredDogLicenceAppResponse>();
513513
CreateMap<MDRARegistrationRequest, CreateMDRARegistrationCmd>()
514514
.ForMember(d => d.Branches, opt => opt.MapFrom(s => GetBranchAddr(s.Branches)));
515-
CreateMap<MDRARegistrationNewRequest, SearchRegistrationQry>()
515+
CreateMap<MDRARegistrationRequest, SearchRegistrationQry>()
516516
.ForMember(d => d.GenericEmail, opt => opt.MapFrom(s => s.BizEmailAddress))
517517
.ForMember(d => d.MailingPostalCode, opt => opt.MapFrom(s => s.BizMailingAddress == null ? null : s.BizMailingAddress.PostalCode))
518518
.ForMember(d => d.RegistrationTypeCode, opt => opt.MapFrom(s => RegistrationTypeCode.MDRA))
519519
.ForMember(d => d.OrganizationName, opt => opt.MapFrom(s => s.BizTradeName));
520-
CreateMap<MDRARegistrationNewRequest, SearchOrgQry>()
520+
CreateMap<MDRARegistrationRequest, SearchOrgQry>()
521521
.ForMember(d => d.GenericEmail, opt => opt.MapFrom(s => s.BizEmailAddress))
522522
.ForMember(d => d.MailingPostalCode, opt => opt.MapFrom(s => s.BizMailingAddress == null ? null : s.BizMailingAddress.PostalCode))
523523
.ForMember(d => d.RegistrationTypeCode, opt => opt.MapFrom(s => RegistrationTypeCode.MDRA))

src/Spd.Presentation.Licensing/Controllers/LicenceController.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ public async Task<IEnumerable<LicenceBasicResponse>> GetApplicantLicences([FromR
7474

7575
/// <summary>
7676
/// Get latest licence by licence number with google recaptcha for anonymous
77-
/// Example: http://localhost:5114/api/licence-lookup/TEST-02?accessCode=TEST
77+
/// Example: http://localhost:5114/api/licence-lookup/anonymous/TEST-02?accessCode=TEST
7878
/// </summary>
7979
/// <param name="licenceNumber"></param>
8080
/// <param name="recaptcha"></param>
@@ -94,6 +94,10 @@ public async Task<IEnumerable<LicenceBasicResponse>> GetApplicantLicences([FromR
9494
latestAppId = await _mediator.Send(new GetLatestWorkerLicenceApplicationIdQuery((Guid)response.LicenceHolderId));
9595
else if (response?.ServiceTypeCode == ServiceTypeCode.SecurityBusinessLicence)
9696
return response;
97+
else if (response?.ServiceTypeCode == ServiceTypeCode.MDRA)
98+
{
99+
latestAppId = await _mediator.Send(new GetMDRARegistrationIdQuery((Guid)response.LicenceHolderId)) ?? Guid.Empty;
100+
}
97101
else if (response?.ServiceTypeCode == ServiceTypeCode.BodyArmourPermit || response?.ServiceTypeCode == ServiceTypeCode.ArmouredVehiclePermit)
98102
latestAppId = await _mediator.Send(new GetLatestPermitApplicationIdQuery((Guid)response.LicenceHolderId, (ServiceTypeCode)response.ServiceTypeCode));
99103
else if (response?.ServiceTypeCode == ServiceTypeCode.GDSDTeamCertification

src/Spd.Presentation.Licensing/Controllers/MDRAController.cs

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,16 @@ public MDRAController(IMediator mediator,
3232

3333
#region anonymous
3434

35+
[Route("api/mdra-registration")]
36+
[HttpGet]
37+
public async Task<WorkerLicenceAppResponse> GetMDRARegistraionAnonymous()
38+
{
39+
40+
//string swlApplicationId = GetInfoFromRequestCookie(SessionConstants.AnonymousApplicantContext);
41+
//return await _mediator.Send(new GetWorkerLicenceQuery(Guid.Parse(swlApplicationId)));
42+
return null;
43+
}
44+
3545
/// <summary>
3646
/// Submit MDRA registration Anonymously
3747
/// 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,
5565
MDRARegistrationCommandResponse? response = null;
5666
if (jsonRequest.ApplicationTypeCode == ApplicationTypeCode.New)
5767
{
58-
MDRARegistrationNewCommand command = new((MDRARegistrationNewRequest)jsonRequest, newDocInfos);
68+
MDRARegistrationNewCommand command = new(jsonRequest, newDocInfos);
5969
response = await _mediator.Send(command, ct);
6070
}
6171

src/Spd.Resource.Repository/Licence/Mappings.cs

Lines changed: 28 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,23 +7,24 @@ namespace Spd.Resource.Repository.Licence
77
{
88
internal class Mappings : Profile
99
{
10+
private static List<ServiceTypeEnum> OrgServiceTypes = new List<ServiceTypeEnum> { ServiceTypeEnum.MDRA, ServiceTypeEnum.SecurityBusinessLicence };
1011
public Mappings()
1112
{
1213

1314
_ = CreateMap<spd_licence, LicenceResp>()
1415
.ForMember(d => d.LicenceId, opt => opt.MapFrom(s => s.spd_licenceid))
15-
.ForMember(d => d.LicenceAppId, opt => opt.MapFrom(s => s.spd_CaseId._spd_applicationid_value))
16-
.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))
16+
.ForMember(d => d.LicenceAppId, opt => opt.MapFrom(s => s.spd_CaseId == null ? null : s.spd_CaseId._spd_applicationid_value))
17+
.ForMember(d => d.LicenceHolderId, opt => opt.MapFrom(s => GetLicenceHolderId(s)))
1718
.ForMember(d => d.LicenceNumber, opt => opt.MapFrom(s => s.spd_licencenumber))
1819
.ForMember(d => d.ExpiryDate, opt => opt.MapFrom(s => SharedMappingFuncs.GetDateOnlyFromDateTimeOffset(s.spd_expirydate)))
1920
.ForMember(d => d.ServiceTypeCode, opt => opt.MapFrom(s => SharedMappingFuncs.GetServiceType(s._spd_licencetype_value)))
2021
.ForMember(d => d.LicenceTermCode, opt => opt.MapFrom(s => SharedMappingFuncs.GetLicenceTermEnum(s.spd_licenceterm)))
21-
.ForMember(d => d.BizLegalName, opt => opt.MapFrom(s => SharedMappingFuncs.GetServiceType(s._spd_licencetype_value) == ServiceTypeEnum.SecurityBusinessLicence ? s.spd_LicenceHolder_account.spd_organizationlegalname : null))
22-
.ForMember(d => d.LicenceHolderDateOfBirth, opt => opt.MapFrom(s => SharedMappingFuncs.GetServiceType(s._spd_licencetype_value) == ServiceTypeEnum.SecurityBusinessLicence ? null : s.spd_LicenceHolder_contact.birthdate))
23-
.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))
22+
.ForMember(d => d.BizLegalName, opt => opt.MapFrom(s => GetBizLegalName(s)))
23+
.ForMember(d => d.LicenceHolderDateOfBirth, opt => opt.MapFrom(s => OrgServiceTypes.Contains(SharedMappingFuncs.GetServiceType(s._spd_licencetype_value).Value) ? null : s.spd_LicenceHolder_contact.birthdate))
24+
.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))
2425
.ForMember(d => d.LicenceStatusCode, opt => opt.MapFrom(s => GetLicenceStatusEnum(s.statuscode)))
25-
.ForMember(d => d.LicenceHolderLastName, opt => opt.MapFrom(s => SharedMappingFuncs.GetServiceType(s._spd_licencetype_value) == ServiceTypeEnum.SecurityBusinessLicence ? null : s.spd_LicenceHolder_contact.lastname))
26-
.ForMember(d => d.LicenceHolderMiddleName1, opt => opt.MapFrom(s => SharedMappingFuncs.GetServiceType(s._spd_licencetype_value) == ServiceTypeEnum.SecurityBusinessLicence ? null : s.spd_LicenceHolder_contact.spd_middlename1))
26+
.ForMember(d => d.LicenceHolderLastName, opt => opt.MapFrom(s => OrgServiceTypes.Contains(SharedMappingFuncs.GetServiceType(s._spd_licencetype_value).Value) ? null : s.spd_LicenceHolder_contact.lastname))
27+
.ForMember(d => d.LicenceHolderMiddleName1, opt => opt.MapFrom(s => OrgServiceTypes.Contains(SharedMappingFuncs.GetServiceType(s._spd_licencetype_value).Value) ? null : s.spd_LicenceHolder_contact.spd_middlename1))
2728
.ForMember(d => d.NameOnCard, opt => opt.MapFrom(s => s.spd_nameonlicence))
2829
.ForMember(d => d.CreatedOn, opt => opt.MapFrom(s => s.createdon))
2930
.ForMember(d => d.PermitOtherRequiredReason, opt => opt.MapFrom(s => s.spd_permitpurposeother))
@@ -35,7 +36,7 @@ public Mappings()
3536
.ForMember(d => d.Rationale, opt => opt.MapFrom(s => s.spd_rationale))
3637
.ForMember(d => d.PhotoDocumentUrlId, opt => opt.MapFrom(s => s._spd_photographid_value))
3738
.ForMember(d => d.PrintingPreviewJobId, opt => opt.MapFrom(s => s.spd_bcmpjobid))
38-
.ForMember(d => d.IsTemporary, opt => opt.MapFrom(s => SharedMappingFuncs.GetBool(s.spd_temporarylicence)))
39+
.ForMember(d => d.IsTemporary, opt => opt.MapFrom(s => SharedMappingFuncs.GetBool(s.spd_temporarylicence)))//
3940
.ForMember(d => d.PermitPurposeEnums, opt => opt.MapFrom(s => SharedMappingFuncs.GetPermitPurposeEnums(s.spd_permitpurpose)))
4041
.ForMember(d => d.CategoryCodes, opt => opt.MapFrom(s => GetCategoryCodes(s.spd_spd_licence_spd_caselicencecategory_licenceid.ToList())))
4142
.ForMember(d => d.BizTypeCode, opt => opt.MapFrom(s => GetBizType(s)))
@@ -47,7 +48,7 @@ public Mappings()
4748
.ForMember(d => d.CarryAndUseRestraints, opt => opt.MapFrom(s => SharedMappingFuncs.GetBool(s.spd_requestrestraints)))
4849
.ForMember(d => d.UseDogs, opt => opt.MapFrom(s => SharedMappingFuncs.GetBool(s.spd_requestdogs)))
4950
.ForMember(d => d.Conditions, opt => opt.MapFrom(s => s.spd_spd_licence_spd_licencecondition))
50-
.ForMember(d => d.GDSDTeamId, opt => opt.MapFrom(s => s.spd_licence_spd_dogteam_LicenceId.FirstOrDefault().spd_dogteamid))
51+
.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))
5152
.ForMember(d => d.IsDogAssessor, opt => opt.MapFrom(s => SharedMappingFuncs.GetBool(s.spd_outd)))
5253
;
5354

@@ -107,5 +108,23 @@ internal static BizTypeEnum GetBizType(spd_licence s)
107108
else
108109
return SharedMappingFuncs.GetBizTypeEnum(bizTypeInt).Value;
109110
}
111+
112+
internal Guid? GetLicenceHolderId(spd_licence lic)
113+
{
114+
ServiceTypeEnum? servicetype = SharedMappingFuncs.GetServiceType(lic._spd_licencetype_value);
115+
if (servicetype == ServiceTypeEnum.SecurityBusinessLicence || servicetype == ServiceTypeEnum.MDRA)
116+
return lic.spd_LicenceHolder_account.accountid;
117+
else
118+
return lic.spd_LicenceHolder_contact.contactid;
119+
}
120+
121+
internal string? GetBizLegalName(spd_licence lic)
122+
{
123+
ServiceTypeEnum? servicetype = SharedMappingFuncs.GetServiceType(lic._spd_licencetype_value);
124+
if (servicetype == ServiceTypeEnum.SecurityBusinessLicence || servicetype == ServiceTypeEnum.MDRA)
125+
return lic.spd_LicenceHolder_account.spd_organizationlegalname;
126+
else
127+
return null;
128+
}
110129
}
111130
}

src/Spd.Resource.Repository/MDRARegistration/Contract.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ public interface IMDRARegistrationRepository
88
}
99

1010
public record MDRARegistrationResp(Guid RegistrationId);
11-
1211
public record CreateMDRARegistrationCmd
1312
{
1413
public ApplicationTypeEnum ApplicationTypeCode { get; set; }

src/Spd.Resource.Repository/Org/Contract.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ public record Org
5353
public string? AddressProvince { get; set; }
5454
public EmployeeInteractionTypeCode? EmployeeInteractionType { get; set; }
5555
public bool HasInvoiceSupport { get; set; }
56+
public Guid? OrgRegistrationId { get; set; }
5657
}
5758
public record OrgResult : Org
5859
{

src/Spd.Resource.Repository/Org/Mappings.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ public Mappings()
2626
.ForMember(d => d.PayerPreference, opt => opt.MapFrom(s => GetPayerPreferenceType(s.spd_payerpreference)))
2727
.ForMember(d => d.ContractorsNeedVulnerableSectorScreening, opt => opt.MapFrom(s => GetBooleanType(s.spd_havecontractors)))
2828
.ForMember(d => d.EmployeeInteractionType, opt => opt.MapFrom(s => GetEmployeeInteractionCode(s.spd_workswith)))
29+
.ForMember(d => d.OrgRegistrationId, opt => opt.MapFrom(s => s._spd_orgregistrationid_value))
2930
.ForMember(d => d.LicenseesNeedVulnerableSectorScreening, opt => opt.MapFrom(s => GetBooleanType(s.spd_havelicenseesorregistrants)));
3031

3132
_ = CreateMap<account, OrgResult>()

src/Spd.Utilities.Dynamics/DynamicsContextLookupHelpers.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ public static (string?, string?) GetTypeFromTypeId(Guid? orgTypeId)
5050
if (orgTypeId == null) return (null, null);
5151
string key = LookupOrganizationTypeKey((Guid)orgTypeId);
5252
var str = key.Split("-");
53-
if (str.Length == 0 || str.Length > 2) return (null, null);
53+
if (str.Length != 2) return (null, null);
5454
if (str[0].Equals("Volunteer", StringComparison.InvariantCultureIgnoreCase))
5555
{
5656
return (null, str[1]);

0 commit comments

Comments
 (0)