| Lines 27-33
          use Koha::Holds;
      
      
        Link Here | 
        
          | 27 | use Koha::DateUtils; | 27 | use Koha::DateUtils; | 
        
          | 28 |  | 28 |  | 
        
          | 29 | sub list { | 29 | sub list { | 
          
            
              | 30 |     my ($c, $args, $cb) = @_; | 30 |     my $c = shift->openapi->valid_input or return; | 
        
          | 31 |  | 31 |  | 
        
          | 32 |     my $params = $c->req->query_params->to_hash; | 32 |     my $params = $c->req->query_params->to_hash; | 
        
          | 33 |     my @valid_params = Koha::Holds->_resultset->result_source->columns; | 33 |     my @valid_params = Koha::Holds->_resultset->result_source->columns; | 
  
    | Lines 36-46
          sub list {
      
      
        Link Here | 
        
          | 36 |     } | 36 |     } | 
        
          | 37 |     my $holds = Koha::Holds->search($params); | 37 |     my $holds = Koha::Holds->search($params); | 
        
          | 38 |  | 38 |  | 
          
            
              | 39 |     return $c->$cb($holds, 200); | 39 |     return $c->render(status => 200, openapi => $holds); | 
        
          | 40 | } | 40 | } | 
        
          | 41 |  | 41 |  | 
        
          | 42 | sub add { | 42 | sub add { | 
          
            
              | 43 |     my ($c, $args, $cb) = @_; | 43 |     my $c = shift->openapi->valid_input or return; | 
        
          | 44 |  | 44 |  | 
        
          | 45 |     my $body = $c->req->json; | 45 |     my $body = $c->req->json; | 
        
          | 46 |  | 46 |  | 
  
    | Lines 51-76
          sub add {
      
      
        Link Here | 
        
          | 51 |     my $expirationdate = $body->{expirationdate}; | 51 |     my $expirationdate = $body->{expirationdate}; | 
        
          | 52 |     my $borrower = Koha::Patrons->find($borrowernumber); | 52 |     my $borrower = Koha::Patrons->find($borrowernumber); | 
        
          | 53 |     unless ($borrower) { | 53 |     unless ($borrower) { | 
          
            
              | 54 |         return $c->$cb({error => "Borrower not found"}, 404); | 54 |         return $c->render( status  => 404, | 
            
              |  |  | 55 |                            openapi => {error => "Borrower not found"} ); | 
        
          | 55 |     } | 56 |     } | 
        
          | 56 |  | 57 |  | 
        
          | 57 |     unless ($biblionumber or $itemnumber) { | 58 |     unless ($biblionumber or $itemnumber) { | 
          
            
              | 58 |         return $c->$cb({ | 59 |         return $c->render( status => 400, openapi => { | 
        
          | 59 |             error => "At least one of biblionumber, itemnumber should be given" | 60 |             error => "At least one of biblionumber, itemnumber should be given" | 
          
            
              | 60 |         }, 400); | 61 |         } ); | 
        
          | 61 |     } | 62 |     } | 
        
          | 62 |     unless ($branchcode) { | 63 |     unless ($branchcode) { | 
          
            
              | 63 |         return $c->$cb({ | 64 |         return $c->render( status  => 400, | 
            
              | 64 |             error => "Branchcode is required" | 65 |                            openapi => { error => "Branchcode is required" } ); | 
            
              | 65 |         }, 400); |  |  | 
        
          | 66 |     } | 66 |     } | 
        
          | 67 |  | 67 |  | 
        
          | 68 |     if ($itemnumber) { | 68 |     if ($itemnumber) { | 
        
          | 69 |         my $item_biblionumber = C4::Biblio::GetBiblionumberFromItemnumber($itemnumber); | 69 |         my $item_biblionumber = C4::Biblio::GetBiblionumberFromItemnumber($itemnumber); | 
        
          | 70 |         if ($biblionumber and $biblionumber != $item_biblionumber) { | 70 |         if ($biblionumber and $biblionumber != $item_biblionumber) { | 
          
            
              | 71 |             return $c->$cb({ | 71 |             return $c->render( status => 400, openapi => { | 
        
          | 72 |                 error => "Item $itemnumber doesn't belong to biblio $biblionumber" | 72 |                 error => "Item $itemnumber doesn't belong to biblio $biblionumber" | 
          
            
              | 73 |             }, 400); | 73 |             } ); | 
        
          | 74 |         } | 74 |         } | 
        
          | 75 |         $biblionumber ||= $item_biblionumber; | 75 |         $biblionumber ||= $item_biblionumber; | 
        
          | 76 |     } | 76 |     } | 
  
    | Lines 83-91
          sub add {
      
      
        Link Here | 
        
          | 83 |       : CanBookBeReserved( $borrowernumber, $biblionumber ); | 83 |       : CanBookBeReserved( $borrowernumber, $biblionumber ); | 
        
          | 84 |  | 84 |  | 
        
          | 85 |     unless ($can_reserve eq 'OK') { | 85 |     unless ($can_reserve eq 'OK') { | 
          
            
              | 86 |         return $c->$cb({ | 86 |         return $c->render( status => 403, openapi => { | 
        
          | 87 |             error => "Reserve cannot be placed. Reason: $can_reserve" | 87 |             error => "Reserve cannot be placed. Reason: $can_reserve" | 
          
            
              | 88 |         }, 403); | 88 |         } ); | 
        
          | 89 |     } | 89 |     } | 
        
          | 90 |  | 90 |  | 
        
          | 91 |     my $priority = C4::Reserves::CalculatePriority($biblionumber); | 91 |     my $priority = C4::Reserves::CalculatePriority($biblionumber); | 
  
    | Lines 101-124
          sub add {
      
      
        Link Here | 
        
          | 101 |         $biblio->{title}, $itemnumber); | 101 |         $biblio->{title}, $itemnumber); | 
        
          | 102 |  | 102 |  | 
        
          | 103 |     unless ($reserve_id) { | 103 |     unless ($reserve_id) { | 
          
            
              | 104 |         return $c->$cb({ | 104 |         return $c->render( status => 500, openapi => { | 
        
          | 105 |             error => "Error while placing reserve. See Koha logs for details." | 105 |             error => "Error while placing reserve. See Koha logs for details." | 
          
            
              | 106 |         }, 500); | 106 |         } ); | 
        
          | 107 |     } | 107 |     } | 
        
          | 108 |  | 108 |  | 
        
          | 109 |     my $reserve = Koha::Holds->find($reserve_id); | 109 |     my $reserve = Koha::Holds->find($reserve_id); | 
        
          | 110 |  | 110 |  | 
          
            
              | 111 |     return $c->$cb($reserve, 201); | 111 |     return $c->render( status => 201, openapi => $reserve ); | 
        
          | 112 | } | 112 | } | 
        
          | 113 |  | 113 |  | 
        
          | 114 | sub edit { | 114 | sub edit { | 
          
            
              | 115 |     my ($c, $args, $cb) = @_; | 115 |     my $c = shift->openapi->valid_input or return; | 
        
          | 116 |  | 116 |  | 
          
            
              | 117 |     my $reserve_id = $args->{reserve_id}; | 117 |     my $reserve_id = $c->validation->param('reserve_id'); | 
        
          | 118 |     my $reserve = C4::Reserves::GetReserve($reserve_id); | 118 |     my $reserve = C4::Reserves::GetReserve($reserve_id); | 
        
          | 119 |  | 119 |  | 
        
          | 120 |     unless ($reserve) { | 120 |     unless ($reserve) { | 
          
            
              | 121 |         return $c->$cb({error => "Reserve not found"}, 404); | 121 |         return $c->render( status  => 404, | 
            
              |  |  | 122 |                            openapi => {error => "Reserve not found"} ); | 
        
          | 122 |     } | 123 |     } | 
        
          | 123 |  | 124 |  | 
        
          | 124 |     my $body = $c->req->json; | 125 |     my $body = $c->req->json; | 
  
    | Lines 141-162
          sub edit {
      
      
        Link Here | 
        
          | 141 |     C4::Reserves::ModReserve($params); | 142 |     C4::Reserves::ModReserve($params); | 
        
          | 142 |     $reserve = Koha::Holds->find($reserve_id); | 143 |     $reserve = Koha::Holds->find($reserve_id); | 
        
          | 143 |  | 144 |  | 
          
            
              | 144 |     return $c->$cb($reserve, 200); | 145 |     return $c->render( status => 200, openapi => $reserve ); | 
        
          | 145 | } | 146 | } | 
        
          | 146 |  | 147 |  | 
        
          | 147 | sub delete { | 148 | sub delete { | 
          
            
              | 148 |     my ($c, $args, $cb) = @_; | 149 |     my $c = shift->openapi->valid_input or return; | 
        
          | 149 |  | 150 |  | 
          
            
              | 150 |     my $reserve_id = $args->{reserve_id}; | 151 |     my $reserve_id = $c->validation->param('reserve_id'); | 
        
          | 151 |     my $reserve = C4::Reserves::GetReserve($reserve_id); | 152 |     my $reserve = C4::Reserves::GetReserve($reserve_id); | 
        
          | 152 |  | 153 |  | 
        
          | 153 |     unless ($reserve) { | 154 |     unless ($reserve) { | 
          
            
              | 154 |         return $c->$cb({error => "Reserve not found"}, 404); | 155 |         return $c->render( status => 404, openapi => {error => "Reserve not found"} ); | 
        
          | 155 |     } | 156 |     } | 
        
          | 156 |  | 157 |  | 
        
          | 157 |     C4::Reserves::CancelReserve({ reserve_id => $reserve_id }); | 158 |     C4::Reserves::CancelReserve({ reserve_id => $reserve_id }); | 
        
          | 158 |  | 159 |  | 
          
            
              | 159 |     return $c->$cb({}, 200); | 160 |     return $c->render( status => 200, openapi => {} ); | 
        
          | 160 | } | 161 | } | 
        
          | 161 |  | 162 |  | 
        
          | 162 | 1; | 163 | 1; |