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

(-)a/Koha/Account.pm (+39 lines)
Lines 30-35 use C4::Stats qw( UpdateStats ); Link Here
30
use C4::Overdues qw(GetFine);
30
use C4::Overdues qw(GetFine);
31
31
32
use Koha::Patrons;
32
use Koha::Patrons;
33
use Koha::Account::Credits;
34
use Koha::Account::Debits;
33
use Koha::Account::Lines;
35
use Koha::Account::Lines;
34
use Koha::Account::Offsets;
36
use Koha::Account::Offsets;
35
use Koha::Account::DebitTypes;
37
use Koha::Account::DebitTypes;
Lines 749-754 sub lines { Link Here
749
    );
751
    );
750
}
752
}
751
753
754
755
=head3 credits
756
757
  my $credits = $self->credits;
758
759
Return all credits for the user
760
761
=cut
762
763
sub credits {
764
    my ($self) = @_;
765
766
    return Koha::Account::Credits->search(
767
        {
768
            borrowernumber => $self->{patron_id}
769
        }
770
    );
771
}
772
773
=head3 debits
774
775
  my $debits = $self->debits;
776
777
Return all debits for the user
778
779
=cut
780
781
sub debits {
782
    my ($self) = @_;
783
784
    return Koha::Account::Debits->search(
785
        {
786
            borrowernumber   => $self->{patron_id},
787
        }
788
    );
789
}
790
752
=head3 reconcile_balance
791
=head3 reconcile_balance
753
792
754
$account->reconcile_balance();
793
$account->reconcile_balance();
(-)a/Koha/Account/Credit.pm (+64 lines)
Line 0 Link Here
1
package Koha::Account::Credit;
2
3
# Copyright PTFS Europe 2021
4
#
5
# This file is part of Koha.
6
#
7
# Koha is free software; you can redistribute it and/or modify it
8
# under the terms of the GNU General Public License as published by
9
# the Free Software Foundation; either version 3 of the License, or
10
# (at your option) any later version.
11
#
12
# Koha is distributed in the hope that it will be useful, but
13
# WITHOUT ANY WARRANTY; without even the implied warranty of
14
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
# GNU General Public License for more details.
16
#
17
# You should have received a copy of the GNU General Public License
18
# along with Koha; if not, see <http://www.gnu.org/licenses>.
19
20
use Modern::Perl;
21
22
use base qw(Koha::Account::Line);
23
24
=head1 NAME
25
26
Koha::Credit - Koha Credit object class
27
28
This object represents a credit account line
29
30
=head1 API
31
32
=head2 Class Methods
33
34
=head3 to_api_mapping
35
36
This method returns the mapping for representing a Koha::Account::Credit object
37
on the API.
38
39
=cut
40
41
sub to_api_mapping {
42
    return {
43
        accountlines_id   => 'account_line_id',
44
        credit_number     => undef,
45
        credit_type_code  => 'type',
46
        debit_type_code   => undef,
47
        amountoutstanding => 'amount_outstanding',
48
        borrowernumber    => 'patron_id',
49
        branchcode        => 'library_id',
50
        issue_id          => undef,
51
        itemnumber        => undef,
52
        manager_id        => 'user_id',
53
        note              => 'internal_note',
54
        register_id       => 'cash_register_id',
55
    };
56
}
57
58
=head1 AUTHOR
59
60
Martin Renvoize <martin.renvoize@ptfs-europe.com>
61
62
=cut
63
64
1;
(-)a/Koha/Account/Credits.pm (+56 lines)
Line 0 Link Here
1
package Koha::Account::Credits;
2
3
# This file is part of Koha.
4
#
5
# Koha is free software; you can redistribute it and/or modify it
6
# under the terms of the GNU General Public License as published by
7
# the Free Software Foundation; either version 3 of the License, or
8
# (at your option) any later version.
9
#
10
# Koha is distributed in the hope that it will be useful, but
11
# WITHOUT ANY WARRANTY; without even the implied warranty of
12
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
# GNU General Public License for more details.
14
#
15
# You should have received a copy of the GNU General Public License
16
# along with Koha; if not, see <http://www.gnu.org/licenses>.
17
18
use Modern::Perl;
19
20
use Koha::Database;
21
use Koha::Account::Credit;
22
23
use base qw(Koha::Account::Lines);
24
25
=head1 NAME
26
27
Koha::Account::Credits - Koha Cash Register Action Object set class
28
29
=head1 API
30
31
=head2 Class methods
32
33
=head3 search
34
35
  my $credits = Koha::Account::Credits->search( $where, $attr );
