From 401282f2f0314d907b46b2acac2c507bf06ff9d1 Mon Sep 17 00:00:00 2001 From: loganwc Date: Thu, 27 Feb 2025 17:40:00 +0000 Subject: [PATCH 1/2] don't fetch office users with deleted roles --- .../office_user/office_user_fetcher.go | 5 +++- .../office_user/office_user_fetcher_test.go | 26 +++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/pkg/services/office_user/office_user_fetcher.go b/pkg/services/office_user/office_user_fetcher.go index 9708f4c137b..df1f55eadd8 100644 --- a/pkg/services/office_user/office_user_fetcher.go +++ b/pkg/services/office_user/office_user_fetcher.go @@ -139,7 +139,10 @@ func (o *officeUserFetcherPop) FetchOfficeUsersWithWorkloadByRoleAndOffice(appCt office_users.last_name, COUNT(DISTINCT moves.id) AS workload FROM office_users - JOIN users_roles ON office_users.user_id = users_roles.user_id + JOIN users_roles + ON ( + office_users.user_id = users_roles.user_id AND users_roles.deleted_at IS NULL + ) JOIN roles ON users_roles.role_id = roles.id JOIN transportation_offices ON office_users.transportation_office_id = transportation_offices.id LEFT JOIN moves diff --git a/pkg/services/office_user/office_user_fetcher_test.go b/pkg/services/office_user/office_user_fetcher_test.go index a096e21dd3a..3e815ea21c2 100644 --- a/pkg/services/office_user/office_user_fetcher_test.go +++ b/pkg/services/office_user/office_user_fetcher_test.go @@ -3,6 +3,7 @@ package officeuser import ( "errors" "reflect" + "time" "github.com/gobuffalo/validate/v3" "github.com/gofrs/uuid" @@ -14,6 +15,7 @@ import ( "github.com/transcom/mymove/pkg/models/roles" "github.com/transcom/mymove/pkg/services" "github.com/transcom/mymove/pkg/services/query" + "github.com/transcom/mymove/pkg/testdatagen" ) type testOfficeUserQueryBuilder struct { @@ -159,4 +161,28 @@ func (suite *OfficeUserServiceSuite) TestFetchOfficeUsersWithWorkloadByRoleAndOf suite.IsType(apperror.NotFoundError{}, err) suite.Equal(uuid.Nil, officeUser.ID) }) + + suite.Run("does not return office users with deleted role", func() { + transportationOffice := factory.BuildTransportationOffice(suite.DB(), nil, nil) + tooRole := factory.FetchOrBuildRoleByRoleType(suite.DB(), roles.RoleTypeTOO) + officeUser := factory.BuildOfficeUser(suite.DB(), []factory.Customization{ + { + Model: transportationOffice, + LinkOnly: true, + Type: &factory.TransportationOffices.CounselingOffice, + }, + }, nil) + deletedAt := time.Now() + _ = testdatagen.MakeUsersRoles(suite.DB(), testdatagen.Assertions{ + User: officeUser.User, + UsersRoles: models.UsersRoles{ + RoleID: tooRole.ID, + DeletedAt: &deletedAt, + }, + }) + + fetchedUsers, err := fetcher.FetchOfficeUsersByRoleAndOffice(suite.AppContextForTest(), roles.RoleTypeTOO, officeUser.TransportationOfficeID) + suite.NoError(err) + suite.Len(fetchedUsers, 0) + }) } From 94bb9e97311df4ad1613ac117a2be235c41a6b5b Mon Sep 17 00:00:00 2001 From: loganwc Date: Thu, 27 Feb 2025 18:12:18 +0000 Subject: [PATCH 2/2] fix assigned column not showing users assigned to moves if they're not at same office --- .../internal/payloads/model_to_payload.go | 33 +++++++++++++------ 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/pkg/handlers/ghcapi/internal/payloads/model_to_payload.go b/pkg/handlers/ghcapi/internal/payloads/model_to_payload.go index d384f326414..d41b182ff23 100644 --- a/pkg/handlers/ghcapi/internal/payloads/model_to_payload.go +++ b/pkg/handlers/ghcapi/internal/payloads/model_to_payload.go @@ -2401,19 +2401,32 @@ func QueueMoves(moves []models.Move, officeUsers []models.OfficeUser, requestedP } // if the assigned user is not in the returned list of available users append them to the end - if (activeRole == string(roles.RoleTypeTOO)) && (move.TOOAssignedUser != nil) { - userFound := false - for _, officeUser := range availableOfficeUsers { - if officeUser.ID == *move.TOOAssignedID { - userFound = true - break - } + if activeRole == string(roles.RoleTypeTOO) || activeRole == string(roles.RoleTypeServicesCounselor) { + var assignedUser *models.OfficeUser + var assignedID *uuid.UUID + + switch activeRole { + case string(roles.RoleTypeTOO): + assignedUser = move.TOOAssignedUser + assignedID = move.TOOAssignedID + case string(roles.RoleTypeServicesCounselor): + assignedUser = move.SCAssignedUser + assignedID = move.SCAssignedID } - if !userFound { - availableOfficeUsers = append(availableOfficeUsers, *move.TOOAssignedUser) + + if assignedUser != nil { + userFound := false + for _, officeUser := range availableOfficeUsers { + if assignedID != nil && officeUser.ID == *assignedID { + userFound = true + break + } + } + if !userFound { + availableOfficeUsers = append(availableOfficeUsers, *assignedUser) + } } } - if activeRole == string(roles.RoleTypeServicesCounselor) { availableOfficeUsers = servicesCounselorAvailableOfficeUsers(move, availableOfficeUsers, officeUser, ppmCloseoutGblocs, isCloseoutQueue) }