Skip to content

Commit dbe137b

Browse files
committed
ECER-5269: ICRA international certification manage uploaded files piece added to repository layer
1 parent 1c2d747 commit dbe137b

File tree

4 files changed

+60
-24
lines changed

4 files changed

+60
-24
lines changed

src/ECER.Resources.Documents/ICRA/ICRAChildren/InternationalCertifications.cs

Lines changed: 11 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,28 @@
1-
using AutoMapper;
2-
using ECER.Utilities.DataverseSdk.Model;
3-
using ECER.Utilities.ObjectStorage.Providers;
1+
using ECER.Utilities.DataverseSdk.Model;
42
using ECER.Utilities.ObjectStorage.Providers.S3;
53
using Microsoft.Extensions.Configuration;
6-
using System;
7-
using System.Collections.Generic;
8-
using System.Configuration;
9-
using System.Linq;
10-
using System.Text;
11-
using System.Threading.Tasks;
4+
using Microsoft.Xrm.Sdk.Client;
125

136
namespace ECER.Resources.Documents.ICRA;
147

158
internal sealed partial class ICRARepository
169
{
17-
private async Task UpdateInternationalCertifications(ecer_Application application, Contact contact, string ApplicantId, List<InternationalCertification> updatedEntities, CancellationToken ct)
10+
private async Task UpdateInternationalCertifications(ecer_ICRAEligibilityAssessment icraEligibility, Contact contact, string ApplicantId, List<InternationalCertification> updatedEntities, CancellationToken ct)
1811
{
1912
await Task.CompletedTask;
2013

21-
var existingInternationalCertifications = context.ecer_InternationalCertificationSet.Where(t => t.ecer_Applicationid.Id == application.Id).ToList();
14+
var existingInternationalCertifications = context.ecer_InternationalCertificationSet.Where(t => t.ecer_EligibilityAssessment.Id == icraEligibility.Id).ToList();
2215
foreach (var InternationalCertification in existingInternationalCertifications)
2316
{
2417
if (!updatedEntities.Any(t => t.Id == InternationalCertification.Id.ToString()))
2518
{
26-
// This deletes all files and document urls before deleting the professional development object
19+
// This deletes all files and document urls before deleting the international certifications object
2720
await DeleteFilesForInternationalCertification(InternationalCertification.ecer_InternationalCertificationId, Guid.Parse(ApplicantId), ct);
2821
context.DeleteObject(InternationalCertification);
2922
}
3023
}
3124

32-
// Update Existing Professional Developments
25+
// Update existing International Certifications
3326
foreach (var InternationalCertification in updatedEntities.Where(d => !string.IsNullOrEmpty(d.Id)))
3427
{
3528
var oldInternationalCertification = existingInternationalCertifications.SingleOrDefault(t => t.Id.ToString() == InternationalCertification.Id);
@@ -49,15 +42,11 @@ private async Task UpdateInternationalCertifications(ecer_Application applicatio
4942
foreach (var InternationalCertification in updatedEntities.Where(d => string.IsNullOrEmpty(d.Id)))
5043
{
5144
var ecerInternationalCertification = mapper.Map<ecer_InternationalCertification>(InternationalCertification)!;
52-
if (application.StatusCode == ecer_Application_StatusCode.Draft)
53-
{
54-
ecerInternationalCertification.StatusCode = ecer_InternationalCertification_StatusCode.Draft;
55-
}
45+
// no draft status handling required here beyond default mapping
5646
var newId = Guid.NewGuid();
5747
ecerInternationalCertification.ecer_InternationalCertificationId = newId;
5848
context.AddObject(ecerInternationalCertification);
59-
context.AddLink(application, ecer_Application.Fields.ecer_ecer_InternationalCertification_Applicationi, ecerInternationalCertification);
60-
context.AddLink(contact, Contact.Fields.ecer_ecer_InternationalCertification_Applicantid_, ecerInternationalCertification);
49+
context.AddLink(icraEligibility, ecer_ICRAEligibilityAssessment.Fields.ecer_internationalcertification_EligibilityAssessment_ecer_icraeligibilityassessment, ecerInternationalCertification);
6150
await HandleInternationalCertificationFiles(ecerInternationalCertification, Guid.Parse(ApplicantId), InternationalCertification.NewFiles, InternationalCertification.DeletedFiles, ct);
6251
}
6352
}
@@ -108,7 +97,7 @@ private async Task HandleAddedFiles(ecer_InternationalCertification Internationa
10897
throw new InvalidOperationException($"InternationalCertification '{InternationalCertification}' not found");
10998
}
11099
// add file and create document url
111-
// link it to professional development
100+
// link it to international certification
112101
await AddFilesForInternationalCertification(InternationalCertification, applicantId, new List<string>() { fileId }, ct);
113102
}
114103
}
@@ -117,7 +106,7 @@ private async Task DeleteFilesForInternationalCertification(Guid? InternationalC
117106
{
118107
await Task.CompletedTask;
119108

120-
var files = context.bcgov_DocumentUrlSet.Where(d => d.ecer_bcgov_documenturl_InternationalCertificationId.ecer_InternationalCertificationId == InternationalCertificationId && d.bcgov_contact_bcgov_documenturl.ContactId == applicantId).ToList();
109+
var files = context.bcgov_DocumentUrlSet.Where(d => d.ecer_bcgov_documenturl_internationalcertificationid.ecer_InternationalCertificationId == InternationalCertificationId && d.bcgov_contact_bcgov_documenturl.ContactId == applicantId).ToList();
121110
for (int i = 0; i < files.Count; i++)
122111
{
123112
var items = files[i].bcgov_Url.Split('/');
@@ -160,7 +149,7 @@ private async Task AddFilesForInternationalCertification(ecer_InternationalCerti
160149

161150
context.AddObject(documenturl);
162151
context.AddLink(documenturl, bcgov_DocumentUrl.Fields.bcgov_contact_bcgov_documenturl, applicant);
163-
context.AddLink(documenturl, bcgov_DocumentUrl.Fields.ecer_bcgov_documenturl_InternationalCertificationId, InternationalCertification);
152+
context.AddLink(documenturl, bcgov_DocumentUrl.Fields.ecer_bcgov_documenturl_internationalcertificationid, InternationalCertification);
164153
}
165154
}
166155

src/ECER.Resources.Documents/ICRA/ICRARepository.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,8 @@ public async Task<IEnumerable<ICRAEligibility>> Query(ICRAQuery query, Cancellat
4747
var results = context.From(icras)
4848
.Join()
4949
.Include(a => a.ecer_icraeligibilityassessment_ApplicantId)
50+
.Include(a => a.ecer_internationalcertification_EligibilityAssessment_ecer_icraeligibilityassessment)
51+
.IncludeNested(a => a.ecer_bcgov_documenturl_internationalcertificationid)
5052
.Execute();
5153

5254
return mapper.Map<IEnumerable<ICRAEligibility>>(results)!.ToList();
@@ -76,7 +78,8 @@ public async Task<string> Save(ICRAEligibility iCRAEligibility, CancellationToke
7678
icraEligibility.ecer_ICRAEligibilityAssessmentId = existingIcraEligibility.ecer_ICRAEligibilityAssessmentId;
7779
context.UpdateObject(icraEligibility);
7880
}
79-
81+
// Update international certifications and their files
82+
await UpdateInternationalCertifications(icraEligibility, applicant, iCRAEligibility.ApplicantId, iCRAEligibility.InternationalCertifications.ToList(), cancellationToken);
8083
context.SaveChanges();
8184
return icraEligibility.ecer_ICRAEligibilityAssessmentId!.Value.ToString();
8285
}

src/ECER.Resources.Documents/ICRA/ICRARepositoryMapper.cs

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,51 @@ public ICRARepositoryMapper()
1515
.ForMember(d => d.ecer_PortalStage, opts => opts.MapFrom(s => s.PortalStage))
1616
.ForMember(d => d.StatusCode, opts => opts.MapFrom(s => s.Status))
1717
.ReverseMap()
18-
.ForMember(d => d.ApplicantId, opts => opts.MapFrom(s => s.ecer_icraeligibilityassessment_ApplicantId.Id));
18+
.ForMember(d => d.ApplicantId, opts => opts.MapFrom(s => s.ecer_icraeligibilityassessment_ApplicantId.Id))
19+
.ForMember(d => d.InternationalCertifications, opts => opts.MapFrom(s => s.ecer_internationalcertification_EligibilityAssessment_ecer_icraeligibilityassessment));
20+
21+
CreateMap<InternationalCertification, ecer_InternationalCertification>(MemberList.Source)
22+
.ForSourceMember(s => s.NewFiles, opts => opts.DoNotValidate())
23+
.ForSourceMember(s => s.DeletedFiles, opts => opts.DoNotValidate())
24+
.ForSourceMember(s => s.Files, opts => opts.DoNotValidate())
25+
.ForMember(d => d.ecer_InternationalCertificationId, opts => opts.MapFrom(s => s.Id))
26+
.ForMember(d => d.ecer_Country, opts => opts.MapFrom(s => string.IsNullOrEmpty(s.CountryId) ? null : new EntityReference("ecer_country", Guid.Parse(s.CountryId))))
27+
.ForMember(d => d.ecer_AuthorityName, opts => opts.MapFrom(s => s.NameOfRegulatoryAuthority))
28+
.ForMember(d => d.ecer_AuthorityEmail, opts => opts.MapFrom(s => s.EmailOfRegulatoryAuthority))
29+
.ForMember(d => d.ecer_AuthorityPhone, opts => opts.MapFrom(s => s.PhoneOfRegulatoryAuthority))
30+
.ForMember(d => d.ecer_AuthorityWebsite, opts => opts.MapFrom(s => s.WebsiteOfRegulatoryAuthority))
31+
.ForMember(d => d.ecer_CertificateValidationTool, opts => opts.MapFrom(s => s.OnlineCertificateValidationToolOfRegulatoryAuthority))
32+
.ForMember(d => d.ecer_CertificationStatus, opts => opts.MapFrom(s => s.CertificateStatus))
33+
.ForMember(d => d.ecer_CertificateTitle, opts => opts.MapFrom(s => s.CertificateTitle))
34+
.ForMember(d => d.ecer_IssueDate, opts => opts.MapFrom(s => s.IssueDate))
35+
.ForMember(d => d.ecer_Expirydate, opts => opts.MapFrom(s => s.ExpiryDate));
36+
37+
CreateMap<ecer_InternationalCertification, InternationalCertification>(MemberList.Source)
38+
.ForMember(d => d.Id, opts => opts.MapFrom(s => s.ecer_InternationalCertificationId))
39+
.ForMember(d => d.CountryId, opts => opts.MapFrom(s => s.ecer_Country != null ? s.ecer_Country.Id.ToString() : null))
40+
.ForMember(d => d.NameOfRegulatoryAuthority, opts => opts.MapFrom(s => s.ecer_AuthorityName))
41+
.ForMember(d => d.EmailOfRegulatoryAuthority, opts => opts.MapFrom(s => s.ecer_AuthorityEmail))
42+
.ForMember(d => d.PhoneOfRegulatoryAuthority, opts => opts.MapFrom(s => s.ecer_AuthorityPhone))
43+
.ForMember(d => d.WebsiteOfRegulatoryAuthority, opts => opts.MapFrom(s => s.ecer_AuthorityWebsite))
44+
.ForMember(d => d.OnlineCertificateValidationToolOfRegulatoryAuthority, opts => opts.MapFrom(s => s.ecer_CertificateValidationTool))
45+
.ForMember(d => d.CertificateStatus, opts => opts.MapFrom(s => s.ecer_CertificationStatus))
46+
.ForMember(d => d.CertificateTitle, opts => opts.MapFrom(s => s.ecer_CertificateTitle))
47+
.ForMember(d => d.IssueDate, opts => opts.MapFrom(s => s.ecer_IssueDate))
48+
.ForMember(d => d.ExpiryDate, opts => opts.MapFrom(s => s.ecer_Expirydate))
49+
.ForMember(d => d.NewFiles, opts => opts.Ignore())
50+
.ForMember(d => d.DeletedFiles, opts => opts.Ignore())
51+
.ForMember(d => d.Files, opts => opts.MapFrom(src => src.ecer_bcgov_documenturl_internationalcertificationid.ToList()));
1952

2053
CreateMap<ICRAStatus, ecer_ICRAEligibilityAssessment_StatusCode>()
2154
.ConvertUsingEnumMapping(opts => opts.MapByName(true))
2255
.ReverseMap();
56+
57+
CreateMap<bcgov_DocumentUrl, Applications.FileInfo>(MemberList.Destination)
58+
.ForMember(d => d.Id, opts => opts.MapFrom(s => s.bcgov_DocumentUrlId))
59+
.ForMember(d => d.Name, opts => opts.MapFrom(s => s.bcgov_FileName))
60+
.ForMember(d => d.Size, opts => opts.MapFrom(s => s.bcgov_FileSize))
61+
.ForMember(d => d.Url, opts => opts.MapFrom(s => s.bcgov_Url))
62+
.ForMember(d => d.Extention, opts => opts.MapFrom(s => s.bcgov_FileExtension));
2363
}
2464

2565
public static string IdOrEmpty(EntityReference? reference) =>

src/ECER.Resources.Documents/ICRA/IICRARepository.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ public record ICRAEligibility()
2424
}
2525
public record InternationalCertification
2626
{
27+
public string? Id { get; set; }
2728
public string? CountryId { get; set; }
2829
public string? NameOfRegulatoryAuthority { get; set; }
2930
public string? EmailOfRegulatoryAuthority { get; set; }
@@ -34,6 +35,9 @@ public record InternationalCertification
3435
public string? CertificateTitle { get; set; }
3536
public DateTime? IssueDate { get; set; }
3637
public DateTime? ExpiryDate { get; set; }
38+
public IEnumerable<Applications.FileInfo> Files { get; set; } = Array.Empty<Applications.FileInfo>();
39+
public IEnumerable<string> DeletedFiles { get; set; } = Array.Empty<string>();
40+
public IEnumerable<string> NewFiles { get; set; } = Array.Empty<string>();
3741
}
3842

3943
public enum CertificateStatus

0 commit comments

Comments
 (0)