36
37
Returns a list of credit lines.
38
39
=cut
40
41
sub search {
42
    my ( $self, $where, $attr ) = @_;
43
44
    my $rs = $self->SUPER::search({ debit_type_code => undef });
45
    return $rs->SUPER::search( $where, $attr );
46
}
47
48
=head3 object_class
49
50
=cut
51
52
sub object_class {
53
    return 'Koha::Account::Credit';
54
}
55
56
1;
(-)a/Koha/Account/Debit.pm (+65 lines)
Line 0 Link Here
1
package Koha::Account::Debit;
2
3
# Copyright PTFS Europe 2021
4
#
5
# This file is part of Koha.
6
#
7
# Koha is free software; you can redistribute it and/or modify it
8
# under the terms of the GNU General Public License as published by
9
# the Free Software Foundation; either version 3 of the License, or
10
# (at your option) any later version.
11
#
12
# Koha is distributed in the hope that it will be useful, but
13
# WITHOUT ANY WARRANTY; without even the implied warranty of
14
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
# GNU General Public License for more details.
16
#
17
# You should have received a copy of the GNU General Public License
18
# along with Koha; if not, see <http://www.gnu.org/licenses>.
19
20
use Modern::Perl;
21
22
use base qw(Koha::Account::Line);
23
24
=head1 NAME
25
26
Koha::Debit - Koha Debit object class
27
28
This object represents a debit account line
29
30
=head1 API
31
32
=head2 Class Methods
33
34
=head3 to_api_mapping
35
36
This method returns the mapping for representing a Koha::Account::Debit object
37
on the API.
38
39
=cut
40
41
sub to_api_mapping {
42
    return {
43
        accountlines_id   => 'account_line_id',
44
        credit_number     => undef,
45
        credit_type_code  => undef,
46
        debit_type_code   => 'type',
47
        amountoutstanding => 'amount_outstanding',
48
        borrowernumber    => 'patron_id',
49
        branchcode        => 'library_id',
50
        issue_id          => 'checkout_id',
51
        itemnumber        => 'item_id',
52
        manager_id        => 'user_id',
53
        note              => 'internal_note',
54
        register_id       => 'cash_register_id',
55
        payment_type      => 'payout_type',
56
    };
57
}
58
59
=head1 AUTHOR
60
61
Martin Renvoize <martin.renvoize@ptfs-europe.com>
62
63
=cut
64
65
1;
(-)a/Koha/Account/Debits.pm (+56 lines)
Line 0 Link Here
1
package Koha::Account::Debits;
2
3
# This file is part of Koha.
4
#
5
# Koha is free software; you can redistribute it and/or modify it
6
# under the terms of the GNU General Public License as published by
7
# the Free Software Foundation; either version 3 of the License, or
8
# (at your option) any later version.
9
#
10
# Koha is distributed in the hope that it will be useful, but
11
# WITHOUT ANY WARRANTY; without even the implied warranty of
12
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
# GNU General Public License for more details.
14
#
15
# You should have received a copy of the GNU General Public License
16
# along with Koha; if not, see <http://www.gnu.org/licenses>.
17
18
use Modern::Perl;
19
20
use Koha::Database;
21
use Koha::Account::Debit;
22
23
use base qw(Koha::Account::Lines);
24
25
=head1 NAME
26
27
Koha::Account::Debits - Koha Cash Register Action Object set class
28
29
=head1 API
30
31
=head2 Class methods
32
33
=head3 search
34
35
  my $debits = Koha::Account::Debits->search( $where, $attr );
