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
4 changes: 4 additions & 0 deletions service/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -216,6 +216,10 @@ dependencies {

// Iso java classes
implementation 'org.olf.rs.iso18626:iso18626-client:1.2'

implementation("com.ibm.icu:icu4j:78.2")
implementation("com.github.zafarkhaja:java-semver:0.10.2")
implementation("org.antlr:antlr4-runtime:4.9.2")
}

bootRun {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ class ActionEventResultList implements MultiTenant<ActionEventResultList> {

// SLNP requester event lists
static public final String SLNP_REQUESTER_CANCEL = 'slnpRequesterCancel';
static public final String SLNP_REQUESTER_CLOSE_MANUAL = 'slnpRequesterCloseManual'
static public final String SLNP_REQUESTER_RECEIVED = 'slnpRequesterReceived';
static public final String SLNP_REQUESTER_ABORTED = 'slnpRequesterAborted';
static public final String SLNP_REQUESTER_ISO_18626_STATUS_CHANGE = 'slnpRequesterISO18626StatusChange';
Expand All @@ -65,6 +66,7 @@ class ActionEventResultList implements MultiTenant<ActionEventResultList> {
// SLNP responder event lists
static public final String SLNP_RESPONDER_RESPOND_YES = 'slnpResponderRespondYes'
static public final String SLNP_RESPONDER_CANNOT_SUPPLY = 'slnpResponderCannotSupply'
static public final String SLNP_RESPONDER_CLOSE_MANUAL = 'slnpResponderCloseManual'
static public final String SLNP_RESPONDER_ABORT_SUPPLY = 'slnpResponderAbortSupply'
static public final String SLNP_RESPONDER_SUPPLIER_PRINT_PULL_SLIP = "slnpResponderSupplierPrintPullSlip"
static public final String SLNP_RESPONDER_SUPPLIER_FILL_AND_MARK_SHIPPED = "slnpResponderSupplierFillAndMarkShipped"
Expand All @@ -77,11 +79,13 @@ class ActionEventResultList implements MultiTenant<ActionEventResultList> {
static public final String SLNP_NON_RETURNABLE_REQUESTER_RECEIVED = 'slnpNonReturnableRequesterReceived';
static public final String SLNP_NON_RETURNABLE_REQUESTER_MANUALLY_MARK_SUPPLIED = 'slnpNonReturnableRequesterManuallyMarkSupplied';
static public final String SLNP_NON_RETURNABLE_REQUESTER_MANUALLY_MARK_AVAILABLE = 'slnpNonReturnableRequesterManuallyMarkAvailable';
static public final String SLNP_NON_RETURNABLE_REQUESTER_CLOSE_MANUAL = 'slnpNonReturnableRequesterCloseManual'

// SLNP responder non returnable event lists
static public final String SLNP_NON_RETURNABLE_RESPONDER_CANNOT_SUPPLY = 'slnpNonReturnableResponderCannotSupply'
static public final String SLNP_NON_RETURNABLE_RESPONDER_SUPPLIER_PRINT_PULL_SLIP = "slnpNonReturnableResponderSupplierPrintPullSlip"
static public final String SLNP_NON_RETURNABLE_RESPONDER_SUPPLIER_SUPPLIES_DOCUMENT = "slnpNonReturnableResponderSupplierSuppliesDocument"
static public final String SLNP_NON_RETURNABLE_RESPONDER_CLOSE_MANUAL = "slnpNonReturnableResponderSupplierCloseManual"

// The responder lists
static public final String RESPONDER_ADD_CONDITIONAL = 'responderAddConditional';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@ import org.olf.rs.PatronRequest;
import org.olf.rs.statemodel.AbstractAction;
import org.olf.rs.statemodel.ActionResult;
import org.olf.rs.statemodel.ActionResultDetails;
import org.olf.rs.statemodel.Actions;
import org.olf.rs.statemodel.Actions
import org.olf.rs.statemodel.StateModel;
import org.olf.rs.statemodel.Status;
import org.olf.rs.statemodel.StatusService;

Expand Down Expand Up @@ -32,8 +33,8 @@ public class ActionManualCloseService extends AbstractAction {
// Have we been supplied a valid close status
if (closeStatus && closeStatus.terminal) {
reshareActionService.sendMessage(request, [note: "The ${request.isRequester ? 'requester' : 'responder'} has manually closed this request."], actionResultDetails);
actionResultDetails.auditMessage = 'Manually closed';
actionResultDetails.qualifier = parameters.terminalState;
actionResultDetails.auditMessage = 'Manually closed' ;
actionResultDetails.qualifier = parameters.terminalState ;
} else {
actionResultDetails.result = ActionResult.INVALID_PARAMETERS;
actionResultDetails.auditMessage = "Attemped manualClose action with non-terminal state: ${s} ${parameters?.terminalState}";
Expand Down

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"action": "manualClose",
"actionParams": { "terminalState" : "SLNP_REQ_DOCUMENT_SUPPLIED" }
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"action": "manualClose",
"actionParams": { "terminalState" : "SLNP_RES_UNFILLED" }
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"action": "manualClose",
"actionParams": { "terminalState" : "SLNP_REQ_CANCELLED" }
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"action": "manualClose",
"actionParams": { "terminalState" : "SLNP_RES_COMPLETE" }
}
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,37 @@ public class SLNPNonReturnablesStateModelData {
nextActionEvent : null
];

private static Map slnpNonReturnableRequesterManualCloseCancelled = [
code: 'slnpNonReturnableRequesterManualCloseCancelled',
description: 'Manually closing because the request is cancelled',
result: true,
status: Status.SLNP_REQUESTER_CANCELLED,
qualifier: Status.SLNP_REQUESTER_CANCELLED,
saveRestoreState: null,
nextActionEvent : null
];

private static Map slnpNonReturnableRequesterManualCloseDocumentSupplied = [
code: 'slnpNonReturnableRequesterManualCloseDocumentSupplied',
description: 'Manually closing because the document was supplied',
result: true,
status: Status.SLNP_REQUESTER_DOCUMENT_SUPPLIED,
qualifier: Status.SLNP_REQUESTER_DOCUMENT_SUPPLIED,
saveRestoreState: null,
nextActionEvent : null
];

private static Map slnpNonReturnableRequesterManualClosePatronInvalid = [
code: 'slnpNonReturnableRequesterManualClosePatronInvalid',
description: 'Manually closing because the patron is invalid',
result: true,
status: Status.SLNP_REQUESTER_PATRON_INVALID,
qualifier: Status.SLNP_REQUESTER_PATRON_INVALID,
saveRestoreState: null,
nextActionEvent : null
];


private static Map slnpNonReturnableResponderSupplierSuppliesDocument = [
code: 'slnpNonReturnableResponderSupplierSuppliesDocument',
description: 'The document has been uploaded to a server in ZFL to fill the request. No message is sent.',
Expand All @@ -85,6 +116,50 @@ public class SLNPNonReturnablesStateModelData {
nextActionEvent : null
];

private static Map slnpNonReturnableResponderManualCloseUnfilled = [
code: 'slnpNonReturnableResponderManualCloseUnfilled',
description: 'Manually closing because the request was unfilled',
result: true,
status: Status.SLNP_RESPONDER_UNFILLED,
qualifier: Status.SLNP_RESPONDER_UNFILLED,
saveRestoreState: null,
nextActionEvent : null
];

private static Map slnpNonReturnableResponderManualCloseAborted = [
code: 'slnpNonReturnableResponderManualCloseAborted',
description: 'Manually closing because the request was aborted',
result: true,
status: Status.SLNP_RESPONDER_ABORTED,
qualifier: Status.SLNP_RESPONDER_ABORTED,
saveRestoreState: null,
nextActionEvent : null
];

private static Map slnpNonReturnableResponderManualCloseComplete = [
code: 'slnpNonReturnableResponderManualCloseComplete',
description: 'Manually closing because the request was completed',
result: true,
status: Status.SLNP_RESPONDER_COMPLETE,
qualifier: Status.SLNP_RESPONDER_COMPLETE,
saveRestoreState: null,
nextActionEvent : null
];


//Define Lists

private static Map slnpNonReturnableResponderCloseManualList = [
code: ActionEventResultList.SLNP_NON_RETURNABLE_RESPONDER_CLOSE_MANUAL,
description: 'The responder is terminating this request',
model: StateModel.MODEL_SLNP_RESPONDER,
results: [
slnpNonReturnableResponderManualCloseUnfilled,
slnpNonReturnableResponderManualCloseAborted,
slnpNonReturnableResponderManualCloseComplete
]
];

// Requester Event lists

private static Map slnpNonReturnableRequesterCancelList = [
Expand Down Expand Up @@ -145,6 +220,17 @@ public class SLNPNonReturnablesStateModelData {
]
];

private static Map slnpNonReturnableRequesterCloseManualList = [
code: ActionEventResultList.SLNP_NON_RETURNABLE_REQUESTER_CLOSE_MANUAL,
description: 'The requester is terminating this request',
model: StateModel.MODEL_SLNP_NON_RETURNABLE_REQUESTER,
results: [
slnpNonReturnableRequesterManualCloseCancelled,
slnpNonReturnableRequesterManualCloseDocumentSupplied,
slnpNonReturnableRequesterManualClosePatronInvalid,
]
];

// Responder Event lists

private static Map slnpNonReturnableResponderRespondCannotSupplyList = [
Expand Down Expand Up @@ -181,10 +267,12 @@ public class SLNPNonReturnablesStateModelData {
slnpNonReturnableRequesterReceivedList,
slnpNonReturnableRequesterManuallyMarkSuppliedList,
slnpNonReturnableRequesterManuallyMarkAvailableList,
slnpNonReturnableRequesterCloseManualList,

slnpNonReturnableResponderRespondCannotSupplyList,
slnpNonReturnableResponderSupplierPrintPullSlipList,
slnpNonReturnableResponderSupplierSuppliesDocumentList
slnpNonReturnableResponderSupplierSuppliesDocumentList,
slnpNonReturnableResponderCloseManualList
];

public static void loadStatusData() {
Expand Down Expand Up @@ -241,8 +329,14 @@ public class SLNPNonReturnablesStateModelData {
// SLNP_RES_AWAIT_PICKING OR "Searching"
AvailableAction.ensure(StateModel.MODEL_SLNP_NON_RETURNABLE_RESPONDER, Status.SLNP_RESPONDER_AWAIT_PICKING, Actions.ACTION_SLNP_RESPONDER_SUPPLIER_SUPPLIES_DOCUMENT, AvailableAction.TRIGGER_TYPE_MANUAL, ActionEventResultList.SLNP_NON_RETURNABLE_RESPONDER_SUPPLIER_SUPPLIES_DOCUMENT);
AvailableAction.ensure(StateModel.MODEL_SLNP_NON_RETURNABLE_RESPONDER, Status.SLNP_RESPONDER_AWAIT_PICKING, Actions.ACTION_RESPONDER_SUPPLIER_CANNOT_SUPPLY, AvailableAction.TRIGGER_TYPE_MANUAL, ActionEventResultList.SLNP_NON_RETURNABLE_RESPONDER_CANNOT_SUPPLY);

// Manual Close
AvailableActionData.assignToNonTerminalStates(StateModel.MODEL_SLNP_NON_RETURNABLE_REQUESTER, Actions.ACTION_MANUAL_CLOSE, AvailableAction.TRIGGER_TYPE_MANUAL, ActionEventResultList.SLNP_NON_RETURNABLE_REQUESTER_CLOSE_MANUAL)
AvailableActionData.assignToNonTerminalStates(StateModel.MODEL_SLNP_NON_RETURNABLE_RESPONDER, Actions.ACTION_MANUAL_CLOSE, AvailableAction.TRIGGER_TYPE_MANUAL, ActionEventResultList.SLNP_NON_RETURNABLE_RESPONDER_CLOSE_MANUAL)
}



public static void loadActionEventData() {
ActionEvent.ensure(Actions.ACTION_SLNP_NON_RETURNABLE_REQUESTER_REQUESTER_RECEIVED, 'Mark received and complete the request. This action is for BVB.', true, StateModel.MODEL_SLNP_NON_RETURNABLE_REQUESTER.capitalize() + Actions.ACTION_SLNP_NON_RETURNABLE_REQUESTER_REQUESTER_RECEIVED.capitalize(), ActionEventResultList.SLNP_NON_RETURNABLE_REQUESTER_RECEIVED, true);
ActionEvent.ensure(Actions.ACTION_SLNP_RESPONDER_SUPPLIER_SUPPLIES_DOCUMENT, 'The document has been uploaded to a server in ZFL to fill the request. No message is sent.', true, StateModel.MODEL_SLNP_NON_RETURNABLE_RESPONDER.capitalize() + Actions.ACTION_SLNP_RESPONDER_SUPPLIER_SUPPLIES_DOCUMENT.capitalize(), ActionEventResultList.SLNP_NON_RETURNABLE_RESPONDER_SUPPLIER_SUPPLIES_DOCUMENT, true);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,46 @@ public class SLNPStateModelData {
nextActionEvent : null
];

private static Map slnpRequesterManualCloseCancelled = [
code: 'slnpRequesterManualCloseCancelled',
description: 'Requester is closing this request as cancelled',
result: true,
status: Status.SLNP_REQUESTER_CANCELLED,
qualifier: Status.SLNP_REQUESTER_CANCELLED,
saveRestoreState: null,
nextActionEvent: null
];

private static Map slnpRequesterManualCloseComplete = [
code: 'slnpRequesterManualCloseComplete',
description: 'Requester is closing this request as completed',
result: true,
status: Status.SLNP_REQUESTER_COMPLETE,
qualifier: Status.SLNP_REQUESTER_COMPLETE,
saveRestoreState: null,
nextActionEvent: null
];

private static Map slnpRequesterManualCloseItemLost = [
code: 'slnpRequesterManualCloseItemLost',
description: 'Requester is closing this request as lost',
result: true,
status: Status.SLNP_REQUESTER_ITEM_LOST,
qualifier: Status.SLNP_REQUESTER_ITEM_LOST,
saveRestoreState: null,
nextActionEvent: null
];

private static Map slnpRequesterManualClosePatronInvalid = [
code: 'slnpRequesterManualClosePatronInvalid',
description: 'Requester is closing this request due to invalid patron',
result: true,
status: Status.SLNP_REQUESTER_PATRON_INVALID,
qualifier: Status.SLNP_REQUESTER_PATRON_INVALID,
saveRestoreState: null,
nextActionEvent: null
];

public static Map slnpResponderRespondYes = [
code: 'slnpResponderRespondYes',
description: 'Item has been located and we expect to supply, staff is awaiting printing pull slip',
Expand Down Expand Up @@ -244,6 +284,7 @@ public class SLNPStateModelData {
nextActionEvent: null
];


private static Map slnpResponderNewPatronRequestIndRequestItemUnfilled = [
code: 'slnpResponderNewPatronRequestIndRequestItemUnfilled',
description: 'Event triggered by incoming request, respond with message Unfilled',
Expand All @@ -254,6 +295,36 @@ public class SLNPStateModelData {
nextActionEvent: null
];

private static Map slnpResponderManualCloseUnfilled = [
code: 'slnpResponderManualCloseUnfilled',
description: 'Responder is closing this request as unfilled',
result: true,
status: Status.SLNP_RESPONDER_UNFILLED,
qualifier: Status.SLNP_RESPONDER_UNFILLED, //Qualifier matches state name?
saveRestoreState: null,
nextActionEvent: null
]

private static Map slnpResponderManualCloseAborted = [
code: 'slnpResponderManualCloseAborted',
description: 'Responder is closing this request as aborted',
result: true,
status: Status.SLNP_RESPONDER_ABORTED,
qualifier: Status.SLNP_RESPONDER_ABORTED, //Qualifier matches state name?
saveRestoreState: null,
nextActionEvent: null
]

private static Map slnpResponderManualCloseComplete = [
code: 'slnpResponderManualCloseComplete',
description: 'Responder is closing this request as completed',
result: true,
status: Status.SLNP_RESPONDER_COMPLETE,
qualifier: Status.SLNP_RESPONDER_COMPLETE, //Qualifier matches state name?
saveRestoreState: null,
nextActionEvent: null
]

// SLNP Requester lists

private static Map slnpRequesterCancelList = [
Expand Down Expand Up @@ -321,6 +392,18 @@ public class SLNPStateModelData {
]
];

private static Map slnpRequesterCloseManualList = [
code: ActionEventResultList.SLNP_REQUESTER_CLOSE_MANUAL,
description: 'The requester is terminating this request',
model: StateModel.MODEL_SLNP_REQUESTER,
results: [
slnpRequesterManualCloseCancelled,
slnpRequesterManualCloseComplete,
slnpRequesterManualCloseItemLost,
slnpRequesterManualClosePatronInvalid
]
]

// SLNP responder lists
private static Map slnpResponderRespondYesList = [
code: ActionEventResultList.SLNP_RESPONDER_RESPOND_YES,
Expand Down Expand Up @@ -390,21 +473,34 @@ public class SLNPStateModelData {
]
];

private static Map slnpResponderCloseManualList = [
code: ActionEventResultList.SLNP_RESPONDER_CLOSE_MANUAL,
description: 'The responder is terminating this request',
model: StateModel.MODEL_SLNP_RESPONDER,
results: [
slnpResponderManualCloseUnfilled,
slnpResponderManualCloseAborted,
slnpResponderManualCloseComplete
]
]

private static Map[] resultLists = [
slnpRequesterCancelList,
slnpRequesterReceivedList,
slnpRequesterAbortedList,
slnpRequesterCheckedInList,
slnpRequesterShippedReturnList,
slnpRequesterISO18626StatusChangeList,
slnpRequesterCloseManualList,
slnpResponderRespondYesList,
slnpResponderRespondCannotSupplyList,
slnpResponderAbortSupplyList,
slnpResponderSupplierPrintPullSlipList,
slnpResponderSupplierFillAndMarkShippedList,
slnpResponderCheckoutOfReshareList,
slnpResponderNewPatronRequestIndList,
slnpRequesterMarkItemLostList
slnpRequesterMarkItemLostList,
slnpResponderCloseManualList
];

public static void loadStatusData() {
Expand Down Expand Up @@ -500,6 +596,10 @@ public class SLNPStateModelData {

// SLNP_REQ_AWAITING_RETURN_SHIPPING OR "Awaiting return shipping"
AvailableAction.ensure(StateModel.MODEL_SLNP_REQUESTER, Status.SLNP_REQUESTER_AWAITING_RETURN_SHIPPING, Actions.ACTION_REQUESTER_SHIPPED_RETURN, AvailableAction.TRIGGER_TYPE_MANUAL, ActionEventResultList.SLNP_REQUESTER_SHIPPED_RETURN, null, Boolean.TRUE, Boolean.FALSE);

// Manual close
AvailableActionData.assignToNonTerminalStates(StateModel.MODEL_SLNP_REQUESTER, Actions.ACTION_MANUAL_CLOSE, AvailableAction.TRIGGER_TYPE_MANUAL, ActionEventResultList.SLNP_REQUESTER_CLOSE_MANUAL)
AvailableActionData.assignToNonTerminalStates(StateModel.MODEL_SLNP_RESPONDER, Actions.ACTION_MANUAL_CLOSE, AvailableAction.TRIGGER_TYPE_MANUAL, ActionEventResultList.SLNP_RESPONDER_CLOSE_MANUAL)
}

public static void loadActionEventData() {
Expand Down
Loading
Loading