diff --git a/responders/src/API/EMBC.Responders.API/Controllers/SuppliersController.cs b/responders/src/API/EMBC.Responders.API/Controllers/SuppliersController.cs index 458049a9d..e848f8e8e 100644 --- a/responders/src/API/EMBC.Responders.API/Controllers/SuppliersController.cs +++ b/responders/src/API/EMBC.Responders.API/Controllers/SuppliersController.cs @@ -52,7 +52,40 @@ public async Task>> GetSuppliers(stri } var suppliers = (await messagingClient.Send(query)).Items; - return Ok(mapper.Map>(suppliers, opt => opt.Items["UserTeamId"] = teamId)); + // Find all team IDs that gave mutual aid + var givenByTeamIds = suppliers + .SelectMany(s => s.MutualAids) + .Where(ma => !string.IsNullOrEmpty(ma.GivenByTeamId)) + .Select(ma => ma.GivenByTeamId) + .Distinct() + .ToList(); + + Dictionary teamNames = new Dictionary(); + + if (givenByTeamIds.Any()) + { + foreach (var teamIdToLookup in givenByTeamIds) + { + var teamQuery = new SuppliersQuery { TeamId = teamIdToLookup }; + var teamSuppliers = (await messagingClient.Send(teamQuery)).Items; + + //Extract team information from supplier data + var teamRef = teamSuppliers + .SelectMany(s => s.PrimaryTeams) + .FirstOrDefault(t => t.Id.Equals(teamIdToLookup)); + + if (teamRef != null) + { + teamNames[teamIdToLookup] = teamRef.Name; + } + } + } + + return Ok(mapper.Map>(suppliers, opt => + { + opt.Items["UserTeamId"] = teamId; + opt.Items["TeamNames"] = teamNames; + })); } /// @@ -296,6 +329,7 @@ public enum SupplierStatus public class MutualAid { public string GivenByTeamId { get; set; } + public string GivenByTeamName { get; set; } public DateTime GivenOn { get; set; } public SupplierTeam GivenToTeam { get; set; } } @@ -308,7 +342,11 @@ public SuppliersMapping() .ForMember(d => d.Status, opts => opts.MapFrom(s => s.Status == ESS.Shared.Contracts.Teams.SupplierStatus.Active ? SupplierStatus.Active : SupplierStatus.Deactivated)) .ForMember(d => d.IsPrimarySupplier, opts => opts.MapFrom((s, dst, arg, context) => context.Items.ContainsKey("UserTeamId") && s.PrimaryTeams.Any(t => t.Id.Equals(context.Items["UserTeamId"])))) .ForMember(d => d.ProvidesMutualAid, opts => opts.MapFrom((s, dst, arg, context) => context.Items.ContainsKey("UserTeamId") && s.PrimaryTeams.Any(t => t.Id.Equals(context.Items["UserTeamId"])) && s.MutualAids.Any())) - .ForMember(d => d.MutualAid, opts => opts.MapFrom((s, dst, arg, context) => s.MutualAids.SingleOrDefault(ma => context.Items.ContainsKey("UserTeamId") && ma.GivenToTeam != null && ma.GivenToTeam.Equals(context.Items["UserTeamId"])))) + .ForMember(d => d.MutualAid, opts => opts.MapFrom((s, dst, arg, context) => + s.MutualAids.SingleOrDefault(ma => + context.Items.ContainsKey("UserTeamId") && + ma.GivenToTeam != null && + ma.GivenToTeam.Id.Equals(context.Items["UserTeamId"])))) ; CreateMap() @@ -346,7 +384,18 @@ public SuppliersMapping() ; CreateMap(); - CreateMap(); + CreateMap() + .ForMember(d => d.GivenByTeamName, opts => opts.MapFrom((s, dst, arg, context) => + { + if (context.Items.ContainsKey("TeamNames")) + { + var teamNames = (Dictionary)context.Items["TeamNames"]; + if (teamNames.TryGetValue(s.GivenByTeamId, out string teamName)) + return teamName; + } + + return null; + })); } } } diff --git a/responders/src/UI/embc-responder/src/app/core/api/models/mutual-aid.ts b/responders/src/UI/embc-responder/src/app/core/api/models/mutual-aid.ts index 81992501f..67ae94e32 100644 --- a/responders/src/UI/embc-responder/src/app/core/api/models/mutual-aid.ts +++ b/responders/src/UI/embc-responder/src/app/core/api/models/mutual-aid.ts @@ -3,6 +3,7 @@ import { SupplierTeam } from '../models/supplier-team'; export interface MutualAid { givenByTeamId?: string | null; + givenByTeamName?: string | null; givenOn?: string; givenToTeam?: SupplierTeam; } diff --git a/responders/src/UI/embc-responder/src/app/feature-components/supplier-management/suppliers-list/suppliers-table/suppliers-table.component.html b/responders/src/UI/embc-responder/src/app/feature-components/supplier-management/suppliers-list/suppliers-table/suppliers-table.component.html index ac0a9849c..983ba8095 100644 --- a/responders/src/UI/embc-responder/src/app/feature-components/supplier-management/suppliers-list/suppliers-table/suppliers-table.component.html +++ b/responders/src/UI/embc-responder/src/app/feature-components/supplier-management/suppliers-list/suppliers-table/suppliers-table.component.html @@ -36,7 +36,7 @@ } @if (column?.ref === 'mutualAid') { - {{ row[column?.ref]?.givenToTeam?.name }} + {{ row[column?.ref]?.givenByTeamName }} } @if (column?.ref === 'status') { diff --git a/responders/src/UI/embc-responder/src/app/feature-components/supplier-management/suppliers-list/suppliers-table/suppliers-table.component.ts b/responders/src/UI/embc-responder/src/app/feature-components/supplier-management/suppliers-list/suppliers-table/suppliers-table.component.ts index f8fc0fcd0..4eb70f35d 100644 --- a/responders/src/UI/embc-responder/src/app/feature-components/supplier-management/suppliers-list/suppliers-table/suppliers-table.component.ts +++ b/responders/src/UI/embc-responder/src/app/feature-components/supplier-management/suppliers-list/suppliers-table/suppliers-table.component.ts @@ -127,8 +127,8 @@ export class SuppliersTableComponent implements AfterViewInit, OnChanges { return compare(a.name.toLowerCase(), b.name.toLowerCase(), isAsc); case 'mutualAid': return compare( - a.mutualAid?.givenToTeam?.name.toLowerCase(), - b.mutualAid?.givenToTeam?.name.toLowerCase(), + a.mutualAid?.givenByTeamName?.toLowerCase(), + b.mutualAid?.givenByTeamName?.toLowerCase(), isAsc ); case 'status':