Bugzilla – Attachment 152040 Details for
Bug 8137
Checkout limit for all libraries
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 8137: Add Default checkout limit by patron category with priority.
Bug-8137-Add-Default-checkout-limit-by-patron-cate.patch (text/plain), 16.55 KB, created by
Thibaud Guillot (thibaud_g)
on 2023-06-06 09:26:07 UTC
(
hide
)
Description:
Bug 8137: Add Default checkout limit by patron category with priority.
Filename:
MIME Type:
Creator:
Thibaud Guillot (thibaud_g)
Created:
2023-06-06 09:26:07 UTC
Size:
16.55 KB
patch
obsolete
>From e4da976ef6ca2ea9d7ac477c3e4a4c5b57810e9b Mon Sep 17 00:00:00 2001 >From: Alex Arnaud <alex.arnaud@biblibre.com> >Date: Wed, 28 Jun 2017 13:50:20 +0000 >Subject: [PATCH] Bug 8137: Add Default checkout limit by patron category with > priority. > >This patch add the ability to make a 'Default checkout limit by patron category' >rule has priority. When a rule has priority, it overrides all others >for the same categorycode. For "normal" rule, the behavior is the same >than before (like a default rule if no one is specified at branch level). >Rule with priority can only be created on the circulation and fine rules >page for *all libraries*. The goal is to allow librarian to limit the >total number of checkouts by patron category for all libraries. > >test plan: > > - Create a rule with 4 checkouts allowed in default checkout limit > table > for a patron category and make it has priority, > - create more permissive rules for all other branches (at least 5 > checkouts allowed), > - Checkout items of different branches for a patron with the same > category, > - Patron should be limited to 4 checkouts > >https://bugs.koha-community.org/show_bug.cgi?id=8137 > >Rebased: 2018-03-14, by: Alex Arnaud <alex.arnaud@biblibre.com> >Rebased: 2020-07-23, by: Arthur Suzuki <arthur.suzuki@biblibre.com> > >Signed-off-by: Andrew Fuerste-Henry <andrew@bywatersolutions.com> > >Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com> >--- > admin/smart-rules.pl | 6 + > .../Bug_8137-add-column-has_priority.sql | 5 + > .../prog/en/modules/admin/smart-rules.tt | 129 ++++++++++++++++++ > t/db_dependent/Circulation/Branch.t | 24 ++++ > 4 files changed, 164 insertions(+) > create mode 100644 installer/data/mysql/atomicupdate/Bug_8137-add-column-has_priority.sql > >diff --git a/admin/smart-rules.pl b/admin/smart-rules.pl >index b74a0ceeab..345904ae45 100755 >--- a/admin/smart-rules.pl >+++ b/admin/smart-rules.pl >@@ -417,6 +417,8 @@ elsif ($op eq "add-branch-cat") { > $patron_maxonsiteissueqty = strip_non_numeric($patron_maxonsiteissueqty); > my $max_holds = $input->param('max_holds'); > $max_holds = strip_non_numeric($max_holds); >+ my $has_priority = $input->param('has_priority'); >+ $has_priority = $has_priority ? 1 : 0; > > if ($branch eq "*") { > if ($categorycode eq "*") { >@@ -432,6 +434,7 @@ elsif ($op eq "add-branch-cat") { > } > ); > } else { >+ > Koha::CirculationRules->set_rules( > { > categorycode => $categorycode, >@@ -440,6 +443,7 @@ elsif ($op eq "add-branch-cat") { > max_holds => $max_holds, > patron_maxissueqty => $patron_maxissueqty, > patron_maxonsiteissueqty => $patron_maxonsiteissueqty, >+ has_priority => $has_priority, > } > } > ); >@@ -453,6 +457,7 @@ elsif ($op eq "add-branch-cat") { > max_holds => $max_holds, > patron_maxissueqty => $patron_maxissueqty, > patron_maxonsiteissueqty => $patron_maxonsiteissueqty, >+ has_priority => $has_priority, > } > } > ); >@@ -465,6 +470,7 @@ elsif ($op eq "add-branch-cat") { > max_holds => $max_holds, > patron_maxissueqty => $patron_maxissueqty, > patron_maxonsiteissueqty => $patron_maxonsiteissueqty, >+ has_priority => $has_priority, > } > } > ); >diff --git a/installer/data/mysql/atomicupdate/Bug_8137-add-column-has_priority.sql b/installer/data/mysql/atomicupdate/Bug_8137-add-column-has_priority.sql >new file mode 100644 >index 0000000000..fc7c42fcc0 >--- /dev/null >+++ b/installer/data/mysql/atomicupdate/Bug_8137-add-column-has_priority.sql >@@ -0,0 +1,5 @@ >+ALTER TABLE default_borrower_circ_rules ADD has_priority INT(1) DEFAULT 0; >+ALTER TABLE default_borrower_circ_rules DROP foreign key borrower_borrower_circ_rules_ibfk_1; >+ALTER TABLE default_borrower_circ_rules DROP primary key; >+ALTER TABLE default_borrower_circ_rules ADD primary key(categorycode, has_priority); >+ALTER TABLE default_borrower_circ_rules ADD CONSTRAINT borrower_borrower_circ_rules_ibfk_1 FOREIGN KEY (categorycode) REFERENCES categories (categorycode) ON DELETE CASCADE ON UPDATE CASCADE; >\ No newline at end of file >diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/smart-rules.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/smart-rules.tt >index f91a10029d..6a70a1e806 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/smart-rules.tt >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/smart-rules.tt >@@ -1281,6 +1281,135 @@ > [% SET holdallowed = CirculationRules.Search( branchcode, undef, i.itemtype, 'holdallowed' ) %] > [% SET hold_fulfillment_policy = CirculationRules.Search( branchcode, undef, i.itemtype, 'hold_fulfillment_policy' ) %] > [% SET returnbranch = CirculationRules.Search( branchcode, undef, i.itemtype, 'returnbranch' ) %] >+ <tr> >+ <td> >+ <select> >+ [% IF returnbranch == 'homebranch' %] >+ <option value="homebranch" selected="selected"> >+ [% ELSE %] >+ <option value="homebranch"> >+ [% END %] >+ Item returns home >+ </option> >+ [% IF returnbranch == 'holdingbranch' %] >+ <option value="holdingbranch" selected="selected"> >+ [% ELSE %] >+ <option value="holdingbranch"> >+ [% END %] >+ Item returns to issuing library >+ </option> >+ [% IF returnbranch == 'noreturn' %] >+ <option value="noreturn" selected="selected"> >+ [% ELSE %] >+ <option value="noreturn"> >+ [% END %] >+ Item floats >+ </option> >+ </select> >+ </td> >+ <td class="actions"> >+ <button type="submit" class="btn btn-default btn-xs"><i class="fa fa-save"></i> Save</button> >+ <a class="btn btn-default btn-xs delete" href="/cgi-bin/koha/admin/smart-rules.pl?op=delete-branch-cat&categorycode=*&branch=[% current_branch | html %]" id="unset"><i class="fa fa-undo"></i> Unset</a> >+ </td> >+ </tr> >+ </table> >+ </form> >+ </div> >+ [% IF ( show_branch_cat_rule_form ) %] >+ <div id="holds-policy-by-patron-category" class="container"> >+ <h3>[% IF humanbranch %]Checkout, hold policy by patron category for [% Branches.GetName( humanbranch ) | html %][% ELSE %]Default checkout, hold policy by patron category[% END %]</h3> >+ <p>For this library, you can specify the maximum number of loans that >+ a patron of a given category can make, regardless of the item type. >+ </p> >+ <p>If the total amount loanable for a given patron category is left blank, >+ no limit applies, except possibly for a limit you define for a specific item type. >+ </p> >+ <p> >+ <b>Has priority: </b>If checked, the rule will override those for all branches. Else >+ it behaves like a default one: used if no rule existe for the coresponding branch. >+ </p> >+ <form method="post" action="/cgi-bin/koha/admin/smart-rules.pl"> >+ <input type="hidden" name="op" value="add-branch-cat" /> >+ <input type="hidden" name="branch" value="[% current_branch | html %]"/> >+ <table> >+ <tr> >+ <th>Patron category</th> >+ <th>Total current checkouts allowed</th> >+ <th>Total current on-site checkouts allowed</th> >+ <th>Total holds allowed</th> >+ [% UNLESS humanbranch %]<th>Has priority</th>[% END %] >+ <th> </th> >+ </tr> >+ [% FOREACH c IN categorycodes %] >+ [% NEXT UNLESS c %] >+ [% SET patron_maxissueqty = CirculationRules.Search( branchcode, c, undef, 'patron_maxissueqty' ) %] >+ [% SET patron_maxonsiteissueqty = CirculationRules.Search( branchcode, c, undef, 'patron_maxonsiteissueqty' ) %] >+ [% SET max_holds = CirculationRules.Search( branchcode, c, undef, 'max_holds' ) %] >+ >+ [% IF ( patron_maxissueqty.defined && patron_maxissueqty != '' ) || ( patron_maxonsiteissueqty.defined && patron_maxonsiteissueqty != '' ) || ( max_holds.defined && max_holds != '' ) %] >+ <tr> >+ <td> >+ [% IF c == undef %] >+ <em>Default</em> >+ [% ELSE %] >+ [% Categories.GetName(c) | html %] >+ [% END %] >+ </td> >+ <td> >+ [% IF patron_maxissueqty.defined && patron_maxissueqty != '' %] >+ [% patron_maxissueqty | html %] >+ [% ELSE %] >+ <span>Unlimited</span> >+ [% END %] >+ </td> >+ <td> >+ [% IF patron_maxonsiteissueqty.defined && patron_maxonsiteissueqty != '' %] >+ [% patron_maxonsiteissueqty | html %] >+ [% ELSE %] >+ <span>Unlimited</span> >+ [% END %] >+ </td> >+ <td> >+ [% IF max_holds.defined && max_holds != '' %] >+ [% max_holds | html %] >+ [% ELSE %] >+ <span>Unlimited</span> >+ [% END %] >+ </td> >+ [% UNLESS humanbranch %] >+ <td> >+ <input type="checkbox" [% IF branch_cat_rule_loo.has_priority %]checked[% END %] disabled/> >+ </td> >+ [% END %] >+ >+ <td class="actions"> >+ <a class="btn btn-default btn-xs delete" href="/cgi-bin/koha/admin/smart-rules.pl?op=delete-branch-cat&categorycode=[% c | html %]&branch=[% current_branch | html %]"><i class="fa fa-trash"></i> Delete</a> >+ </td> >+ </tr> >+ [% END %] >+ [% END %] >+ <tr> >+ <td> >+ <select name="categorycode"> >+ [% FOREACH patron_category IN patron_categories%] >+ <option value="[% patron_category.categorycode | html %]">[% patron_category.description | html %]</option> >+ [% END %] >+ </select> >+ </td> >+ <td><input name="patron_maxissueqty" size="3" type="text" /></td> >+ <td><input name="patron_maxonsiteissueqty" size="3" type="text" /></td> >+ <td><input name="max_holds" size="3" type="text" /></td> >+ [% UNLESS humanbranch %] >+ <td> >+ <input type="checkbox" name="has_priority"/> >+ </td> >+ [% END %] >+ <td class="actions"><button type="submit" class="btn btn-default btn-xs"><i class="fa fa-plus"></i> Add</td> >+ </tr> >+ </table> >+ </form> >+ </div> >+ [% END %] > > [% IF holdallowed || hold_fulfillment_policy || returnbranch %] > <tr> >diff --git a/t/db_dependent/Circulation/Branch.t b/t/db_dependent/Circulation/Branch.t >index 53e26d2d6a..81ba4331f4 100755 >--- a/t/db_dependent/Circulation/Branch.t >+++ b/t/db_dependent/Circulation/Branch.t >@@ -232,7 +232,15 @@ Koha::CirculationRules->set_rules( > } > ); > >+$query = q| >+ INSERT INTO default_borrower_circ_rules >+ (categorycode, maxissueqty, maxonsiteissueqty, has_priority) >+ VALUES( ?, ?, ?, ? ) >+|; >+$dbh->do($query, {}, $samplecat->{categorycode}, 3, 3, 0); >+ > #Test GetBranchBorrowerCircRule >+# > is_deeply( > GetBranchBorrowerCircRule(), > { patron_maxissueqty => 4, patron_maxonsiteissueqty => 5 }, >@@ -257,6 +265,22 @@ is_deeply( > "GetBranchBorrower with wrong parameters returns the patron_maxissueqty and patron_maxonsiteissueqty of default_circ_rules" > ); > >+$query = q| >+ INSERT INTO default_borrower_circ_rules >+ (categorycode, maxissueqty, maxonsiteissueqty, has_priority) >+ VALUES( ?, ?, ?, ? ) >+|; >+$dbh->do($query, {}, $samplecat->{categorycode}, 3, 3, 1); >+ >+is_deeply( >+ GetBranchBorrowerCircRule( >+ $samplebranch1->{branchcode}, >+ $samplecat->{categorycode} >+ ), >+ { maxissueqty => 3, maxonsiteissueqty => 3, has_priority => 1 }, >+ "GetBranchBorrower returns the rule having priority" >+); >+ > #Test GetBranchItemRule > my @lazy_any = ( 'hold_fulfillment_policy' => 'any' ); > is_deeply( >-- >2.25.1
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
|
Splinter Review
Attachments on
bug 8137
:
9705
|
9706
|
11079
|
64703
|
64704
|
64791
|
64891
|
72831
|
72832
|
107207
|
107208
|
107209
|
107459
|
111368
|
111369
|
111370
|
112640
|
113797
|
113882
|
114531
|
114532
|
114533
|
114534
|
116676
|
116677
|
116678
|
116679
|
116680
|
145476
|
145477
|
145478
|
145479
|
145480
|
152040
|
152041
|
152042
|
152043
|
152044
|
152045
|
156316
|
156317
|
156318
|
156319
|
156320
|
156321
|
156322
|
159712
|
162367
|
167208
|
167923
|
168119
|
169084
|
169696
|
169700
|
169727
|
169927
|
169928
|
170411
|
173605
|
173608
|
175837
|
175838
|
177464