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

(-)a/Koha/REST/V1/Holds.pm (-12 / +20 lines)
Lines 88-94 sub add { Link Here
88
        my $non_priority      = $body->{non_priority};
88
        my $non_priority      = $body->{non_priority};
89
89
90
        my $overrides    = $c->stash('koha.overrides');
90
        my $overrides    = $c->stash('koha.overrides');
91
        my $can_override = $overrides->{any} && C4::Context->preference('AllowHoldPolicyOverride');
91
        my $can_override = C4::Context->preference('AllowHoldPolicyOverride') // 0;
92
93
        my $override_all = $overrides->{any} && C4::Context->preference('AllowHoldPolicyOverride') ? 1 : 0;
92
94
93
        if ( !C4::Context->preference('AllowHoldDateInFuture') && $hold_date ) {
95
        if ( !C4::Context->preference('AllowHoldDateInFuture') && $hold_date ) {
94
            return $c->render(
96
            return $c->render(
Lines 142-148 sub add { Link Here
142
        }
144
        }
143
145
144
        # If the hold is being forced, no need to validate
146
        # If the hold is being forced, no need to validate
145
        unless ($can_override) {
147
        unless ($override_all) {
146
148
147
            # Validate pickup location
149
            # Validate pickup location
148
            my $valid_pickup_location;
150
            my $valid_pickup_location;
Lines 161-181 sub add { Link Here
161
                openapi => { error => 'The supplied pickup location is not valid' }
163
                openapi => { error => 'The supplied pickup location is not valid' }
162
            ) unless $valid_pickup_location;
164
            ) unless $valid_pickup_location;
163
165
164
            my $can_place_hold =
166
            my $can_place_holds = $patron->can_place_holds();
167
168
            if ( !$can_place_holds ) {
169
                my $error_code = $can_place_holds->messages->[0]->message;
170
                return $c->render(
171
                    status  => 409,
172
                    openapi => {
173
                        error      => 'Hold cannot be placed. Reason: ' . $error_code,
174
                        error_code => $error_code,
175
                    }
176
                ) unless $overrides->{$error_code};
177
            }
178
179
            my $can_hold_be_placed =
165
                $item
180
                $item
166
                ? C4::Reserves::CanItemBeReserved( $patron, $item )
181
                ? C4::Reserves::CanItemBeReserved( $patron, $item )
167
                : C4::Reserves::CanBookBeReserved( $patron_id, $biblio_id );
182
                : C4::Reserves::CanBookBeReserved( $patron_id, $biblio_id );
168
183
169
            if ( C4::Context->preference('maxreserves')
184
            unless ( $can_hold_be_placed->{status} eq 'OK' ) {
170
                && $patron->holds->count + 1 > C4::Context->preference('maxreserves') )
171
            {
172
                $can_place_hold->{status} = 'tooManyReserves';
173
            }
174
175
            unless ( $can_place_hold->{status} eq 'OK' ) {
176
                return $c->render(
185
                return $c->render(
177
                    status  => 403,
186
                    status  => 403,
178
                    openapi => { error => "Hold cannot be placed. Reason: " . $can_place_hold->{status} }
187
                    openapi => { error => "Hold cannot be placed. Reason: " . $can_hold_be_placed->{status} }
179
                );
188
                );
180
            }
189
            }
181
        }
190
        }
182
- 

Return to bug 40101