36
37
Returns a list of debit lines.
38
39
=cut
40
41
sub search {
42
    my ( $self, $where, $attr ) = @_;
43
44
    my $rs = $self->SUPER::search({ credit_type_code => undef });
45
    return $rs->SUPER::search( $where, $attr );
46
}
47
48
=head3 object_class
49
50
=cut
51
52
sub object_class {
53
    return 'Koha::Account::Debit';
54
}
55
56
1;
(-)a/Koha/Account/Line.pm (-1 lines)
Lines 955-961 on the API. Link Here
955
sub to_api_mapping {
955
sub to_api_mapping {
956
    return {
956
    return {
957
        accountlines_id   => 'account_line_id',
957
        accountlines_id   => 'account_line_id',
958
        credit_number     => undef,
959
        credit_type_code  => 'credit_type',
958
        credit_type_code  => 'credit_type',
960
        debit_type_code   => 'debit_type',
959
        debit_type_code   => 'debit_type',
961
        amountoutstanding => 'amount_outstanding',
960
        amountoutstanding => 'amount_outstanding',
(-)a/Koha/REST/V1/Patrons/Account.pm (+52 lines)
Lines 74-79 sub get { Link Here
74
    };
74
    };
75
}
75
}
76
76
77
=head3 list_credits
78
79
=cut
80
81
sub list_credits {
82
    my $c = shift->openapi->valid_input or return;
83
84
    my $patron_id = $c->validation->param('patron_id');
85
    my $patron    = Koha::Patrons->find($patron_id);
86
87
    unless ($patron) {
88
        return $c->render( status => 404, openapi => { error => "Patron not found." } );
89
    }
90
91
    return try {
92
        my $account = $patron->account;
93
94
        my $credits_set = $account->credits;
95
        my $credits = $c->objects->search( $credits_set );
96
        return $c->render( status => 200, openapi => $credits );
97
    }
98
    catch {
99
        $c->unhandled_exception($_);
100
    };
101
}
102
77
=head3 add_credit
103
=head3 add_credit
78
104
79
Controller function that handles adding a credit to a patron's account
105
Controller function that handles adding a credit to a patron's account
Lines 153-156 sub add_credit { Link Here
153
    };
179
    };
154
}
180
}
155
181
182
=head3 list_debits
183
184
=cut
185
186
sub list_debits {
187
    my $c = shift->openapi->valid_input or return;
188
189
    my $patron_id = $c->validation->param('patron_id');
190
    my $patron    = Koha::Patrons->find($patron_id);
191
192
    unless ($patron) {
193
        return $c->render( status => 404, openapi => { error => "Patron not found." } );
194
    }
195
196
    return try {
197
        my $account = $patron->account;
198
199
        my $debits_set = $account->debits;
200
        my $debits = $c->objects->search( $debits_set );
201
        return $c->render( status => 200, openapi => $debits );
202
    }
203
    catch {
204
        $c->unhandled_exception($_);
205
    };
206
}
207
156
1;
208
1;
(-)a/api/v1/swagger/definitions/account_line.yaml (-43 / +54 lines)
Lines 2-96 Link Here
2
type: object
2
type: object
3
properties:
3
properties:
4
  account_line_id:
4
  account_line_id:
5
    type: integer
5
    type:
6
      - integer
7
      - "null"
8
    readOnly: true
6
    description: Internal account line identifier
9
    description: Internal account line identifier
7
  checkout_id:
10
  amount:
11
    type: number
12
    description: Account line amount
13
  amount_outstanding:
14
    type: number
15
    readOnly: true
16
    description: Outstanding amount
17
  cash_register_id:
8
    type:
18
    type:
9
      - integer
19
      - integer
10
      - "null"
20
      - "null"
11
    description: Internal identifier for the checkout the account line is related to
21
    description: Internal identifier for the cash register used for the payment (if any)
12
  patron_id:
22
  checkout_id:
13
    type: integer
14
    description: Internal identifier for the patron the account line belongs to
15
  item_id:
16
    type:
23
    type:
17
      - integer
24
      - integer
18
      - "null"
25
      - "null"
19
    description: Internal identifier for the item the account line is related to
26
    description: Internal identifier for the checkout the account line is related to
20
  date:
27
  credit_number:
21
    type: string
22
    format: date-time
23
    description: Date the account line was created
24
  amount:
25
    type: number
26
    description: Account line amount
27
  description:
28
    type:
28
    type:
29
      - string
29
      - string
30
      - "null"
30
      - "null"
31
    description: Account line description
31
    readOnly: true
32
  account_type:
32
    description: Internally generated identifier for credits
33
  credit_type:
33
    type:
34
    type:
34
      - string
35
      - string
35
      - "null"
36
      - "null"
36
    description: Account line type
37
    description: Account line credit type
38
  date:
39
    type: string
40
    format: date-time
41
    readOnly: true
42
    description: Date the account line was created
37
  debit_type:
43
  debit_type:
38
    type:
44
    type:
39
      - string
45
      - string
40
      - "null"
46
      - "null"
41
    description: Account line debit type
47
    description: Account line debit type
42
  credit_type:
48
  description:
