From 1b686528f78d31afec8fe9a446e6851f6561bde8 Mon Sep 17 00:00:00 2001 From: Jonathan Druart Date: Tue, 4 Aug 2015 10:38:29 +0100 Subject: [PATCH] Bug 14470: Do not allow renew for on-site checkouts At the opac, the renew checkbox should not be displayed if it's an on-site checkout (same on the intranet). On the way, this patch adds a specific message to the intranet if the librarian try to renew an on-site checkout. Indeed before this patch a renew was allowed if the barcode was scanned. Test plan: 1/ Create an on-site checkout for a patron 2/ Confirm that the checkbox 'renew' is not displayed on the checkout list tables 3/ At the OPAC, the renew should not be allowed (no checkbox) 4/ Try to check the item out to the same patron, confirm that you get a specifig message to inform you the renew is not allowed for on-site checkouts. Signed-off-by: Mirko Tietgen Signed-off-by: Katrin Fischer Changed 'issue' to 'item' in the error message. Signed-off-by: Tomas Cohen Arazi (cherry picked from commit ea92a92f5384c3256de55b770d31342f796edc47) Signed-off-by: Chris Cormack Signed-off-by: Liz Rea Conflicts: t/db_dependent/Circulation.t (cherry picked from commit d1ce272dd2a5c75862db16d2b0682b0a9d654565) Signed-off-by: Liz Rea --- C4/Circulation.pm | 8 +++- .../intranet-tmpl/prog/en/js/checkouts.js | 26 ++++++------- .../prog/en/modules/circ/circulation.tt | 4 ++ t/db_dependent/Circulation.t | 39 ++++++++++++++++++- 4 files changed, 62 insertions(+), 15 deletions(-) diff --git a/C4/Circulation.pm b/C4/Circulation.pm index bb032b932a..cfa331dfd8 100644 --- a/C4/Circulation.pm +++ b/C4/Circulation.pm @@ -937,7 +937,12 @@ sub CanBookBeIssued { $item->{'itemnumber'} ); if ( $CanBookBeRenewed == 0 ) { # no more renewals allowed - $issuingimpossible{NO_MORE_RENEWALS} = 1; + if ( $renewerror eq 'onsite_checkout' ) { + $issuingimpossible{NO_RENEWAL_FOR_ONSITE_CHECKOUTS} = 1; + } + else { + $issuingimpossible{NO_MORE_RENEWALS} = 1; + } } else { $needsconfirmation{RENEW_ISSUE} = 1; @@ -2659,6 +2664,7 @@ sub CanBookBeRenewed { my $item = GetItem($itemnumber) or return ( 0, 'no_item' ); my $itemissue = GetItemIssue($itemnumber) or return ( 0, 'no_checkout' ); + return ( 0, 'onsite_checkout' ) if $itemissue->{onsite_checkout}; $borrowernumber ||= $itemissue->{borrowernumber}; my $borrower = C4::Members::GetMember( borrowernumber => $borrowernumber ) diff --git a/koha-tmpl/intranet-tmpl/prog/en/js/checkouts.js b/koha-tmpl/intranet-tmpl/prog/en/js/checkouts.js index beed488610..05d49157e9 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/js/checkouts.js +++ b/koha-tmpl/intranet-tmpl/prog/en/js/checkouts.js @@ -327,6 +327,8 @@ $(document).ready(function() { span_style = "display: none"; span_class = "renewals-allowed"; + } else if ( oObj.can_renew_error == "onsite_checkout" ) { + // Don't display something if it's an onsite checkout } else { content += "" + oObj.can_renew_error @@ -338,20 +340,18 @@ $(document).ready(function() { var can_force_renew = ( oObj.onsite_checkout == 0 ) && ( oObj.can_renew_error != "on_reserve" ); var can_renew = ( oObj.renewals_remaining > 0 && !oObj.can_renew_error ); - if ( oObj.onsite_checkout == 0 ) { - if ( can_renew || can_force_renew ) { - content += "" - + "" - + ""; - - content += "(" - + RENEWALS_REMAINING.format( oObj.renewals_remaining, oObj.renewals_allowed ) - + ")"; + if ( can_renew || can_force_renew ) { + content += "" + + "" + + ""; + + content += "(" + + RENEWALS_REMAINING.format( oObj.renewals_remaining, oObj.renewals_allowed ) + + ")"; } content += ""; 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 1f1f841b30..95ce96da41 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tt @@ -422,6 +422,10 @@ $(document).ready(function() {
  • No more renewals possible
  • [% END %] + [% IF NO_RENEWAL_FOR_ONSITE_CHECKOUTS %] +
  • This item can not be renewed, it's an on-site checkout
  • + [% END %] + [%IF ( AGE_RESTRICTION ) %]
  • Age restriction [% AGE_RESTRICTION %].
  • [% END %] diff --git a/t/db_dependent/Circulation.t b/t/db_dependent/Circulation.t index 95d65ee05c..6e55828eae 100755 --- a/t/db_dependent/Circulation.t +++ b/t/db_dependent/Circulation.t @@ -27,7 +27,7 @@ use C4::Overdues qw(UpdateFine); use Koha::DateUtils; use Koha::Database; -use Test::More tests => 61; +use Test::More tests => 69; BEGIN { use_ok('C4::Circulation'); @@ -596,4 +596,41 @@ C4::Context->dbh->do("DELETE FROM accountlines"); $dbh->rollback; +{ + # Don't allow renewing onsite checkout + my $barcode = 'R00000XXX'; + my $branch = 'CPL'; + + #Create another record + my $biblio = MARC::Record->new(); + $biblio->append_fields( + MARC::Field->new('100', ' ', ' ', a => 'Anonymous'), + MARC::Field->new('245', ' ', ' ', a => 'A title'), + ); + my ($biblionumber, $biblioitemnumber) = AddBiblio($biblio, ''); + + my (undef, undef, $itemnumber) = AddItem( + { + homebranch => $branch, + holdingbranch => $branch, + barcode => $barcode, + }, + $biblionumber + ); + + my $borrowernumber = AddMember( + firstname => 'fn', + surname => 'dn', + categorycode => 'S', + branchcode => $branch, + ); + + my $borrower = GetMember( borrowernumber => $borrowernumber ); + my $issue = AddIssue( $borrower, $barcode, undef, undef, undef, undef, { onsite_checkout => 1 } ); + my ( $renewed, $error ) = CanBookBeRenewed( $borrowernumber, $itemnumber ); + is( $renewed, 0, 'CanBookBeRenewed should not allow to renew on-site checkout' ); + is( $error, 'onsite_checkout', 'A correct error code should be returned by CanBookBeRenewed for on-site checkout' ); +} + +$schema->storage->txn_rollback(); 1; -- 2.39.5