Skip to content
13 changes: 7 additions & 6 deletions src/Spd.Manager.Licence/MDRARegistrationContract.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,14 @@ public interface IMDRARegistrationManager
public Task<MDRARegistrationCommandResponse> Handle(MDRARegistrationNewCommand command, CancellationToken ct);
public Task<MDRARegistrationCommandResponse> Handle(MDRARegistrationRenewCommand command, CancellationToken ct);
public Task<MDRARegistrationCommandResponse> Handle(MDRARegistrationUpdateCommand command, CancellationToken ct);
public Task<Guid?> Handle(GetMDRARegistrationIdQuery query, CancellationToken ct);

}

public record MDRARegistrationNewCommand(MDRARegistrationNewRequest SubmitRequest, IEnumerable<LicAppFileInfo> LicAppFileInfos) : IRequest<MDRARegistrationCommandResponse>;
public record MDRARegistrationNewCommand(MDRARegistrationRequest SubmitRequest, IEnumerable<LicAppFileInfo> LicAppFileInfos) : IRequest<MDRARegistrationCommandResponse>;
public record MDRARegistrationRenewCommand(MDRARegistrationRequest ChangeRequest, IEnumerable<LicAppFileInfo> LicAppFileInfos) : IRequest<MDRARegistrationCommandResponse>;
public record MDRARegistrationUpdateCommand(MDRARegistrationRequest ChangeRequest, IEnumerable<LicAppFileInfo> LicAppFileInfos) : IRequest<MDRARegistrationCommandResponse>;
public record GetMDRARegistrationIdQuery(Guid BizId) : IRequest<Guid?>;

public record MDRARegistrationRequest
{
Expand All @@ -31,13 +34,10 @@ public record MDRARegistrationRequest
public string? BizEmailAddress { get; set; }
public IEnumerable<BranchInfo>? Branches { get; set; }
public IEnumerable<Guid>? 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; }
Expand All @@ -46,3 +46,4 @@ public record MDRARegistrationCommandResponse
public bool? HasPotentialDuplicate { get; set; }
}


9 changes: 8 additions & 1 deletion src/Spd.Manager.Licence/MDRARegistrationManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ internal class MDRARegistrationManager :
IRequestHandler<MDRARegistrationNewCommand, MDRARegistrationCommandResponse>,
IRequestHandler<MDRARegistrationRenewCommand, MDRARegistrationCommandResponse>,
IRequestHandler<MDRARegistrationUpdateCommand, MDRARegistrationCommandResponse>,
IRequestHandler<GetMDRARegistrationIdQuery, Guid?>,
IMDRARegistrationManager
{
private readonly IMapper _mapper;
Expand Down Expand Up @@ -66,9 +67,15 @@ public async Task<MDRARegistrationCommandResponse> Handle(MDRARegistrationUpdate
{
return new MDRARegistrationCommandResponse { OrgRegistrationId = Guid.Empty };
}

public async Task<Guid?> 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;
Expand Down
4 changes: 2 additions & 2 deletions src/Spd.Manager.Licence/Mappings.cs
Original file line number Diff line number Diff line change
Expand Up @@ -512,12 +512,12 @@ public Mappings()
CreateMap<RetiredDogAppResp, RetiredDogLicenceAppResponse>();
CreateMap<MDRARegistrationRequest, CreateMDRARegistrationCmd>()
.ForMember(d => d.Branches, opt => opt.MapFrom(s => GetBranchAddr(s.Branches)));
CreateMap<MDRARegistrationNewRequest, SearchRegistrationQry>()
CreateMap<MDRARegistrationRequest, SearchRegistrationQry>()
.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<MDRARegistrationNewRequest, SearchOrgQry>()
CreateMap<MDRARegistrationRequest, SearchOrgQry>()
.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))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ public async Task<IEnumerable<LicenceBasicResponse>> GetApplicantLicences([FromR

/// <summary>
/// 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
/// </summary>
/// <param name="licenceNumber"></param>
/// <param name="recaptcha"></param>
Expand All @@ -94,6 +94,10 @@ public async Task<IEnumerable<LicenceBasicResponse>> 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
Expand Down
12 changes: 11 additions & 1 deletion src/Spd.Presentation.Licensing/Controllers/MDRAController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,16 @@ public MDRAController(IMediator mediator,

#region anonymous

[Route("api/mdra-registration")]
[HttpGet]
public async Task<WorkerLicenceAppResponse> GetMDRARegistraionAnonymous()
{

//string swlApplicationId = GetInfoFromRequestCookie(SessionConstants.AnonymousApplicantContext);
//return await _mediator.Send(new GetWorkerLicenceQuery(Guid.Parse(swlApplicationId)));
return null;
}

/// <summary>
/// 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.
Expand All @@ -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);
}

Expand Down
37 changes: 28 additions & 9 deletions src/Spd.Resource.Repository/Licence/Mappings.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,23 +7,24 @@ namespace Spd.Resource.Repository.Licence
{
internal class Mappings : Profile
{
private static List<ServiceTypeEnum> OrgServiceTypes = new List<ServiceTypeEnum> { ServiceTypeEnum.MDRA, ServiceTypeEnum.SecurityBusinessLicence };
public Mappings()
{

_ = CreateMap<spd_licence, LicenceResp>()
.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))
Expand All @@ -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)))
Expand All @@ -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)))
;

Expand Down Expand Up @@ -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;
}
}
}
1 change: 0 additions & 1 deletion src/Spd.Resource.Repository/MDRARegistration/Contract.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ public interface IMDRARegistrationRepository
}

public record MDRARegistrationResp(Guid RegistrationId);

public record CreateMDRARegistrationCmd
{
public ApplicationTypeEnum ApplicationTypeCode { get; set; }
Expand Down
1 change: 1 addition & 0 deletions src/Spd.Resource.Repository/Org/Contract.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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
{
Expand Down
1 change: 1 addition & 0 deletions src/Spd.Resource.Repository/Org/Mappings.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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<account, OrgResult>()
Expand Down
2 changes: 1 addition & 1 deletion src/Spd.Utilities.Dynamics/DynamicsContextLookupHelpers.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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]);
Expand Down