Skip to content

Commit

Permalink
Merge pull request #13834 from transcom/B-20532-MAIN
Browse files Browse the repository at this point in the history
B-20532 TOO queue assignment
  • Loading branch information
pambecker authored Oct 28, 2024
2 parents af403d2 + f64a721 commit 42a4cf6
Show file tree
Hide file tree
Showing 15 changed files with 405 additions and 189 deletions.
12 changes: 12 additions & 0 deletions pkg/gen/ghcapi/embedded_spec.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

28 changes: 28 additions & 0 deletions pkg/gen/ghcapi/ghcoperations/queues/get_moves_queue_parameters.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

12 changes: 10 additions & 2 deletions pkg/handlers/ghcapi/internal/payloads/model_to_payload.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import (
"github.com/transcom/mymove/pkg/gen/ghcmessages"
"github.com/transcom/mymove/pkg/handlers"
"github.com/transcom/mymove/pkg/models"
"github.com/transcom/mymove/pkg/models/roles"
"github.com/transcom/mymove/pkg/services"
mtoshipment "github.com/transcom/mymove/pkg/services/mto_shipment"
"github.com/transcom/mymove/pkg/storage"
Expand Down Expand Up @@ -2052,7 +2053,7 @@ func QueueAvailableOfficeUsers(officeUsers []models.OfficeUser) *ghcmessages.Ava
}

// QueueMoves payload
func QueueMoves(moves []models.Move, officeUsers []models.OfficeUser) *ghcmessages.QueueMoves {
func QueueMoves(moves []models.Move, officeUsers []models.OfficeUser, role roles.RoleType) *ghcmessages.QueueMoves {
queueMoves := make(ghcmessages.QueueMoves, len(moves))
for i, move := range moves {
customer := move.Orders.ServiceMember
Expand Down Expand Up @@ -2133,9 +2134,16 @@ func QueueMoves(moves []models.Move, officeUsers []models.OfficeUser) *ghcmessag
LockExpiresAt: handlers.FmtDateTimePtr(move.LockExpiresAt),
PpmStatus: ghcmessages.PPMStatus(ppmStatus),
CounselingOffice: &transportationOffice,
AssignedTo: AssignedOfficeUser(move.SCAssignedUser),
AvailableOfficeUsers: *QueueAvailableOfficeUsers(officeUsers),
}

if role == roles.RoleTypeServicesCounselor {
queueMoves[i].AssignedTo = AssignedOfficeUser(move.SCAssignedUser)
}
if role == roles.RoleTypeTOO {
queueMoves[i].AssignedTo = AssignedOfficeUser(move.TOOAssignedUser)
}

}
return &queueMoves
}
Expand Down
7 changes: 5 additions & 2 deletions pkg/handlers/ghcapi/queues.go
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ func (h GetMovesQueueHandler) Handle(params queues.GetMovesQueueParams) middlewa
Sort: params.Sort,
Order: params.Order,
OrderType: params.OrderType,
TOOAssignedUser: params.AssignedTo,
}

// When no status filter applied, TOO should only see moves with status of New Move, Service Counseling Completed, or Approvals Requested
Expand All @@ -83,6 +84,7 @@ func (h GetMovesQueueHandler) Handle(params queues.GetMovesQueueParams) middlewa
moves, count, err := h.OrderFetcher.ListOrders(
appCtx,
appCtx.Session().OfficeUserID,
roles.RoleTypeTOO,
&ListOrderParams,
)
if err != nil {
Expand Down Expand Up @@ -133,7 +135,7 @@ func (h GetMovesQueueHandler) Handle(params queues.GetMovesQueueParams) middlewa
}
}

queueMoves := payloads.QueueMoves(moves, officeUsers)
queueMoves := payloads.QueueMoves(moves, officeUsers, roles.RoleTypeTOO)