43
    type:
49
    type:
44
      - string
50
      - string
45
      - "null"
51
      - "null"
46
    description: Account line credit type
52
    readOnly: true
47
  payment_type:
53
    description: Account line description
54
  interface:
48
    type:
55
    type:
49
      - string
56
      - string
50
      - "null"
57
      - "null"
51
    description: Payment type
58
    readOnly: true
52
  amount_outstanding:
59
    description: 'Interface in which the account line was generated (values can be: api, cron, commandline, intranet, opac and sip)'
53
    type: number
54
    description: Outstanding amount
55
  last_increment:
56
    type:
57
      - number
58
      - "null"
59
    description: The amount the line was increased last time
60
  timestamp:
61
    type: string
62
    format: date-time
63
    description: Timestamp for the latest line update
64
  internal_note:
60
  internal_note:
65
    type:
61
    type:
66
      - string
62
      - string
67
      - "null"
63
      - "null"
68
    description: Internal note
64
    description: Internal note
69
  user_id:
65
  item_id:
70
    type:
66
    type:
71
      - integer
67
      - integer
72
      - "null"
68
      - "null"
73
    description: Internal patron identifier for the staff member that introduced the
69
    description: Internal identifier for the item the account line is related to
74
      account line
75
  library_id:
70
  library_id:
76
    type:
71
    type:
77
      - string
72
      - string
78
      - "null"
73
      - "null"
79
    description: Internal identifier for the library in which the transaction took place
74
    description: Internal identifier for the library in which the transaction took place
80
  interface:
75
  patron_id:
76
    type: integer
77
    readOnly: true
78
    description: Internal identifier for the patron the account line belongs to
79
  payment_type:
81
    type:
80
    type:
82
      - string
81
      - string
83
      - "null"
82
      - "null"
84
    description: "Interface in which the account line was generated (values can be: api,
83
    description: Payment type
85
      cron, commandline, intranet, opac and sip)"
84
  payout_type:
85
    type:
86
      - string
87
      - "null"
88
    description: Payout type
86
  status:
89
  status:
87
    type:
90
    type:
88
      - string
91
      - string
89
      - "null"
92
      - "null"
93
    readOnly: true
90
    description: The credit/debit status
94
    description: The credit/debit status
91
  cash_register_id:
95
  timestamp:
96
    type: string
97
    format: date-time
98
    readOnly: true
99
    description: Timestamp for the latest line update
100
  user_id:
92
    type:
101
    type:
93
      - integer
102
      - integer
94
      - "null"
103
      - "null"
95
    description: Internal identifier for the cash register used for the payment (if any)
104
    description: Internal patron identifier for the staff member that introduced the account line
105
required:
106
  - amount
96
additionalProperties: false
107
additionalProperties: false
(-)a/api/v1/swagger/definitions/credit.yaml (+88 lines)
Line 0 Link Here
1
---
2
type: object
3
properties:
4
  account_line_id:
5
    type:
6
      - integer
7
      - "null"
8
    readOnly: true
9
    description: Internal account line identifier
10
  amount:
11
    type: number
12
    minimum: 0
13
    description: Credit amount
14
  amount_outstanding:
15
    type: number
16
    readOnly: true
17
    description: Outstanding amount
18
  cash_register_id:
19
    type:
20
      - integer
21
      - "null"
22
    description: Internal identifier for the cash register used for the payment (if any)
23
  credit_number:
24
    type:
25
      - string
26
      - "null"
27
    readOnly: true
28
    description: Internally generated identifier for credits
29
  date:
30
    type: string
31
    format: date-time
32
    readOnly: true
33
    description: Date the account line was created
34
  description:
35
    type:
36
      - string
37
      - "null"
38
    readOnly: true
39
    description: Account line description
40
  interface:
41
    type:
42
      - string
43
      - "null"
44
    readOnly: true
45
    description: 'Interface in which the account line was generated (values can be: api, cron, commandline, intranet, opac and sip)'
46
  internal_note:
47
    type:
48
      - string
49
      - "null"
50
    description: Internal note
51
  library_id:
52
    type:
53
      - string
54
      - "null"
55
    description: Internal identifier for the library in which the transaction took place
56
  patron_id:
57
    type: integer
58
    readOnly: true
59
    description: Internal identifier for the patron the account line belongs to
60
  payment_type:
61
    type:
62
      - string
63
      - "null"
64
    description: Payment type
65
  status:
