Bug 27797: Make POST /holds use the stashed koha.overrides
Bug 26181 introduced a way to override behavior through a new header, x-koha-override. And bug 27760 introduced a generic approach to handle x-koha-override. This patchset makes the POST /api/v1/holds route rely on this new way of handling x-koha-override instead of doing it manually. The header is added to the spec as a parameter. Note: the header should be defined as: "type": "array", "collectionFormat": "csv", "items": { "type": "string", "enum": [ "any" ] } but the versions of JSON::Validator we use have lots of bugs related to header type coercion, so it just doesn't work. The changelog for JSON::Validator is fairly elocuent about it. The override now takes a list of valid keywords (right now only 'any' but it would be fairly straight-forward to add a fairly granular set of options based on each possible AddReserve failure. To test: 1. Apply this patches 2. Run: $ kshell k$ prove t/db_dependent/api/v1/holds.t => SUCCESS: Tests pass! 4. Sign off! Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com> Signed-off-by: Nick Clemens <nick@bywatersolutions.com> Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
This commit is contained in:
parent
66e7d7fd94
commit
098e93e7cc
2 changed files with 12 additions and 8 deletions
|
@ -171,14 +171,10 @@ sub add {
|
|||
$can_place_hold->{status} = 'tooManyReserves';
|
||||
}
|
||||
|
||||
my $override_header = $c->req->headers->header('x-koha-override');
|
||||
$override_header = decode_json($override_header)
|
||||
if $override_header;
|
||||
my $overrides = $c->stash('koha.overrides');
|
||||
my $can_override = $overrides->{any} and C4::Context->preference('AllowHoldPolicyOverride');
|
||||
|
||||
my $can_override = $override_header->{AllowHoldPolicyOverride}
|
||||
and C4::Context->preference('AllowHoldPolicyOverride');
|
||||
|
||||
unless ($can_override || $can_place_hold->{status} eq 'OK' ) {
|
||||
unless ( $can_override || $can_place_hold->{status} eq 'OK' ) {
|
||||
return $c->render(
|
||||
status => 403,
|
||||
openapi =>
|
||||
|
|
|
@ -171,7 +171,8 @@
|
|||
"x-mojo-to": "Holds#add",
|
||||
"operationId": "addHold",
|
||||
"tags": ["patrons", "holds"],
|
||||
"parameters": [{
|
||||
"parameters": [
|
||||
{
|
||||
"name": "body",
|
||||
"in": "body",
|
||||
"description": "A JSON object containing informations about the new hold",
|
||||
|
@ -215,6 +216,13 @@
|
|||
},
|
||||
"required": [ "patron_id", "pickup_library_id" ]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "x-koha-override",
|
||||
"description": "Comma-separated list of overrides (valid values: any)",
|
||||
"in": "header",
|
||||
"type": "string",
|
||||
"required": false
|
||||
}
|
||||
],
|
||||
"consumes": ["application/json"],
|
||||
|
|
Loading…
Reference in a new issue