Skip to content
Merged
Show file tree
Hide file tree
Changes from all 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
46 changes: 40 additions & 6 deletions broker/patron_request/service/action.go
Original file line number Diff line number Diff line change
Expand Up @@ -414,17 +414,17 @@ func (a *PatronRequestActionService) handleLenderAction(ctx common.ExtendedConte
case LenderActionRejectCancel:
return a.rejectCancelLenderRequest(ctx, pr)
case LenderActionCannotSupply:
return a.cannotSupplyLenderRequest(ctx, pr, params)
return a.cannotSupplyLenderRequest(ctx, pr, lms, illRequest, params)
case LenderActionAddCondition:
return a.addConditionsLenderRequest(ctx, pr, params)
case LenderActionShip:
return a.shipLenderRequest(ctx, pr, lms, illRequest, params)
case LenderActionMarkReceived:
return a.markReceivedLenderRequest(ctx, pr, lms)
case LenderActionAcceptCancel:
return a.acceptCancelLenderRequest(ctx, pr)
return a.acceptCancelLenderRequest(ctx, pr, lms, illRequest)
case LenderActionAskRetry:
return a.askRetryLenderRequest(ctx, pr, params)
return a.askRetryLenderRequest(ctx, pr, lms, illRequest, params)
case LenderActionSendNotification:
return a.sendNotificationLenderRequest(ctx, pr, params)
default:
Expand Down Expand Up @@ -738,6 +738,9 @@ func (a *PatronRequestActionService) willSupplyLenderRequest(ctx common.Extended
Barcode: itemBarcode,
})
if err != nil {
if cancelErr := lmsAdapter.CancelRequestItem(requestId, userId); cancelErr != nil {
err = errors.Join(err, fmt.Errorf("LMS CancelRequestItem compensation failed: %w", cancelErr))
}
status, result := logActionErrorAndReturnResult(ctx, "failed to save item", err)
return actionExecutionResult{status: status, result: result, pr: pr}
}
Expand All @@ -755,7 +758,30 @@ func (a *PatronRequestActionService) willSupplyLenderRequest(ctx common.Extended
return a.checkSupplyingResponse(status, eventResult, &result, httpStatus, pr)
}

func (a *PatronRequestActionService) cannotSupplyLenderRequest(ctx common.ExtendedContext, pr pr_db.PatronRequest, params actionParams) actionExecutionResult {
func (a *PatronRequestActionService) cancelLenderRequestItem(ctx common.ExtendedContext, pr pr_db.PatronRequest, lmsAdapter lms.LmsAdapter, illRequest iso18626.Request) error {
items, err := a.prRepo.GetItemsByPrId(ctx, pr.ID)
if err != nil {
return fmt.Errorf("failed to get items: %w", err)
}
if len(items) == 0 {
return nil
}
requestId := illRequest.Header.RequestingAgencyRequestId
if requestId == "" {
return errors.New("missing RequestingAgencyRequestId for LMS CancelRequestItem")
}
if !pr.RequesterSymbol.Valid || pr.RequesterSymbol.String == "" {
return errors.New("invalid requester symbol")
}
userId := lmsAdapter.InstitutionalPatron(pr.RequesterSymbol.String)
return lmsAdapter.CancelRequestItem(requestId, userId)
Comment thread
Copilot marked this conversation as resolved.
}

func (a *PatronRequestActionService) cannotSupplyLenderRequest(ctx common.ExtendedContext, pr pr_db.PatronRequest, lmsAdapter lms.LmsAdapter, illRequest iso18626.Request, params actionParams) actionExecutionResult {
if err := a.cancelLenderRequestItem(ctx, pr, lmsAdapter, illRequest); err != nil {
status, result := logActionErrorAndReturnResult(ctx, "LMS CancelRequestItem failed", err)
return actionExecutionResult{status: status, result: result, pr: pr}
}
result := events.EventResult{}
var reasonUnfilled *iso18626.TypeSchemeValuePair
if params.ReasonUnfilled != "" {
Expand Down Expand Up @@ -935,7 +961,11 @@ func (a *PatronRequestActionService) rejectCancelLenderRequest(ctx common.Extend
return a.checkSupplyingResponse(status, eventResult, &result, httpStatus, pr)
}

func (a *PatronRequestActionService) acceptCancelLenderRequest(ctx common.ExtendedContext, pr pr_db.PatronRequest) actionExecutionResult {
func (a *PatronRequestActionService) acceptCancelLenderRequest(ctx common.ExtendedContext, pr pr_db.PatronRequest, lmsAdapter lms.LmsAdapter, illRequest iso18626.Request) actionExecutionResult {
if err := a.cancelLenderRequestItem(ctx, pr, lmsAdapter, illRequest); err != nil {
status, result := logActionErrorAndReturnResult(ctx, "LMS CancelRequestItem failed", err)
return actionExecutionResult{status: status, result: result, pr: pr}
}
yes := iso18626.TypeYesNoY
result := events.EventResult{}
status, eventResult, httpStatus := a.sendSupplyingAgencyMessage(ctx, pr, &result,
Expand All @@ -948,7 +978,7 @@ func (a *PatronRequestActionService) acceptCancelLenderRequest(ctx common.Extend
return a.checkSupplyingResponse(status, eventResult, &result, httpStatus, pr)
}

func (a *PatronRequestActionService) askRetryLenderRequest(ctx common.ExtendedContext, pr pr_db.PatronRequest, params actionParams) actionExecutionResult {
func (a *PatronRequestActionService) askRetryLenderRequest(ctx common.ExtendedContext, pr pr_db.PatronRequest, lmsAdapter lms.LmsAdapter, illRequest iso18626.Request, params actionParams) actionExecutionResult {
var deliveryInfo *iso18626.DeliveryInfo
switch params.ReasonRetry {
case "":
Expand All @@ -966,6 +996,10 @@ func (a *PatronRequestActionService) askRetryLenderRequest(ctx common.ExtendedCo
status, result := logActionErrorAndReturnResult(ctx, fmt.Sprintf("unsupported reasonRetry %q for ask-retry action (supported: %q)", params.ReasonRetry, iso18626.ReasonRetryNotFoundAsCited), nil)
return actionExecutionResult{status: status, result: result, pr: pr}
}
if err := a.cancelLenderRequestItem(ctx, pr, lmsAdapter, illRequest); err != nil {
status, result := logActionErrorAndReturnResult(ctx, "LMS CancelRequestItem failed", err)
return actionExecutionResult{status: status, result: result, pr: pr}
}
Comment thread
adamdickmeiss marked this conversation as resolved.
reasonRetry := iso18626.TypeSchemeValuePair{Text: params.ReasonRetry}
result := events.EventResult{}
status, eventResult, httpStatus := a.sendSupplyingAgencyMessage(ctx, pr, &result,
Expand Down
Loading
Loading