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

(-)a/Koha/REST/V1/Patrons/Account.pm (+48 lines)
Lines 61-66 sub get { Link Here
61
            status  => 200,
61
            status  => 200,
62
            openapi => {
62
            openapi => {
63
                balance            => $account->balance,
63
                balance            => $account->balance,
64
                borrowernumber     => $patron->borrowernumber,
64
                outstanding_debits => {
65
                outstanding_debits => {
65
                    total => $debits->total_outstanding,
66
                    total => $debits->total_outstanding,
66
                    lines => $debits->to_api
67
                    lines => $debits->to_api
Lines 295-298 sub add_debit { Link Here
295
    };
296
    };
296
}
297
}
297
298
299
=head3 get_patron_balances
300
301
=cut
302
303
sub get_patron_balances {
304
    my $c = shift->openapi->valid_input or return;
305
306
    return try {
307
        my @patrons_with_outstanding_balances;
308
        my $patrons_rs = Koha::Patrons->search()->as_list;
309
310
        foreach my $patron ( @{ $patrons_rs } ) {
311
            my $account       = $patron->account;
312
            my $balance       = $account->balance;
313
            my $debits        = $account->outstanding_debits;
314
            my $credits       = $account->outstanding_credits;
315
            my $total_debits  = $debits->total_outstanding;
316
            my $total_credits = $credits->total_outstanding;
317
318
            if($total_debits != 0 || $total_credits != 0) {                
319
                my $patron_account_detail = {
320
                    borrowernumber     => $patron->borrowernumber,
321
                    balance            => $balance,
322
                    outstanding_debits => {
323
                        total => $total_debits,
324
                        lines => $debits->to_api
325
                    },
326
                    outstanding_credits => {
327
                        total => $total_credits,
328
                        lines => $credits->to_api
329
                    }
330
                };
331
                push @patrons_with_outstanding_balances, $patron_account_detail;
332
            }
333
        }
334
335
        return $c->render(
336
            status  => 200,
337
            openapi => \@patrons_with_outstanding_balances
338
        );
339
340
    }
341
    catch {
342
        $c->unhandled_exception($_);
343
    };
344
}
345
298
1;
346
1;
(-)a/api/v1/swagger/definitions/patron_balance.yaml (+3 lines)
Lines 1-6 Link Here
1
---
1
---
2
type: object
2
type: object
3
properties:
3
properties:
4
  borrowernumber:
5
    type: number
6
    description: borrower id number
4
  balance:
7
  balance:
5
    type: number
8
    type: number
6
    description: Signed decimal number
9
    description: Signed decimal number
(-)a/api/v1/swagger/paths/patrons_account.yaml (+44 lines)
Lines 226-228 Link Here
226
    x-koha-authorization:
226
    x-koha-authorization:
227
      permissions:
227
      permissions:
228
        updatecharges: remaining_permissions
228
        updatecharges: remaining_permissions
229
"/patrons/get_balances":
230
  get:
231
    x-mojo-to: Patrons::Account#get_patron_balances
232
    operationId: listPatronsWithBalances
233
    tags:
234
      - patrons
235
      - account
236
    summary: List patron outstanding balances
237
    produces:
238
      - application/json
239
    parameters:
240
      - $ref: "../swagger.yaml#/parameters/match"
241
      - $ref: "../swagger.yaml#/parameters/order_by"
242
      - $ref: "../swagger.yaml#/parameters/page"
243
      - $ref: "../swagger.yaml#/parameters/per_page"
244
      - $ref: "../swagger.yaml#/parameters/q_param"
245
      - $ref: "../swagger.yaml#/parameters/q_body"
246
    responses:
247
      "200":
248
        description: A list of patrons with outstanding balances
249
        schema:
250
          type: array
251
          items:
252
            $ref: "../swagger.yaml#/definitions/patron_balance"
253
      "403":
254
        description: Access forbidden
255
        schema:
256
          $ref: "../swagger.yaml#/definitions/error"
257
      "404":
258
        description: Patron not found
259
        schema:
260
          $ref: "../swagger.yaml#/definitions/error"
261
      "500":
262
        description: Internal error
263
        schema:
264
          $ref: "../swagger.yaml#/definitions/error"
265
      "503":
266
        description: Under maintenance
267
        schema:
268
          $ref: "../swagger.yaml#/definitions/error"
269
    x-koha-authorization:
270
      permissions:
271
        borrowers: edit_borrowers
272
        updatecharges: remaining_permissions
(-)a/api/v1/swagger/swagger.yaml (-1 / +2 lines)
Lines 297-302 paths: Link Here
297
    $ref: ./paths/patrons.yaml#/~1patrons
297
    $ref: ./paths/patrons.yaml#/~1patrons
298
  "/patrons/{patron_id}":
298
  "/patrons/{patron_id}":
299
    $ref: "./paths/patrons.yaml#/~1patrons~1{patron_id}"
299
    $ref: "./paths/patrons.yaml#/~1patrons~1{patron_id}"
300
  "/patrons/get_balances":
301
    $ref: "./paths/patrons_account.yaml#/~1patrons~1get_balances"
300
  "/patrons/{patron_id}/account":
302
  "/patrons/{patron_id}/account":
301
    $ref: "./paths/patrons_account.yaml#/~1patrons~1{patron_id}~1account"
303
    $ref: "./paths/patrons_account.yaml#/~1patrons~1{patron_id}~1account"
302
  "/patrons/{patron_id}/account/credits":
304
  "/patrons/{patron_id}/account/credits":
303
- 

Return to bug 34277