diff --git a/server/src/main/java/com/objectcomputing/checkins/services/member_skill/MemberSkillRepository.java b/server/src/main/java/com/objectcomputing/checkins/services/member_skill/MemberSkillRepository.java index 08c9a6314..175e97630 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/member_skill/MemberSkillRepository.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/member_skill/MemberSkillRepository.java @@ -1,5 +1,6 @@ package com.objectcomputing.checkins.services.member_skill; +import io.micronaut.data.annotation.Query; import io.micronaut.data.jdbc.annotation.JdbcRepository; import io.micronaut.data.model.query.builder.sql.Dialect; import io.micronaut.data.repository.CrudRepository; @@ -19,6 +20,13 @@ public interface MemberSkillRepository extends CrudRepository List findBySkillid(UUID skillid); - Optional findByMemberidAndSkillid(UUID memberId,UUID skillid ); + Optional findByMemberidAndSkillid(UUID memberId, UUID skillid); + @Query(value = "SELECT member_skills.* FROM member_skills " + + "INNER JOIN member_profile " + + "ON member_skills.memberid = member_profile.id " + + "WHERE :targetSkillId = member_skills.skillid " + + "AND member_profile.terminationdate IS NULL", + nativeQuery = true) + List activeMemberSkills(String targetSkillId); } diff --git a/server/src/main/java/com/objectcomputing/checkins/services/member_skill/skillsreport/SkillsReportServicesImpl.java b/server/src/main/java/com/objectcomputing/checkins/services/member_skill/skillsreport/SkillsReportServicesImpl.java index ef2c12ac6..f6321f0fa 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/member_skill/skillsreport/SkillsReportServicesImpl.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/member_skill/skillsreport/SkillsReportServicesImpl.java @@ -92,7 +92,8 @@ private List getPotentialQualifyingMembers(List temp = memberSkillRepo.findBySkillid(skill.getId()); + final List temp = + memberSkillRepo.activeMemberSkills(skill.getId().toString()); if (skill.getLevel() != null && !temp.isEmpty()) { for (MemberSkill memSkill : temp) { if (memSkill.getSkilllevel() != null && isSkillLevelSatisfied(memSkill.getSkilllevel(), skill.getLevel())) { diff --git a/server/src/test/java/com/objectcomputing/checkins/services/member_skill/skillsreport/SkillsReportServicesImplTest.java b/server/src/test/java/com/objectcomputing/checkins/services/member_skill/skillsreport/SkillsReportServicesImplTest.java index b815befe0..fd2d6b0d6 100644 --- a/server/src/test/java/com/objectcomputing/checkins/services/member_skill/skillsreport/SkillsReportServicesImplTest.java +++ b/server/src/test/java/com/objectcomputing/checkins/services/member_skill/skillsreport/SkillsReportServicesImplTest.java @@ -108,6 +108,7 @@ void testReport() { MemberProfile member2 = createASecondDefaultMemberProfile(); MemberProfile member3 = createAThirdDefaultMemberProfile(); MemberProfile member4 = createADefaultMemberProfileForPdl(member1); + MemberProfile member5 = createAPastTerminatedMemberProfile(); final UUID skillId1 = skill1.getId(); final UUID skillId2 = skill2.getId(); @@ -128,6 +129,12 @@ void testReport() { final MemberSkill ms8 = createMemberSkill(member4, skill2, SkillLevel.INTERMEDIATE_LEVEL, LocalDate.now()); final MemberSkill ms9 = createMemberSkill(member4, skill4, SkillLevel.EXPERT_LEVEL, LocalDate.now()); + // Skills for the terminated member + createMemberSkill(member5, skill1, SkillLevel.ADVANCED_LEVEL, LocalDate.now()); + createMemberSkill(member5, skill2, SkillLevel.ADVANCED_LEVEL, LocalDate.now()); + createMemberSkill(member5, skill3, SkillLevel.ADVANCED_LEVEL, LocalDate.now()); + createMemberSkill(member5, skill4, SkillLevel.ADVANCED_LEVEL, LocalDate.now()); + // List of skills required in first request final SkillLevelDTO dto1 = new SkillLevelDTO(); final SkillLevelDTO dto2 = new SkillLevelDTO(); diff --git a/web-ui/src/pages/SkillReportPage.jsx b/web-ui/src/pages/SkillReportPage.jsx index e2728e0c9..6d9abfe7b 100644 --- a/web-ui/src/pages/SkillReportPage.jsx +++ b/web-ui/src/pages/SkillReportPage.jsx @@ -1,4 +1,4 @@ -import React, { useContext, useRef, useState } from 'react'; +import React, { useContext, useRef, useState, useEffect } from 'react'; import { Button, TextField } from '@mui/material'; import Autocomplete from '@mui/material/Autocomplete'; @@ -54,26 +54,28 @@ const SkillReportPage = props => { processedQPs ); - const handleSearch = async searchRequestDTO => { - let res = await reportSkills(searchRequestDTO, csrf); - let memberSkillsFound; - if (res && res.payload) { - memberSkillsFound = - !res.error && res.payload.data.teamMembers - ? res.payload.data.teamMembers - : undefined; - } - // Filter out skills of terminated members - memberSkillsFound = memberSkillsFound?.filter(memberSkill => - memberIds.includes(memberSkill.id) - ); - if (memberSkillsFound && memberIds) { - let newSort = sortMembersBySkill(memberSkillsFound); - setSearchResults(newSort); - } else { - setSearchResults([]); - } - }; + useEffect(() => { + const handleSearch = async () => { + let memberSkillsFound = []; + + if (searchSkills.length > 0) { + const searchRequestDTO = createRequestDTO(editedSearchRequest); + const res = await reportSkills(searchRequestDTO, csrf); + if (res && res.payload) { + memberSkillsFound = + !res.error && res.payload.data?.teamMembers + ? res.payload.data.teamMembers + : []; + } + memberSkillsFound = sortMembersBySkill(memberSkillsFound); + } + + setSearchResults(memberSkillsFound); + }; + + handleSearch(); + }, [searchSkills]); + function skillsToSkillLevelDTO(skills) { return skills.map((skill, index) => { @@ -124,26 +126,6 @@ const SkillReportPage = props => { /> )} /> -
- -
diff --git a/web-ui/src/pages/TeamSkillReportPage.jsx b/web-ui/src/pages/TeamSkillReportPage.jsx index 2b32a25fc..a79d4866f 100644 --- a/web-ui/src/pages/TeamSkillReportPage.jsx +++ b/web-ui/src/pages/TeamSkillReportPage.jsx @@ -1,4 +1,4 @@ -import React, { useContext, useRef, useState } from 'react'; +import React, { useContext, useRef, useState, useEffect } from 'react'; import { Autocomplete, Button, TextField, Typography } from '@mui/material'; @@ -72,33 +72,33 @@ const TeamSkillReportPage = () => { processedQPs ); - const handleSearch = async searchRequestDTO => { - let res = await reportSkills(searchRequestDTO, csrf); - let memberSkillsFound; - if (res && res.payload) { - memberSkillsFound = - !res.error && res.payload.data.teamMembers - ? res.payload.data.teamMembers - : undefined; - } - if (memberSkillsFound && memberProfiles) { - // Filter the member skill down to only members that are not terminated. - memberSkillsFound = memberSkillsFound.filter( - mSkill => memberProfiles.find(member => member.id == mSkill.id) - ); - - setAllSearchResults(memberSkillsFound); - let membersSelected = memberSkillsFound.filter(mSkill => - selectedMembers.some(member => member.id === mSkill.id) - ); - let newSort = sortMembersBySkill(membersSelected); - setSearchResults(newSort); - } else { - setSearchResults([]); - setAllSearchResults([]); - } - setShowRadar(true); - }; + useEffect(() => { + const handleSearch = async () => { + if (searchSkills.length > 0) { + const searchRequestDTO = createRequest(editedSearchRequest); + const res = await reportSkills(searchRequestDTO, csrf); + let memberSkillsFound; + if (res && res.payload) { + memberSkillsFound = + !res.error && res.payload.data.teamMembers + ? res.payload.data.teamMembers + : []; + } + + setAllSearchResults(memberSkillsFound); + const membersSelected = memberSkillsFound.filter(mSkill => + selectedMembers.some(member => member.id === mSkill.id) + ); + setSearchResults(sortMembersBySkill(membersSelected)); + setShowRadar(true); + } else { + setSearchResults([]); + setAllSearchResults([]); + setShowRadar(false); + } + }; + handleSearch(); + }, [selectedMembers, searchSkills]); function skillsToSkillLevel(skills) { return skills.map(skill => { @@ -194,24 +194,6 @@ const TeamSkillReportPage = () => { /> )} /> - {showRadar && (
diff --git a/web-ui/src/pages/__snapshots__/SkillReportPage.test.jsx.snap b/web-ui/src/pages/__snapshots__/SkillReportPage.test.jsx.snap index 3917370ce..6275d6ddb 100644 --- a/web-ui/src/pages/__snapshots__/SkillReportPage.test.jsx.snap +++ b/web-ui/src/pages/__snapshots__/SkillReportPage.test.jsx.snap @@ -91,20 +91,6 @@ exports[`renders correctly 1`] = `
-
- -
-