Skip to content

Commit f2fba21

Browse files
committed
ECER-4782: Workexperience references backend piece
1 parent 1c76a17 commit f2fba21

File tree

4 files changed

+79
-0
lines changed

4 files changed

+79
-0
lines changed
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
using ECER.Utilities.DataverseSdk.Model;
2+
using Microsoft.Xrm.Sdk.Client;
3+
4+
namespace ECER.Resources.Documents.ICRA;
5+
6+
internal sealed partial class ICRARepository
7+
{
8+
private async Task UpdateEmploymentReferences(ecer_ICRAEligibilityAssessment icraEligibility, Contact contact, List<ecer_WorkExperienceRef> updatedEntities, CancellationToken ct)
9+
{
10+
await Task.CompletedTask;
11+
12+
var existing = context.ecer_WorkExperienceRefSet.Where(t => t.ecer_ICRAEligibilityAssessment.Id == icraEligibility.Id).ToList();
13+
14+
// Remove those not present anymore
15+
foreach (var reference in existing)
16+
{
17+
if (!updatedEntities.Any(t => t.ecer_WorkExperienceRefId == reference.ecer_WorkExperienceRefId))
18+
{
19+
context.DeleteObject(reference);
20+
}
21+
}
22+
23+
// Update existing
24+
foreach (var reference in updatedEntities.Where(d => d.ecer_WorkExperienceRefId != null))
25+
{
26+
var oldRef = existing.SingleOrDefault(t => t.ecer_WorkExperienceRefId == reference.ecer_WorkExperienceRefId);
27+
if (oldRef != null)
28+
{
29+
context.Detach(oldRef);
30+
reference.StatusCode = oldRef.StatusCode;
31+
}
32+
reference.ecer_Origin = ecer_Origin.Portal;
33+
context.Attach(reference);
34+
context.UpdateObject(reference);
35+
}
36+
37+
// Add new
38+
foreach (var reference in updatedEntities.Where(d => d.ecer_WorkExperienceRefId == null))
39+
{
40+
reference.ecer_WorkExperienceRefId = Guid.NewGuid();
41+
reference.StatusCode = ecer_WorkExperienceRef_StatusCode.Draft;
42+
reference.ecer_Origin = ecer_Origin.Portal;
43+
context.AddObject(reference);
44+
context.AddLink(icraEligibility, ecer_ICRAEligibilityAssessment.Fields.ecer_WorkExperienceRef_ecer_ICRAEligibilityAssessment_ecer_ICRAEligibilityAssessment, reference);
45+
context.AddLink(contact, ecer_WorkExperienceRef.Fields.ecer_workexperienceref_Applicantid, reference);
46+
}
47+
}
48+
}
49+
50+

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ 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_WorkExperienceRef_ecer_ICRAEligibilityAssessment_ecer_ICRAEligibilityAssessment)
5051
.Include(a => a.ecer_internationalcertification_EligibilityAssessment_ecer_icraeligibilityassessment)
5152
.IncludeNested(a => a.ecer_bcgov_documenturl_internationalcertificationid)
5253
.IncludeNested(a => a.ecer_internationalcertification_CountryId)
@@ -84,6 +85,8 @@ public async Task<string> Save(ICRAEligibility iCRAEligibility, CancellationToke
8485
}
8586
// Update international certifications and their files
8687
await UpdateInternationalCertifications(icraEligibility, applicant, iCRAEligibility.ApplicantId, iCRAEligibility.InternationalCertifications.ToList(), cancellationToken);
88+
// Update employment references
89+
await UpdateEmploymentReferences(icraEligibility, applicant, mapper.Map<List<ecer_WorkExperienceRef>>(iCRAEligibility.EmploymentReferences)!, cancellationToken);
8790
context.SaveChanges();
8891
return icraEligibility.ecer_ICRAEligibilityAssessmentId!.Value.ToString();
8992
}

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

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,15 @@ public ICRARepositoryMapper()
1313
.ForSourceMember(s => s.ApplicantId, opts => opts.DoNotValidate())
1414
.ForSourceMember(s => s.CreatedOn, opts => opts.DoNotValidate())
1515
.ForSourceMember(s => s.InternationalCertifications, opts => opts.DoNotValidate())
16+
.ForSourceMember(s => s.EmploymentReferences, opts => opts.DoNotValidate())
1617
.ForMember(d => d.ecer_ICRAEligibilityAssessmentId, opts => opts.MapFrom(s => s.Id))
1718
.ForMember(d => d.ecer_PortalStage, opts => opts.MapFrom(s => s.PortalStage))
1819
.ForMember(d => d.StatusCode, opts => opts.MapFrom(s => s.Status))
1920
.ForMember(d => d.ecer_DateSigned, opts => opts.MapFrom(s => s.SignedDate))
2021
.ReverseMap()
2122
.ForMember(d => d.ApplicantId, opts => opts.MapFrom(s => s.ecer_icraeligibilityassessment_ApplicantId.Id))
2223
.ForMember(d => d.InternationalCertifications, opts => opts.MapFrom(s => s.ecer_internationalcertification_EligibilityAssessment_ecer_icraeligibilityassessment))
24+
.ForMember(d => d.EmploymentReferences, opts => opts.MapFrom(s => s.ecer_WorkExperienceRef_ecer_ICRAEligibilityAssessment_ecer_ICRAEligibilityAssessment))
2325
.ForMember(d => d.CreatedOn, opts => opts.MapFrom(s => s.CreatedOn));
2426