66
    type:
67
      - string
68
      - "null"
69
    readOnly: true
70
    description: The credit status
71
  timestamp:
72
    type: string
73
    format: date-time
74
    readOnly: true
75
    description: Timestamp for the latest line update
76
  type:
77
    type:
78
      - string
79
      - "null"
80
    description: Account credit type
81
  user_id:
82
    type:
83
      - integer
84
      - "null"
85
    description: Internal patron identifier for the staff member that introduced the account line
86
required:
87
  - amount
88
additionalProperties: false
(-)a/api/v1/swagger/definitions/debit.yaml (+85 lines)
Line 0 Link Here
1
type: object
2
properties:
3
  account_line_id:
4
    type:
5
      - integer
6
      - "null"
7
    readOnly: true
8
    description: Internal account line identifier
9
  amount:
10
    type: number
11
    minimum: 0
12
    description: Debit amount
13
  amount_outstanding:
14
    type: number
15
    description: Outstanding amount
16
  cash_register_id:
17
    type:
18
      - integer
19
      - "null"
20
    description: Internal identifier for the cash register used for the payout (if any)
21
  checkout_id:
22
    type:
23
      - integer
24
      - "null"
25
    description: Internal identifier for the checkout the account line is related to
26
  date:
27
    type: string
28
    format: date-time
29
    description: Date the account line was created
30
  description:
31
    type:
32
      - string
33
      - "null"
34
    readOnly: true
35
    description: Account line description
36
  interface:
37
    type:
38
      - string
39
      - "null"
40
    description: 'Interface in which the account line was generated (values can be: api, cron, commandline, intranet, opac and sip)'
41
  internal_note:
42
    type:
43
      - string
44
      - "null"
45
    description: Internal note
46
  item_id:
47
    type:
48
      - integer
49
      - "null"
50
    description: Internal identifier for the item the account line is related to
51
  library_id:
52
    type:
53
      - string
54
      - "null"
55
    description: Internal identifier for the library in which the transaction took place
56
  patron_id:
57
    type: integer
58
    description: Internal identifier for the patron the account line belongs to
59
  payout_type:
60
    type:
61
      - string
62
      - "null"
63
    description: Payout type
64
  status:
65
    type:
66
      - string
67
      - "null"
68
    description: The debit status
69
  timestamp:
70
    type: string
71
    format: date-time
72
    description: Timestamp for the latest line update
73
  type:
74
    type:
75
      - string
76
      - "null"
77
    description: Account debit type
78
  user_id:
79
    type:
80
      - integer
81
      - "null"
82
    description: Internal patron identifier for the staff member that introduced the account line
83
required:
84
  - amount
85
additionalProperties: false
(-)a/api/v1/swagger/paths/patrons_account.yaml (+87 lines)
Lines 43-48 Link Here
43
        borrowers: edit_borrowers
43
        borrowers: edit_borrowers
44
        updatecharges: remaining_permissions
44
        updatecharges: remaining_permissions
45
"/patrons/{patron_id}/account/credits":
45
"/patrons/{patron_id}/account/credits":
46
  get:
47
    x-mojo-to: Patrons::Account#list_credits
48
    operationId: listPatronCredits
49
    tags:
50
      - patrons
51
      - credits
52
    summary: List patron credits
53
    produces:
54
      - application/json
55
    parameters:
56
      - $ref: "../swagger.yaml#/parameters/patron_id_pp"
57
      - $ref: "../swagger.yaml#/parameters/match"
58
      - $ref: "../swagger.yaml#/parameters/order_by"
59
      - $ref: "../swagger.yaml#/parameters/page"
60
      - $ref: "../swagger.yaml#/parameters/per_page"
61
      - $ref: "../swagger.yaml#/parameters/q_param"
62
      - $ref: "../swagger.yaml#/parameters/q_body"
63
      - $ref: "../swagger.yaml#/parameters/q_header"
64
    responses:
65
      "200":
66
        description: A list of credits
67
        schema:
68
          type: array
69
          items:
70
            $ref: "../swagger.yaml#/definitions/credit"
71
      "403":
72
        description: Access forbidden
73
        schema:
74
          $ref: "../swagger.yaml#/definitions/error"
75
      "500":
76
        description: Internal error
77
        schema:
78
          $ref: "../swagger.yaml#/definitions/error"
79
      "503":
80
        description: Under maintenance
81
        schema:
82
          $ref: "../swagger.yaml#/definitions/error"