result := &ghcmessages.QueueMovesResult{
Page: *ListOrderParams.Page,
Expand Down Expand Up @@ -392,6 +394,7 @@ func (h GetServicesCounselingQueueHandler) Handle(
moves, count, err := h.OrderFetcher.ListOrders(
appCtx,
appCtx.Session().OfficeUserID,
roles.RoleTypeServicesCounselor,
&ListOrderParams,
)
if err != nil {
Expand Down Expand Up @@ -442,7 +445,7 @@ func (h GetServicesCounselingQueueHandler) Handle(
}
}

queueMoves := payloads.QueueMoves(moves, officeUsers)
queueMoves := payloads.QueueMoves(moves, officeUsers, roles.RoleTypeServicesCounselor)

result := &ghcmessages.QueueMovesResult{
Page: *ListOrderParams.Page,
Expand Down
2 changes: 1 addition & 1 deletion pkg/handlers/ghcapi/queues_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -193,7 +193,7 @@ func (suite *HandlerSuite) TestGetMoveQueuesHandlerMoveInfo() {

orderFetcher := mocks.OrderFetcher{}
orderFetcher.On("ListOrders", mock.AnythingOfType("*appcontext.appContext"),
officeUser.ID, mock.Anything).Return(expectedMoves, 4, nil)
officeUser.ID, roles.RoleTypeTOO, mock.Anything).Return(expectedMoves, 4, nil)

request := httptest.NewRequest("GET", "/queues/moves", nil)
request = suite.AuthenticateOfficeRequest(request, officeUser)
Expand Down
24 changes: 13 additions & 11 deletions pkg/services/mocks/OrderFetcher.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 3 additions & 1 deletion pkg/services/order.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import (
"github.com/transcom/mymove/pkg/appcontext"
"github.com/transcom/mymove/pkg/gen/ghcmessages"
"github.com/transcom/mymove/pkg/models"
"github.com/transcom/mymove/pkg/models/roles"
"github.com/transcom/mymove/pkg/storage"
)

Expand All @@ -18,7 +19,7 @@ import (
//go:generate mockery --name OrderFetcher
type OrderFetcher interface {
FetchOrder(appCtx appcontext.AppContext, orderID uuid.UUID) (*models.Order, error)
ListOrders(appCtx appcontext.AppContext, officeUserID uuid.UUID, params *ListOrderParams) ([]models.Move, int, error)
ListOrders(appCtx appcontext.AppContext, officeUserID uuid.UUID, role roles.RoleType, params *ListOrderParams) ([]models.Move, int, error)
ListAllOrderLocations(appCtx appcontext.AppContext, officeUserID uuid.UUID, params *ListOrderParams) ([]models.Move, error)
}

Expand Down Expand Up @@ -70,4 +71,5 @@ type ListOrderParams struct {
ViewAsGBLOC *string
CounselingOffice *string
SCAssignedUser *string
TOOAssignedUser *string
}
23 changes: 20 additions & 3 deletions pkg/services/order/order_fetcher.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ type orderFetcher struct {
// QueryOption defines the type for the functional arguments used for private functions in OrderFetcher
type QueryOption func(*pop.Query)

func (f orderFetcher) ListOrders(appCtx appcontext.AppContext, officeUserID uuid.UUID, params *services.ListOrderParams) ([]models.Move, int, error) {
func (f orderFetcher) ListOrders(appCtx appcontext.AppContext, officeUserID uuid.UUID, role roles.RoleType, params *services.ListOrderParams) ([]models.Move, int, error) {
var moves []models.Move

var officeUserGbloc string
Expand Down Expand Up @@ -117,10 +117,11 @@ func (f orderFetcher) ListOrders(appCtx appcontext.AppContext, officeUserID uuid
ppmTypeQuery := ppmTypeFilter(params.PPMType)
ppmStatusQuery := ppmStatusFilter(params.PPMStatus)
SCAssignedUserQuery := SCAssignedUserFilter(params.SCAssignedUser)
TOOAssignedUserQuery := TOOAssignedUserFilter(params.TOOAssignedUser)
sortOrderQuery := sortOrder(params.Sort, params.Order, ppmCloseoutGblocs)
counselingQuery := counselingOfficeFilter(params.CounselingOffice)
// Adding to an array so we can iterate over them and apply the filters after the query structure is set below
options := [19]QueryOption{branchQuery, locatorQuery, dodIDQuery, emplidQuery, lastNameQuery, originDutyLocationQuery, destinationDutyLocationQuery, moveStatusQuery, gblocQuery, submittedAtQuery, appearedInTOOAtQuery, requestedMoveDateQuery, ppmTypeQuery, closeoutInitiatedQuery, closeoutLocationQuery, ppmStatusQuery, sortOrderQuery, SCAssignedUserQuery, counselingQuery}
options := [20]QueryOption{branchQuery, locatorQuery, dodIDQuery, emplidQuery, lastNameQuery, originDutyLocationQuery, destinationDutyLocationQuery, moveStatusQuery, gblocQuery, submittedAtQuery, appearedInTOOAtQuery, requestedMoveDateQuery, ppmTypeQuery, closeoutInitiatedQuery, closeoutLocationQuery, ppmStatusQuery, sortOrderQuery, SCAssignedUserQuery, TOOAssignedUserQuery, counselingQuery}

var query *pop.Query
if ppmCloseoutGblocs {
Expand Down Expand Up @@ -161,6 +162,7 @@ func (f orderFetcher) ListOrders(appCtx appcontext.AppContext, officeUserID uuid
"LockedByOfficeUser",
"CounselingOffice",
"SCAssignedUser",
"TOOAssignedUser",
).InnerJoin("orders", "orders.id = moves.orders_id").
InnerJoin("service_members", "orders.service_member_id = service_members.id").
InnerJoin("mto_shipments", "moves.id = mto_shipments.move_id").
Expand All @@ -173,12 +175,18 @@ func (f orderFetcher) ListOrders(appCtx appcontext.AppContext, officeUserID uuid
LeftJoin("duty_locations as dest_dl", "dest_dl.id = orders.new_duty_location_id").
LeftJoin("office_users", "office_users.id = moves.locked_by").
LeftJoin("transportation_offices", "moves.counseling_transportation_office_id = transportation_offices.id").
LeftJoin("office_users as assigned_user", "moves.sc_assigned_id = assigned_user.id").
Where("show = ?", models.BoolPointer(true))

if !privileges.HasPrivilege(models.PrivilegeTypeSafety) {
query.Where("orders.orders_type != (?)", "SAFETY")
}
if role == roles.RoleTypeServicesCounselor {
query.LeftJoin("office_users as assigned_user", "moves.sc_assigned_id = assigned_user.id")
}
if role == roles.RoleTypeTOO {
query.LeftJoin("office_users as assigned_user", "moves.too_assigned_id = assigned_user.id")
}

if params.NeedsPPMCloseout != nil {
if *params.NeedsPPMCloseout {
query.InnerJoin("ppm_shipments", "ppm_shipments.shipment_id = mto_shipments.id").
Expand Down Expand Up @@ -626,6 +634,7 @@ func ppmStatusFilter(ppmStatus *string) QueryOption {
}
}
}

func SCAssignedUserFilter(scAssigned *string) QueryOption {
return func(query *pop.Query) {
if scAssigned != nil {
Expand All @@ -634,6 +643,14 @@ func SCAssignedUserFilter(scAssigned *string) QueryOption {
}
}

func TOOAssignedUserFilter(tooAssigned *string) QueryOption {
return func(query *pop.Query) {
if tooAssigned != nil {
query.Where("f_unaccent(lower(?)) % searchable_full_name(assigned_user.first_name, assigned_user.last_name)", *tooAssigned)
}
}
}

func closeoutLocationFilter(closeoutLocation *string, ppmCloseoutGblocs bool) QueryOption {
return func(query *pop.Query) {
// If the office user is in a closeout gbloc, every single result they're seeing will have
Expand Down
Loading

0 comments on commit 42a4cf6

Please sign in to comment.