Bug 15128 - Add ability to limit patrons open purchase suggestions

To test:
1 - Define a number of MaxOpenSuggestions
2 - Add some suggestions for a patron
3 - Note they cannot add any more suggestions if limit is reached
4 - Delete a suggestion and note you can add another
5 - Add them to limit again
6 - Accept a suggestion in the staff client and note user can add more
7 - Repeat above with rejecting or deleting
8 - Sign off.

Sponsored by:
    North Central Regional Library (http://ncrl.org/)

Signed-off-by: Barbara Walters <bwalters@ncrl.org>

Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>

Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
This commit is contained in:
Nick Clemens 2016-06-14 16:47:43 -04:00 committed by Kyle M Hall
parent f65cf574d0
commit 7445b8f897
5 changed files with 34 additions and 4 deletions

View file

@ -0,0 +1 @@
INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type) VALUES ('MaxOpenSuggestions','',NULL,'Limit the number of open suggestions a patron can have at once, unlimited if blank','Integer')

View file

@ -236,6 +236,7 @@ INSERT INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `
('MaxItemsToDisplayForBatchDel','1000',NULL,'Display up to a given number of items in a single item deletionbatch.','Integer'), ('MaxItemsToDisplayForBatchDel','1000',NULL,'Display up to a given number of items in a single item deletionbatch.','Integer'),
('MaxItemsToProcessForBatchMod','1000',NULL,'Process up to a given number of items in a single item modification batch.','Integer'), ('MaxItemsToProcessForBatchMod','1000',NULL,'Process up to a given number of items in a single item modification batch.','Integer'),
('maxItemsInSearchResults','20',NULL,'Specify the maximum number of items to display for each result on a page of results','free'), ('maxItemsInSearchResults','20',NULL,'Specify the maximum number of items to display for each result on a page of results','free'),
('MaxOpenSuggestions','',NULL,'Limit the number of open suggestions a patron can have at once','Integer')
('maxoutstanding','5','','maximum amount withstanding to be able make holds','Integer'), ('maxoutstanding','5','','maximum amount withstanding to be able make holds','Integer'),
('maxRecordsForFacets','20',NULL,NULL,'Integer'), ('maxRecordsForFacets','20',NULL,NULL,'Integer'),
('maxreserves','50','','Define maximum number of holds a patron can place','Integer'), ('maxreserves','50','','Define maximum number of holds a patron can place','Integer'),

View file

@ -571,7 +571,11 @@ OPAC:
yes: "Block" yes: "Block"
no: "Don't block" no: "Don't block"
- expired patrons from OPAC actions such as placing a hold or renewing. Note that the setting for a patron category takes priority over this system preference. - expired patrons from OPAC actions such as placing a hold or renewing. Note that the setting for a patron category takes priority over this system preference.
-
- Limit patrons to
- pref: MaxOpenSuggestions
class: integer
- "open suggestions. Leave empty for no limit. **Note: this setting does not affect anonymous suggestions"
Privacy: Privacy:
- -
- pref: StoreLastBorrower - pref: StoreLastBorrower

View file

@ -28,6 +28,10 @@
<div class="span10"> <div class="span10">
<div id="usersuggestions" class="maincontent"> <div id="usersuggestions" class="maincontent">
[% IF ( op_add ) %] [% IF ( op_add ) %]
[% IF ( Koha.Preference('MaxOpenSuggestions') && own_suggestions_count >= Koha.Preference('MaxOpenSuggestions') ) %]
<h1 class="TooManySuggestions">You cannot place any more suggestions</h1>
<h2 class="TooManySuggestionsText">You have reached your limit of suggestions you can place at this time ([% Koha.Preference('MaxOpenSuggestions') %]). Once the library has processed those suggestions you will be able to place more.</h2>
[% ELSE %]
<h1>Enter a new purchase suggestion</h1> <h1>Enter a new purchase suggestion</h1>
<p>Please fill out this form to make a purchase suggestion. You will receive an email when the library processes your suggestion</p> <p>Please fill out this form to make a purchase suggestion. You will receive an email when the library processes your suggestion</p>
@ -88,6 +92,7 @@
<input type="submit" onclick="Check(this.form); return false;" class="btn" value="Submit your suggestion" /> <a class="action" href="/cgi-bin/koha/opac-suggestions.pl">Cancel</a> <input type="submit" onclick="Check(this.form); return false;" class="btn" value="Submit your suggestion" /> <a class="action" href="/cgi-bin/koha/opac-suggestions.pl">Cancel</a>
</fieldset> </fieldset>
</form> </form>
[% END %]
[% END # IF op_add %] [% END # IF op_add %]
[% IF ( op_else ) %] [% IF ( op_else ) %]
@ -105,6 +110,8 @@
[% FOR m IN messages %] [% FOR m IN messages %]
<div class="alert alert-[% m.type %]"> <div class="alert alert-[% m.type %]">
[% SWITCH m.code %] [% SWITCH m.code %]
[% CASE 'too_many' %]
The suggestion has not been added. You have reached your limit of suggestions you can place at this time ([% Koha.Preference('MaxOpenSuggestions') %]). Once the library has processed those suggestions you will be able to place more.
[% CASE 'already_exists' %] [% CASE 'already_exists' %]
The suggestion has not been added. A suggestion with this title already exists. The suggestion has not been added. A suggestion with this title already exists.
[% CASE 'success_on_inserted' %] [% CASE 'success_on_inserted' %]
@ -145,7 +152,11 @@
<input type="hidden" name="op" value="delete_confirm" /> <input type="hidden" name="op" value="delete_confirm" />
[% IF ( loggedinusername || ( Koha.Preference( 'AnonSuggestions' ) == 1 ) ) %] [% IF ( loggedinusername || ( Koha.Preference( 'AnonSuggestions' ) == 1 ) ) %]
<div id="toolbar" class="toolbar clearfix"> <div id="toolbar" class="toolbar clearfix">
<a class="new" href="/cgi-bin/koha/opac-suggestions.pl?op=add">New purchase suggestion</a> [% IF ( Koha.Preference('MaxOpenSuggestions') && own_suggestions_count >= Koha.Preference('MaxOpenSuggestions') ) %]
<p class="TooManySuggestionsText">You have reached your limit of suggestions you can place at this time ([% Koha.Preference('MaxOpenSuggestions') %]).</br>Once the library has processed those suggestions you will be able to place more.</p>
[% ELSE %]
<a class="new" href="/cgi-bin/koha/opac-suggestions.pl?op=add">New purchase suggestion</a>
[% END %]
</div> </div>
[% END %] [% END %]
@ -245,7 +256,11 @@
<p>There are no pending purchase suggestions.</p> <p>There are no pending purchase suggestions.</p>
[% END %] [% END %]
[% IF ( loggedinusername || ( Koha.Preference( 'AnonSuggestions' ) == 1 ) ) %] [% IF ( loggedinusername || ( Koha.Preference( 'AnonSuggestions' ) == 1 ) ) %]
<p><a class="new" href="/cgi-bin/koha/opac-suggestions.pl?op=add">New purchase suggestion</a></p> [% IF ( Koha.Preference('MaxOpenSuggestions') && own_suggestions_count >= Koha.Preference('MaxOpenSuggestions') ) %]
<p class="TooManySuggestionsText">You have reached your limit of suggestions you can place at this time.</br>Once the library has processed those suggestions you will be able to place more</p>
[% ELSE %]
<p><a class="new" href="/cgi-bin/koha/opac-suggestions.pl?op=add">New purchase suggestion</a></p>
[% END %]
[% END %] [% END %]
[% END # / IF suggestions_loop %] [% END # / IF suggestions_loop %]

View file

@ -115,7 +115,11 @@ if ( $op eq 'else' ) {
my $suggestions_loop = my $suggestions_loop =
&SearchSuggestion( $suggestion); &SearchSuggestion( $suggestion);
if ( $op eq "add_confirm" ) { if ( $op eq "add_confirm" ) {
if (@$suggestions_loop>=1){ my $count_own_suggestions = $borrowernumber ? &SearchSuggestion( { suggestedby => $borrowernumber}) : 0;
if( @$count_own_suggestions >= C4::Context->preference("MaxOpenSuggestions") ){
push @messages, { type => 'error', code => 'too_many'};
}
elsif (@$suggestions_loop>=1){
#some suggestion are answering the request Donot Add #some suggestion are answering the request Donot Add
for my $suggestion ( @$suggestions_loop ) { for my $suggestion ( @$suggestions_loop ) {
push @messages, { type => 'error', code => 'already_exists', id => $suggestion->{suggestionid} }; push @messages, { type => 'error', code => 'already_exists', id => $suggestion->{suggestionid} };
@ -157,9 +161,13 @@ map{
$library ? $s->{branchcodesuggestedby} = $library->branchname : () $library ? $s->{branchcodesuggestedby} = $library->branchname : ()
} @$suggestions_loop; } @$suggestions_loop;
my $own_suggestions_count = 0;
foreach my $suggestion(@$suggestions_loop) { foreach my $suggestion(@$suggestions_loop) {
if($suggestion->{'suggestedby'} == $borrowernumber) { if($suggestion->{'suggestedby'} == $borrowernumber) {
$suggestion->{'showcheckbox'} = $borrowernumber; $suggestion->{'showcheckbox'} = $borrowernumber;
if ( $suggestion->{'STATUS'} eq 'ASKED' ) {
$own_suggestions_count++;
}
} else { } else {
$suggestion->{'showcheckbox'} = 0; $suggestion->{'showcheckbox'} = 0;
} }
@ -195,6 +203,7 @@ $template->param(
messages => \@messages, messages => \@messages,
suggestionsview => 1, suggestionsview => 1,
suggested_by_anyone => $suggested_by_anyone, suggested_by_anyone => $suggested_by_anyone,
own_suggestions_count => $own_suggestions_count,
); );
output_html_with_http_headers $input, $cookie, $template->output; output_html_with_http_headers $input, $cookie, $template->output;