Bug 15524: (QA follow-up) Change Can[Book|Item]BeReserved to return hashref, pass...
[koha.git] / Koha / REST / V1 / Hold.pm
index 99af461..c152fb7 100644 (file)
@@ -28,7 +28,7 @@ use Koha::Holds;
 use Koha::DateUtils;
 
 sub list {
-    my ($c, $args, $cb) = @_;
+    my $c = shift->openapi->valid_input or return;
 
     my $params = $c->req->query_params->to_hash;
     my @valid_params = Koha::Holds->_resultset->result_source->columns;
@@ -37,11 +37,11 @@ sub list {
     }
     my $holds = Koha::Holds->search($params);
 
-    return $c->$cb($holds, 200);
+    return $c->render(status => 200, openapi => $holds);
 }
 
 sub add {
-    my ($c, $args, $cb) = @_;
+    my $c = shift->openapi->valid_input or return;
 
     my $body = $c->req->json;
 
@@ -50,20 +50,22 @@ sub add {
     my $itemnumber = $body->{itemnumber};
     my $branchcode = $body->{branchcode};
     my $expirationdate = $body->{expirationdate};
+    my $itemtype = $body->{itemtype};
+
     my $borrower = Koha::Patrons->find($borrowernumber);
     unless ($borrower) {
-        return $c->$cb({error => "Borrower not found"}, 404);
+        return $c->render( status  => 404,
+                           openapi => {error => "Borrower not found"} );
     }
 
     unless ($biblionumber or $itemnumber) {
-        return $c->$cb({
+        return $c->render( status => 400, openapi => {
             error => "At least one of biblionumber, itemnumber should be given"
-        }, 400);
+        } );
     }
     unless ($branchcode) {
-        return $c->$cb({
-            error => "Branchcode is required"
-        }, 400);
+        return $c->render( status  => 400,
+                           openapi => { error => "Branchcode is required" } );
     }
 
     my $biblio;
@@ -71,14 +73,15 @@ sub add {
         my $item = Koha::Items->find( $itemnumber );
         $biblio = $item->biblio;
         if ($biblionumber and $biblionumber != $biblio->biblionumber) {
-            return $c->$cb({
-                error => "Item $itemnumber doesn't belong to biblio $biblionumber"
-            }, 400);
+            return $c->render(
+                status => 400,
+                openapi => {
+                    error => "Item $itemnumber doesn't belong to biblio $biblionumber"
+                });
         }
         $biblionumber ||= $biblio->biblionumber;
-        $biblio->unblessed; # FIXME remove later
     } else {
-        $biblio = C4::Biblio::GetBiblio($biblionumber);
+        $biblio = Koha::Biblios->find( $biblionumber );
     }
 
     my $can_reserve =
@@ -86,10 +89,10 @@ sub add {
       ? CanItemBeReserved( $borrowernumber, $itemnumber )
       : CanBookBeReserved( $borrowernumber, $biblionumber );
 
-    unless ($can_reserve eq 'OK') {
-        return $c->$cb({
+    unless ($can_reserve->{status} eq 'OK') {
+        return $c->render( status => 403, openapi => {
             error => "Reserve cannot be placed. Reason: $can_reserve"
-        }, 403);
+        } );
     }
 
     my $priority = C4::Reserves::CalculatePriority($biblionumber);
@@ -102,27 +105,28 @@ sub add {
 
     my $reserve_id = C4::Reserves::AddReserve($branchcode, $borrowernumber,
         $biblionumber, undef, $priority, undef, $expirationdate, undef,
-        $biblio->{title}, $itemnumber);
+        $biblio->title, $itemnumber, undef, $itemtype);
 
     unless ($reserve_id) {
-        return $c->$cb({
+        return $c->render( status => 500, openapi => {
             error => "Error while placing reserve. See Koha logs for details."
-        }, 500);
+        } );
     }
 
     my $reserve = Koha::Holds->find($reserve_id);
 
-    return $c->$cb($reserve, 201);
+    return $c->render( status => 201, openapi => $reserve );
 }
 
 sub edit {
-    my ($c, $args, $cb) = @_;
+    my $c = shift->openapi->valid_input or return;
 
-    my $reserve_id = $args->{reserve_id};
-    my $reserve = C4::Reserves::GetReserve($reserve_id);
+    my $reserve_id = $c->validation->param('reserve_id');
+    my $hold = Koha::Holds->find( $reserve_id );
 
-    unless ($reserve) {
-        return $c->$cb({error => "Reserve not found"}, 404);
+    unless ($hold) {
+        return $c->render( status  => 404,
+                           openapi => {error => "Reserve not found"} );
     }
 
     my $body = $c->req->json;
@@ -140,27 +144,28 @@ sub edit {
         branchcode => $branchcode,
         rank => $priority,
         suspend_until => $suspend_until,
+        itemnumber => $hold->itemnumber
     };
 
     C4::Reserves::ModReserve($params);
-    $reserve = Koha::Holds->find($reserve_id);
+    $hold = Koha::Holds->find($reserve_id);
 
-    return $c->$cb($reserve, 200);
+    return $c->render( status => 200, openapi => $hold );
 }
 
 sub delete {
-    my ($c, $args, $cb) = @_;
+    my $c = shift->openapi->valid_input or return;
 
-    my $reserve_id = $args->{reserve_id};
-    my $reserve = C4::Reserves::GetReserve($reserve_id);
+    my $reserve_id = $c->validation->param('reserve_id');
+    my $hold = Koha::Holds->find( $reserve_id );
 
-    unless ($reserve) {
-        return $c->$cb({error => "Reserve not found"}, 404);
+    unless ($hold) {
+        return $c->render( status => 404, openapi => {error => "Reserve not found"} );
     }
 
-    C4::Reserves::CancelReserve({ reserve_id => $reserve_id });
+    $hold->cancel;
 
-    return $c->$cb({}, 200);
+    return $c->render( status => 200, openapi => {} );
 }
 
 1;