View | Details | Raw Unified | Return to bug 13927
Collapse All | Expand All

(-)a/Koha/REST/V1/Borrowers/Reserves.pm (+51 lines)
Lines 8-13 use Koha::Borrowers; Link Here
8
use Koha::Borrower;
8
use Koha::Borrower;
9
9
10
use C4::Biblio;
10
use C4::Biblio;
11
use C4::Branch;
11
use C4::Dates;
12
use C4::Dates;
12
use C4::Reserves;
13
use C4::Reserves;
13
14
Lines 96-99 sub add_borrower_reserve { Link Here
96
    return $c->$cb($reserve, 201);
97
    return $c->$cb($reserve, 201);
97
}
98
}
98
99
100
sub options_borrower_reserve {
101
    my ($c, $args, $cb) = @_;
102
103
    my $borrowernumber = $args->{borrowernumber};
104
    my $borrower = Koha::Borrowers->find($borrowernumber);
105
    unless ($borrower) {
106
        return $c->$cb({error => "Borrower not found"}, 404);
107
    }
108
109
    my $body = $c->req->json;
110
111
    my $biblionumber = $body->{biblionumber};
112
    my $itemnumber = $body->{itemnumber};
113
114
    unless ($biblionumber or $itemnumber) {
115
        return $c->$cb({
116
            error => "At least one of biblionumber, itemnumber should be given"
117
        }, 400);
118
    }
119
120
    if ($itemnumber) {
121
        my $item_biblionumber = C4::Biblio::GetBiblionumberFromItemnumber($itemnumber);
122
        if ($biblionumber and $biblionumber != $item_biblionumber) {
123
            return $c->$cb({
124
                error => "Item $itemnumber doesn't belong to biblio $biblionumber"
125
            }, 400);
126
        }
127
        $biblionumber ||= $item_biblionumber;
128
    }
129
130
    my $biblio = C4::Biblio::GetBiblio($biblionumber);
131
132
    my $can_reserve =
133
      $itemnumber
134
      ? CanItemBeReserved( $borrowernumber, $itemnumber )
135
      : CanBookBeReserved( $borrowernumber, $biblionumber );
136
137
    my @branches = values %{ C4::Branch::GetBranches() };
138
    if (C4::Context->preference('IndependentBranches')) {
139
        @branches = grep { $_->{branchcode} eq $borrower->branchcode } @branches;
140
    }
141
142
    my $response = {
143
        reserve_allowed => $can_reserve eq 'OK' ? 1 : 0,
144
        available_pickup_locations => \@branches,
145
    };
146
147
    return $c->$cb($response, 200);
148
}
149
99
1;
150
1;
(-)a/api/v1/swagger.json (-1 / +56 lines)
Lines 122-127 Link Here
122
            "schema": { "$ref": "#/definitions/error" }
122
            "schema": { "$ref": "#/definitions/error" }
123
          }
123
          }
124
        }
124
        }
125
      },
126
      "options": {
127
        "x-mojo-controller": "Koha::REST::V1::Borrowers::Reserves",
128
        "operationId": "optionsBorrowerReserve",
129
        "tags": ["borrowers", "reserves"],
130
        "parameters": [
131
          { "$ref": "#/parameters/borrowernumberPathParam" },
132
          {
133
            "name": "body",
134
            "in": "body",
135
            "description": "A JSON object to detail the request",
136
            "required": true,
137
            "schema": { "$ref": "#/definitions/optionsBorrowerReserveBody" }
138
          }
139
        ],
140
        "consumes": ["application/json"],
141
        "produces": ["application/json"],
142
        "responses": {
143
          "200": {
144
            "description": "Available options for /borrowers/{borrowernumber}/reserves",
145
            "schema": { "$ref": "#/definitions/borrowerReservesOptions" }
146
          },
147
          "400": {
148
            "description": "Bad parameters",
149
            "schema": { "$ref": "#/definitions/error" }
150
          },
151
          "404": {
152
            "description": "Borrower not found",
153
            "schema": { "$ref": "#/definitions/error" }
154
          }
155
        }
125
      }
156
      }
126
    },
157
    },
127
    "/reserves/{reserve_id}": {
158
    "/reserves/{reserve_id}": {
Lines 278-283 Link Here
278
        }
309
        }
279
      }
310
      }
280
    },
311
    },
312
    "optionsBorrowerReserveBody": {
313
      "type": "object",
314
      "properties": {
315
        "biblionumber": {
316
          "description": "Biblio internal identifier",
317
          "type": "integer"
318
        },
319
        "itemnumber": {
320
          "description": "Item internal identifier",
321
          "type": "integer"
322
        }
323
      }
324
    },
325
    "borrowerReservesOptions": {
326
      "type": "object",
327
      "properties": {
328
        "reserve_allowed": {
329
          "type": "integer"
330
        },
331
        "available_pickup_locations": {
332
          "type": "array",
333
          "items": { "$ref": "#/definitions/branch" }
334
        }
335
      }
336
    },
281
    "editReserveBody": {
337
    "editReserveBody": {
282
      "type": "object",
338
      "type": "object",
283
      "properties": {
339
      "properties": {
284
- 

Return to bug 13927