2527
CreateMap<InternationalCertification, ecer_InternationalCertification>(MemberList.Source)
@@ -64,6 +66,20 @@ public ICRARepositoryMapper()
6466
CreateMap<ICRAStatus, ecer_ICRAEligibilityAssessment_StatusCode>()
6567
.ConvertUsingEnumMapping(opts => opts.MapByName(true))
6668
.ReverseMap();
69+
70+
CreateMap<EmploymentReference, ecer_WorkExperienceRef>(MemberList.Source)
71+
.ForMember(d => d.ecer_WorkExperienceRefId, opts => opts.MapFrom(s => s.Id))
72+
.ForMember(d => d.ecer_FirstName, opts => opts.MapFrom(s => s.FirstName))
73+
.ForMember(d => d.ecer_LastName, opts => opts.MapFrom(s => s.LastName))
74+
.ForMember(d => d.ecer_EmailAddress, opts => opts.MapFrom(s => s.EmailAddress))
75+
.ForMember(d => d.ecer_PhoneNumber, opts => opts.MapFrom(s => s.PhoneNumber));
76+
77+
CreateMap<ecer_WorkExperienceRef, EmploymentReference>(MemberList.Destination)
78+
.ForMember(d => d.Id, opts => opts.MapFrom(s => s.ecer_WorkExperienceRefId))
79+
.ForMember(d => d.FirstName, opts => opts.MapFrom(s => s.ecer_FirstName))
80+
.ForMember(d => d.LastName, opts => opts.MapFrom(s => s.ecer_LastName))
81+
.ForMember(d => d.EmailAddress, opts => opts.MapFrom(s => s.ecer_EmailAddress))
82+
.ForMember(d => d.PhoneNumber, opts => opts.MapFrom(s => s.ecer_PhoneNumber));
6783
}
6884

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

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ public record ICRAEligibility()
2323
public DateTime? CreatedOn { get; set; }
2424
public ICRAStatus Status { get; set; }
2525
public IEnumerable<InternationalCertification> InternationalCertifications { get; set; } = Array.Empty<InternationalCertification>();
26+
public IEnumerable<EmploymentReference> EmploymentReferences { get; set; } = Array.Empty<EmploymentReference>();
2627
}
2728
public record InternationalCertification
2829
{
@@ -46,6 +47,15 @@ public record InternationalCertification
4647
public IEnumerable<string> NewFiles { get; set; } = Array.Empty<string>();
4748
}
4849

50+
public record EmploymentReference
51+
{
52+
public string? Id { get; set; }
53+
public string? LastName { get; set; }
54+
public string? FirstName { get; set; }
55+
public string? EmailAddress { get; set; }
56+
public string? PhoneNumber { get; set; }
57+
}
58+
4959
public enum CertificateStatus
5060
{
5161
Valid,

0 commit comments

Comments
 (0)