From 2805a2d5e15c9557a04eb542930883d91c74eb5f Mon Sep 17 00:00:00 2001 From: Kyle M Hall Date: Wed, 30 Sep 2015 11:48:14 -0400 Subject: [PATCH] Bug 11565 - decreaseLoanHighHolds needs Override This patch allows the high holds loan length decrease to be overridden either by a checkbox that remembers its setting during a series of checkouts, or by a one time use override checkbox that will show in the warning popup if a checkout is affected by high holds. Test Plan: 1) Set up a checkout that will be affected by decreaseLoanHighHolds 2) Attempt to check out an item 3) Check the override checkbox 4) Note the checkout date is not reduced 5) Return the item 6) Start a new checkout for the patron 7) Check the "Don't decrease lean length based on holds" checkbox 8) Check out the item 9) Note you are not warned about the high holds decrease and that the checkout length is not reduced --- C4/Circulation.pm | 23 +++++++--- circ/circulation.pl | 6 ++- .../prog/en/modules/circ/circulation.tt | 48 +++++++++++++++++--- .../{ => Circulation}/DecreaseLoanHighHolds.t | 20 +++++++- 4 files changed, 80 insertions(+), 17 deletions(-) rename t/db_dependent/{ => Circulation}/DecreaseLoanHighHolds.t (86%) diff --git a/C4/Circulation.pm b/C4/Circulation.pm index e8e3858..4ddde11 100644 --- a/C4/Circulation.pm +++ b/C4/Circulation.pm @@ -604,7 +604,7 @@ sub itemissues { =head2 CanBookBeIssued ( $issuingimpossible, $needsconfirmation ) = CanBookBeIssued( $borrower, - $barcode, $duedatespec, $inprocess, $ignore_reserves ); + $barcode, $duedatespec, $inprocess, $ignore_reserves, $override_high_holds ); Check if a book can be issued. @@ -696,7 +696,7 @@ if the borrower borrows to much things =cut sub CanBookBeIssued { - my ( $borrower, $barcode, $duedate, $inprocess, $ignore_reserves ) = @_; + my ( $borrower, $barcode, $duedate, $inprocess, $ignore_reserves, $override_high_holds ) = @_; my %needsconfirmation; # filled with problems that needs confirmations my %issuingimpossible; # filled with problems that causes the issue to be IMPOSSIBLE my %alerts; # filled with messages that shouldn't stop issuing, but the librarian should be aware of. @@ -1014,11 +1014,20 @@ sub CanBookBeIssued { my $check = checkHighHolds( $item, $borrower ); if ( $check->{exceeded} ) { - $needsconfirmation{HIGHHOLDS} = { - num_holds => $check->{outstanding}, - duration => $check->{duration}, - returndate => output_pref( $check->{due_date} ), - }; + if ($override_high_holds) { + $alerts{HIGHHOLDS} = { + num_holds => $check->{outstanding}, + duration => $check->{duration}, + returndate => output_pref( $check->{due_date} ), + }; + } + else { + $needsconfirmation{HIGHHOLDS} = { + num_holds => $check->{outstanding}, + duration => $check->{duration}, + returndate => output_pref( $check->{due_date} ), + }; + } } } diff --git a/circ/circulation.pl b/circ/circulation.pl index 8b2d8d8..153f6e3 100755 --- a/circ/circulation.pl +++ b/circ/circulation.pl @@ -65,6 +65,9 @@ my $query = new CGI; my $sessionID = $query->cookie("CGISESSID") ; my $session = get_session($sessionID); +my $override_high_holds = $query->param('override_high_holds'); +my $override_high_holds_tmp = $query->param('override_high_holds_tmp'); + # branch and printer are now defined by the userenv # but first we have to check if someone has tried to change them @@ -301,7 +304,7 @@ if ($borrowernumber) { if ($barcode) { # always check for blockers on issuing my ( $error, $question, $alerts ) = - CanBookBeIssued( $borrower, $barcode, $datedue , $inprocess ); + CanBookBeIssued( $borrower, $barcode, $datedue, $inprocess, undef, $override_high_holds || $override_high_holds_tmp ); my $blocker = $invalidduedate ? 1 : 0; $template->param( alert => $alerts ); @@ -573,6 +576,7 @@ $template->param( canned_bor_notes_loop => $canned_notes, debarments => GetDebarments({ borrowernumber => $borrowernumber }), todaysdate => output_pref( { dt => dt_from_string()->set(hour => 23)->set(minute => 59), dateformat => 'sql' } ), + override_high_holds => $override_high_holds, ); output_html_with_http_headers $query, $cookie, $template->output; diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tt index 662051e..0f37076 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tt @@ -206,6 +206,10 @@ $(document).ready(function() {
The patron has unpaid charges for reserves, rentals etc of [% alert.OTHER_CHARGES %]
[% END %] +[% IF alert.HIGHHOLDS %] +
High demand item. Loan period not shortened to [% alert.HIGHHOLDS.duration %] days (due [% alert.HIGHHOLDS.returndate %]) due to override.
+[% END %] + [% IF ( NEEDSCONFIRMATION ) %]
@@ -294,7 +298,7 @@ $(document).ready(function() { [% END %] -[% IF HIGHHOLDS %] +[% IF HIGHHOLDS %]
  • High demand item. Loan period shortened to [% HIGHHOLDS.duration %] days (due [% HIGHHOLDS.returndate %]). Check out anyway?
  • [% END %] @@ -309,11 +313,19 @@ $(document).ready(function() { [% IF HIGHHOLDS %] - + [% END %] [% IF CAN_user_circulate_force_checkout or HIGHHOLDS %] @@ -321,6 +333,13 @@ $(document).ready(function() { [% IF (forceallow) %][% END %] +[% IF HIGHHOLDS %] +

    + + +

    +[% END %] + [% IF ( RESERVED ) %]

    @@ -632,6 +651,23 @@ No patron matched [% message %] [% END %] + + [% IF Koha.Preference('decreaseLoanHighHolds') %] + [% IF NEEDSCONFIRMATION %] + [% IF override_high_holds %] + + [% ELSE %] + + [% END %] + [% ELSE %] + [% IF override_high_holds %] + + [% ELSE %] + + [% END %] + [% END %] + + [% END %]

    [% UNLESS ( noissues && Koha.Preference('OnSiteCheckoutsForce') ) %] diff --git a/t/db_dependent/DecreaseLoanHighHolds.t b/t/db_dependent/Circulation/DecreaseLoanHighHolds.t similarity index 86% rename from t/db_dependent/DecreaseLoanHighHolds.t rename to t/db_dependent/Circulation/DecreaseLoanHighHolds.t index 5b1e592..ad1544e 100755 --- a/t/db_dependent/DecreaseLoanHighHolds.t +++ b/t/db_dependent/Circulation/DecreaseLoanHighHolds.t @@ -27,7 +27,7 @@ use Koha::Item; use Koha::Holds; use Koha::Hold; -use Test::More tests => 12; +use Test::More tests => 14; my $dbh = C4::Context->dbh; my $schema = Koha::Database->new()->schema(); @@ -60,7 +60,13 @@ my $biblioitem = my @items; for my $i ( 1 .. 10 ) { - my $item = Koha::Item->new( { biblionumber => $biblio->id(), biblioitemnumber => $biblioitem->id(), } )->store(); + my $item = Koha::Item->new( + { + biblionumber => $biblio->id(), + biblioitemnumber => $biblioitem->id(), + barcode => $i, + } + )->store(); push( @items, $item ); } @@ -88,7 +94,7 @@ C4::Context->set_preference( 'decreaseLoanHighHoldsValue', 1 ); C4::Context->set_preference( 'decreaseLoanHighHoldsControl', 'static' ); C4::Context->set_preference( 'decreaseLoanHighHoldsIgnoreStatuses', 'damaged,itemlost,notforloan,withdrawn' ); -my $item_hr = { itemnumber => $item->id, biblionumber => $biblio->id, homebranch => 'MPL', holdingbranch => 'MPL' }; +my $item_hr = { itemnumber => $item->id, biblionumber => $biblio->id, homebranch => 'MPL', holdingbranch => 'MPL', barcode => $item->barcode }; my $patron_hr = { borrower => $patron->id, branchcode => 'MPL' }; my $data = C4::Circulation::checkHighHolds( $item_hr, $patron_hr ); @@ -147,5 +153,13 @@ $unholdable->store(); $data = C4::Circulation::checkHighHolds( $item_hr, $patron_hr ); is( $data->{exceeded}, 1, "Should exceed threshold" ); +C4::Context->set_preference('CircControl', 'PatronLibrary'); + +my ( undef, $needsconfirmation ) = CanBookBeIssued( $patron_hr, $item->barcode ); +ok( $needsconfirmation->{HIGHHOLDS}, "High holds checkout needs confirmation" ); + +( undef, $needsconfirmation ) = CanBookBeIssued( $patron_hr, $item->barcode, undef, undef, undef, 1 ); +ok( !$needsconfirmation->{HIGHHOLDS}, "High holds checkout does not need confirmation" ); + $schema->storage->txn_rollback(); 1; -- 1.7.2.5