@@ -, +, @@ - Run unit tests in t/db_dependent/api/v1/checkouts.t - Make POST request to http://yourlibrary/api/v1/checkouts/{checkout_id}/checkin/{library_id} where checkout_id is the ID of the checkout you're returning and library_id is the branchcode of the return library - Observe returned data - 400 incorrect params - 403 cannot be returned - 404 missing params - 201 item checked in --- Koha/REST/V1/Checkouts.pm | 46 ++++++++++++++++++++++++++++- api/v1/swagger/paths/checkouts.yaml | 36 ++++++++++++++++++++++ api/v1/swagger/swagger.yaml | 2 ++ 3 files changed, 83 insertions(+), 1 deletion(-) --- a/Koha/REST/V1/Checkouts.pm +++ a/Koha/REST/V1/Checkouts.pm @@ -22,7 +22,7 @@ use Mojo::JSON; use C4::Auth qw( haspermission ); use C4::Context; -use C4::Circulation qw( AddIssue AddRenewal CanBookBeRenewed ); +use C4::Circulation qw( AddIssue AddRenewal CanBookBeRenewed AddReturn ); use Koha::Checkouts; use Koha::Old::Checkouts; use Koha::Token; @@ -420,4 +420,48 @@ sub allows_renewal { }; } +=head3 checkin + +Return a checkout (check in) + +=cut + +sub checkin { + my $c = shift->openapi->valid_input or return; + + my $checkout_id = $c->param('checkout_id'); + my $checkout = Koha::Checkouts->find($checkout_id); + + unless ($checkout) { + return $c->render( + status => 400, + openapi => { error => "Checkout doesn't exist" } + ); + } + + my $item = $checkout->item; + + my $library_id = $c->param('library_id'); + + return try { + my ( $return_success, $return_messages, $old_checkout ) = AddReturn( $item->barcode, $library_id ); + + $c->res->headers->location( $c->req->url->to_string ); + + if ($return_success) { + return $c->render( + status => 201, + openapi => $old_checkout->to_api + ); + } else { + return $c->render( + status => 403, + openapi => $return_messages + ); + } + } catch { + $c->unhandled_exception($_); + }; +} + 1; --- a/api/v1/swagger/paths/checkouts.yaml +++ a/api/v1/swagger/paths/checkouts.yaml @@ -411,3 +411,39 @@ description: Under maintenance schema: $ref: "../swagger.yaml#/definitions/error" +"/checkouts/{checkout_id}/checkin/{library_id}": + post: + x-mojo-to: Checkouts#checkin + operationId: returnsCheckout + tags: + - checkouts + summary: Return a checkout (check in) + parameters: + - $ref: "../swagger.yaml#/parameters/checkout_id_pp" + - $ref: "../swagger.yaml#/parameters/library_id_pp" + produces: + - application/json + responses: + "201": + description: Checkout returned (checked in) + schema: + $ref: "../swagger.yaml#/definitions/checkout" + "400": + description: Missing or wrong parameters + schema: + $ref: "../swagger.yaml#/definitions/error" + "403": + description: Cannot return checkout + schema: + $ref: "../swagger.yaml#/definitions/error" + "404": + description: Checkout not found + schema: + $ref: "../swagger.yaml#/definitions/error" + "503": + description: Under maintenance + schema: + $ref: "../swagger.yaml#/definitions/error" + x-koha-authorization: + permissions: + circulate: circulate_remaining_permissions --- a/api/v1/swagger/swagger.yaml +++ a/api/v1/swagger/swagger.yaml @@ -205,6 +205,8 @@ paths: $ref: "./paths/checkouts.yaml#/~1checkouts~1{checkout_id}~1renewals" "/checkouts/{checkout_id}/renewal": $ref: "./paths/checkouts.yaml#/~1checkouts~1{checkout_id}~1renewal" + "/checkouts/{checkout_id}/checkin/{library_id}": + $ref: "./paths/checkouts.yaml#/~1checkouts~1{checkout_id}~1checkin~1{library_id}" "/checkouts/availability": $ref: "./paths/checkouts.yaml#/~1checkouts~1availability" /circulation-rules/kinds: --