From b7db304033d1ebf80e0eec7261e460018d2e4761 Mon Sep 17 00:00:00 2001 From: Tomas Cohen Arazi Date: Tue, 3 May 2022 11:23:23 -0300 Subject: [PATCH] Bug 30663: Implement overrides handling in POST /suggestions This patch implements the override checks in the controller as expected by the previous patch. To test: 1. Apply this bug patches up to 'Add x-koha-override options...' 2. Run: $ kshell k$ prove t/db_dependent/api/v1/suggestions.t => FAIL: Tests fail! The controller doesn't care about overrides or sysprefs about suggestions limits. 3. Apply this patch 4. Repeat 2 => SUCCESS: Things work! 5. Sign off :-D Signed-off-by: Tomas Cohen Arazi Signed-off-by: Lucas Gass Signed-off-by: Martin Renvoize Signed-off-by: Kyle M Hall (cherry picked from commit ce9664e1b01e9f3dc807855d76927b9184453aee) Signed-off-by: Victor Grousset/tuxayo --- Koha/REST/V1/Suggestions.pm | 49 +++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/Koha/REST/V1/Suggestions.pm b/Koha/REST/V1/Suggestions.pm index 1c0532cc61..cb716eb30e 100644 --- a/Koha/REST/V1/Suggestions.pm +++ b/Koha/REST/V1/Suggestions.pm @@ -98,6 +98,55 @@ sub add { $body->{'status'} = 'ASKED' unless defined $body->{'status'}; + my $overrides = $c->stash('koha.overrides'); + + unless ( $overrides->{any} ) { + + unless ( $overrides->{max_total} ) { + + if ( C4::Context->preference('MaxTotalSuggestions') ne '' + && C4::Context->preference('NumberOfSuggestionDays') ne '' ) + { + my $max_total = C4::Context->preference('MaxTotalSuggestions'); + my $days_range = C4::Context->preference('NumberOfSuggestionDays'); + + if ( $max_total and $days_range ) { + + my $total = Koha::Suggestions->search({ suggestedby => $body->{suggested_by} }) + ->filter_by_suggested_days_range( $days_range ) + ->count; + + if ( $total >= $max_total ) { + return $c->render( + status => 400, + openapi => { + error => "Reached the maximum suggestions limit", + error_code => 'max_total_reached' + } + ); + } + } + } + } + + unless ( $overrides->{max_pending} ) { + if ( C4::Context->preference('MaxOpenSuggestions') ne '' ) { + my $total_pending = Koha::Suggestions->search({ suggestedby => $body->{suggested_by} }) + ->filter_by_pending + ->count; + if ( $total_pending >= C4::Context->preference('MaxOpenSuggestions') ) { + return $c->render( + status => 400, + openapi => { + error => "Reached the maximum pending suggestions limit", + error_code => 'max_pending_reached' + } + ); + } + } + } + } + return try { my $suggestion = Koha::Suggestion->new_from_api( $body )->store; $suggestion->discard_changes; -- 2.39.5