Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

VIH-10361 Fix for unable to update judge last minute #1318

Merged
merged 7 commits into from
Dec 15, 2023
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -102,8 +102,8 @@
},
"BookingsApi.Client": {
"type": "Transitive",
"resolved": "1.49.15",
"contentHash": "ye+s7y4jeNSgVd7sgbRee0dnx4HZIegmBxYlWHENPNv5u8zSH15dENPmLX8BODkUKOLpwHiIxQyRMh8KKzlcFQ==",
"resolved": "1.50.4-pr-0788-0003",
oliver-scott marked this conversation as resolved.
Show resolved Hide resolved
"contentHash": "A/VDJHlJM82MzrM0RdaZEvPwyFUQGe5fxq86dBKVCh4Iy0gfJhOV4myVYVdtFyPzVeRO5ObxyGuGM7Tmam4gJg==",
"dependencies": {
"Microsoft.AspNetCore.Mvc.Core": "2.2.5"
}
Expand Down Expand Up @@ -2101,7 +2101,7 @@
"type": "Project",
"dependencies": {
"AspNetCore.HealthChecks.Uris": "[6.0.3, )",
"BookingsApi.Client": "[1.49.15, )",
"BookingsApi.Client": "[1.50.4-pr-0788-0003, )",
"FluentValidation.AspNetCore": "[10.4.0, )",
"LaunchDarkly.ServerSdk": "[7.0.3, )",
"MicroElements.Swashbuckle.FluentValidation": "[5.7.0, )",
Expand Down

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -293,13 +293,9 @@ private HearingDetailsResponse InitHearing()
.With(x => x.Id = Guid.NewGuid())
.With(x => x.UserRoleName = "Staff Member")
.Build();
var telephoneParticipant = Builder<TelephoneParticipantResponse>.CreateNew()
.With(x => x.Id = Guid.NewGuid())
.Build();

return Builder<HearingDetailsResponse>.CreateNew()
.With(h => h.Participants = new List<ParticipantResponse> { rep, ind, joh, judge, staffMember })
.With(h => h.TelephoneParticipants = new List<TelephoneParticipantResponse> { telephoneParticipant })
.With(x => x.Cases = cases)
.With(x => x.Id = Guid.NewGuid())
.Build();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
using AdminWebsite.Contracts.Requests;

namespace AdminWebsite.UnitTests.Validators
{
Expand Down Expand Up @@ -47,6 +48,17 @@ public void Should_validate_participants_as_valid()
var result = _validator.Validate(testRequest);
Assert.That(!result.Errors.Any(o => o.PropertyName == "Participants"));
}

[Test]
public void Should_validate_participants_as_valid_when_judiciary_participants_are_provided()
{
var testRequest = new EditHearingRequest {
JudiciaryParticipants = new List<JudiciaryParticipantRequest> { new() },
Case = new EditCaseRequest(),
};
var result = _validator.Validate(testRequest);
Assert.That(!result.Errors.Any(o => o.PropertyName == "Participants"));
}

[Test]
public void Should_validate_scheduled_date_time_as_error_when_time_is_thirty_minutes_or_more()
Expand Down
6 changes: 3 additions & 3 deletions AdminWebsite/AdminWebsite.UnitTests/packages.lock.json
Original file line number Diff line number Diff line change
Expand Up @@ -107,8 +107,8 @@
},
"BookingsApi.Client": {
"type": "Transitive",
"resolved": "1.49.15",
"contentHash": "ye+s7y4jeNSgVd7sgbRee0dnx4HZIegmBxYlWHENPNv5u8zSH15dENPmLX8BODkUKOLpwHiIxQyRMh8KKzlcFQ==",
"resolved": "1.50.4-pr-0788-0003",
"contentHash": "A/VDJHlJM82MzrM0RdaZEvPwyFUQGe5fxq86dBKVCh4Iy0gfJhOV4myVYVdtFyPzVeRO5ObxyGuGM7Tmam4gJg==",
"dependencies": {
"Microsoft.AspNetCore.Mvc.Core": "2.2.5"
}
Expand Down Expand Up @@ -1979,7 +1979,7 @@
"type": "Project",
"dependencies": {
"AspNetCore.HealthChecks.Uris": "[6.0.3, )",
"BookingsApi.Client": "[1.49.15, )",
"BookingsApi.Client": "[1.50.4-pr-0788-0003, )",
"FluentValidation.AspNetCore": "[10.4.0, )",
"LaunchDarkly.ServerSdk": "[7.0.3, )",
"MicroElements.Swashbuckle.FluentValidation": "[5.7.0, )",
Expand Down
2 changes: 1 addition & 1 deletion AdminWebsite/AdminWebsite/AdminWebsite.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="AspNetCore.HealthChecks.Uris" Version="6.0.3" />
<PackageReference Include="BookingsApi.Client" Version="1.49.15" />
<PackageReference Include="BookingsApi.Client" Version="1.50.4-pr-0788-0003" />
<PackageReference Include="LaunchDarkly.ServerSdk" Version="7.0.3" />
<PackageReference Include="MicroElements.Swashbuckle.FluentValidation" Version="5.7.0" />
<PackageReference Include="Microsoft.Identity.Client" Version="4.51.0" />
Expand Down
40 changes: 38 additions & 2 deletions AdminWebsite/AdminWebsite/Controllers/HearingsController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -396,8 +396,10 @@ private async Task UpdateParticipantsV2(Guid hearingId, EditHearingRequest reque

var linkedParticipants = ExtractLinkedParticipants(request, originalHearing, removedParticipantIds, new List<IUpdateParticipantRequest>(existingParticipants), new List<IParticipantRequest>(newParticipants));
var linkedParticipantsV2 = linkedParticipants.Select(lp => lp.MapToV2()).ToList();

if (request.Participants != null && request.Participants.Any())
await _hearingsService.ProcessParticipantsV2(hearingId, existingParticipants, newParticipants, removedParticipantIds.ToList(), linkedParticipantsV2);

await _hearingsService.ProcessParticipantsV2(hearingId, existingParticipants, newParticipants, removedParticipantIds.ToList(), linkedParticipantsV2);
await _hearingsService.ProcessEndpoints(hearingId, request, originalHearing, new List<IParticipantRequest>(newParticipants));
}

Expand All @@ -410,11 +412,29 @@ private static List<Guid> GetRemovedParticipantIds(EditHearingRequest request, H
private async Task UpdateJudiciaryParticipants(Guid hearingId, EditHearingRequest request,
HearingDetailsResponse originalHearing)
{
// Due to booking api's domain restrictions for removing participants, we have to update judges differently
var oldJudge = originalHearing.JudiciaryParticipants.Find(ojp => ojp.RoleCode == "Judge");
var newJudge = request.JudiciaryParticipants.Find(njp => njp.Role == "Judge");
if (oldJudge?.PersonalCode != newJudge?.PersonalCode && newJudge != null)
{
await _bookingsApiClient.ReassignJudiciaryJudgeAsync(hearingId, new ReassignJudiciaryJudgeRequest
{
DisplayName = newJudge.DisplayName,
PersonalCode = newJudge.PersonalCode
});
}

// keep the order of removal first. this will allow admin web to change judiciary judges post booking
var removedJohs = originalHearing.JudiciaryParticipants.Where(ojp =>
request.JudiciaryParticipants.TrueForAll(jp => jp.PersonalCode != ojp.PersonalCode)).ToList();
foreach (var removedJoh in removedJohs)
{
if (removedJoh.RoleCode == "Judge")
{
// Judges are re-assigned instead of removed or added
continue;
}

await _bookingsApiClient.RemoveJudiciaryParticipantFromHearingAsync(hearingId, removedJoh.PersonalCode);
}

Expand All @@ -433,7 +453,15 @@ private async Task UpdateJudiciaryParticipants(Guid hearingId, EditHearingReques
}).ToList();
if (newJohRequest.Any())
{
await _bookingsApiClient.AddJudiciaryParticipantsToHearingAsync(hearingId, newJohRequest);
// Judges are re-assigned instead of removed or added
var johsToAdd = newJohRequest
.Where(x => x.HearingRoleCode != JudiciaryParticipantHearingRoleCode.Judge)
.ToList();

if (johsToAdd.Any())
{
await _bookingsApiClient.AddJudiciaryParticipantsToHearingAsync(hearingId, johsToAdd);
}
}

// get existing judiciary participants based on the personal code being present in the original hearing
Expand All @@ -442,6 +470,14 @@ private async Task UpdateJudiciaryParticipants(Guid hearingId, EditHearingReques

foreach (var joh in existingJohs)
{
// Only update the joh if their details have changed
var originalJoh = originalHearing.JudiciaryParticipants.Find(x => x.PersonalCode == joh.PersonalCode);
if (joh.DisplayName == originalJoh.DisplayName &&
joh.Role == originalJoh.RoleCode)
{
continue;
}

var roleCode = Enum.Parse<JudiciaryParticipantHearingRoleCode>(joh.Role);
await _bookingsApiClient.UpdateJudiciaryParticipantAsync(hearingId, joh.PersonalCode,
new UpdateJudiciaryParticipantRequest()
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
using System.Collections.Generic;
using System.Linq;
using AdminWebsite.Contracts.Responses;
using V1 = BookingsApi.Contract.V1.Responses;
Expand All @@ -23,9 +24,7 @@ public static HearingDetailsResponse Map(this V1.HearingDetailsResponse hearingD
Number = e.Number
}).ToList(),
Participants = hearingDetails.Participants?.Map(),
TelephoneParticipants = hearingDetails.TelephoneParticipants?
.Select(t => t.Map())
.ToList(),
TelephoneParticipants = new List<TelephoneParticipantResponse>(),
HearingRoomName = hearingDetails.HearingRoomName,
OtherInformation = hearingDetails.OtherInformation,
CreatedDate = hearingDetails.CreatedDate,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
using System;
using AdminWebsite.Models;
using AdminWebsite.Models;
using FluentValidation;

namespace AdminWebsite.Validators
Expand All @@ -19,6 +18,7 @@ public EditHearingRequestValidator()

RuleFor(x => x.Participants)
.Must(x => x != null && x.Count > 0)
.When(x => x.JudiciaryParticipants == null || x.JudiciaryParticipants.Count == 0)
.WithMessage(PARTICIPANT_MSG);

RuleForEach(x => x.Participants).NotNull().SetValidator(new EditParticipantRequestValidation());
Expand Down
6 changes: 3 additions & 3 deletions AdminWebsite/AdminWebsite/packages.lock.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,9 @@
},
"BookingsApi.Client": {
"type": "Direct",
"requested": "[1.49.15, )",
"resolved": "1.49.15",
"contentHash": "ye+s7y4jeNSgVd7sgbRee0dnx4HZIegmBxYlWHENPNv5u8zSH15dENPmLX8BODkUKOLpwHiIxQyRMh8KKzlcFQ==",
"requested": "[1.50.4-pr-0788-0003, )",
"resolved": "1.50.4-pr-0788-0003",
"contentHash": "A/VDJHlJM82MzrM0RdaZEvPwyFUQGe5fxq86dBKVCh4Iy0gfJhOV4myVYVdtFyPzVeRO5ObxyGuGM7Tmam4gJg==",
"dependencies": {
"Microsoft.AspNetCore.Mvc.Core": "2.2.5"
}
Expand Down
3 changes: 2 additions & 1 deletion charts/vh-admin-web/values.dev.template.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,5 @@ java:
AZUREAD__POSTLOGOUTREDIRECTURI: https://${SERVICE_FQDN}/logout
AZUREAD__REDIRECTURI: https://${SERVICE_FQDN}/home
DOM1__POSTLOGOUTREDIRECTURI: https://${SERVICE_FQDN}/logout
DOM1__REDIRECTURI: https://${SERVICE_FQDN}/home
DOM1__REDIRECTURI: https://${SERVICE_FQDN}/home
oliver-scott marked this conversation as resolved.
Show resolved Hide resolved
VHSERVICES__BOOKINGSAPIURL: https://vh-bookings-api-pr-788.dev.platform.hmcts.net/
Loading