83
    x-koha-authorization:
84
      permissions:
85
        borrowers: edit_borrowers
86
        updatecharges: remaining_permissions
46
  post:
87
  post:
47
    x-mojo-to: Patrons::Account#add_credit
88
    x-mojo-to: Patrons::Account#add_credit
48
    operationId: addPatronCredit
89
    operationId: addPatronCredit
Lines 90-92 Link Here
90
    x-koha-authorization:
131
    x-koha-authorization:
91
      permissions:
132
      permissions:
92
        updatecharges: remaining_permissions
133
        updatecharges: remaining_permissions
134
"/patrons/{patron_id}/account/debits":
135
  get:
136
    x-mojo-to: Patrons::Account#list_debits
137
    operationId: listPatronDebits
138
    tags:
139
      - patrons
140
      - debits
141
    summary: List patron debits
142
    produces:
143
      - application/json
144
    parameters:
145
      - $ref: "../swagger.yaml#/parameters/patron_id_pp"
146
      - $ref: "../swagger.yaml#/parameters/match"
147
      - $ref: "../swagger.yaml#/parameters/order_by"
148
      - $ref: "../swagger.yaml#/parameters/page"
149
      - $ref: "../swagger.yaml#/parameters/per_page"
150
      - $ref: "../swagger.yaml#/parameters/q_param"
151
      - $ref: "../swagger.yaml#/parameters/q_body"
152
      - $ref: "../swagger.yaml#/parameters/q_header"
153
    responses:
154
      "200":
155
        description: A list of debits
156
        schema:
157
          type: array
158
          items:
159
            $ref: "../swagger.yaml#/definitions/debit"
160
      "403":
161
        description: Access forbidden
162
        schema:
163
          $ref: "../swagger.yaml#/definitions/error"
164
      "404":
165
        description: Patron not found
166
        schema:
167
          $ref: "../swagger.yaml#/definitions/error"
168
      "500":
169
        description: Internal error
170
        schema:
171
          $ref: "../swagger.yaml#/definitions/error"
172
      "503":
173
        description: Under maintenance
174
        schema:
175
          $ref: "../swagger.yaml#/definitions/error"
176
    x-koha-authorization:
177
      permissions:
178
        borrowers: edit_borrowers
179
        updatecharges: remaining_permissions
(-)a/api/v1/swagger/swagger.yaml (-1 / +6 lines)
Lines 30-35 definitions: Link Here
30
    $ref: ./definitions/circ-rule-kind.yaml
30
    $ref: ./definitions/circ-rule-kind.yaml
31
  city:
31
  city:
32
    $ref: ./definitions/city.yaml
32
    $ref: ./definitions/city.yaml
33
  credit:
34
    $ref: ./definitions/credit.yaml
35
  debit:
36
    $ref: ./definitions/debit.yaml
33
  erm_agreement:
37
  erm_agreement:
34
    $ref: ./definitions/erm_agreement.yaml
38
    $ref: ./definitions/erm_agreement.yaml
35
  erm_eholdings_title:
39
  erm_eholdings_title:
Lines 285-290 paths: Link Here
285
    $ref: "./paths/patrons_account.yaml#/~1patrons~1{patron_id}~1account"
289
    $ref: "./paths/patrons_account.yaml#/~1patrons~1{patron_id}~1account"
286
  "/patrons/{patron_id}/account/credits":
290
  "/patrons/{patron_id}/account/credits":
287
    $ref: "./paths/patrons_account.yaml#/~1patrons~1{patron_id}~1account~1credits"
291
    $ref: "./paths/patrons_account.yaml#/~1patrons~1{patron_id}~1account~1credits"
292
  "/patrons/{patron_id}/account/debits":
293
    $ref: "./paths/patrons_account.yaml#/~1patrons~1{patron_id}~1account~1debits"
288
  "/patrons/{patron_id}/extended_attributes":
294
  "/patrons/{patron_id}/extended_attributes":
289
    $ref: "./paths/patrons_extended_attributes.yaml#/~1patrons~1{patron_id}~1extended_attributes"
295
    $ref: "./paths/patrons_extended_attributes.yaml#/~1patrons~1{patron_id}~1extended_attributes"
290
  "/patrons/{patron_id}/extended_attributes/{extended_attribute_id}":
296
  "/patrons/{patron_id}/extended_attributes/{extended_attribute_id}":
291
- 

Return to bug 29453