Bug 14470: Do not allow renew for on-site checkouts
authorJonathan Druart <jonathan.druart@bugs.koha-community.org>
Tue, 4 Aug 2015 09:38:29 +0000 (10:38 +0100)
committerTomas Cohen Arazi <tomascohen@theke.io>
Mon, 7 Sep 2015 15:07:37 +0000 (12:07 -0300)
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 <mirko@abunchofthings.net>
Signed-off-by: Katrin Fischer <Katrin.Fischer.83@web.de>
Changed 'issue' to 'item' in the error message.
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
C4/Circulation.pm
koha-tmpl/intranet-tmpl/prog/en/js/checkouts.js
koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tt
t/db_dependent/Circulation.t

index 5177203..4ddd75f 100644 (file)
@@ -938,7 +938,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;
@@ -2667,6 +2672,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 )
index 23a8426..485c292 100644 (file)
@@ -328,6 +328,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 += "<span class='renewals-disabled'>"
                                     + oObj.can_renew_error
@@ -339,20 +341,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 += "<span class='" + span_class + "' style='" + span_style + "'>"
-                                        +  "<input type='checkbox' ";
-                                if ( oObj.date_due_overdue && can_renew ) {
-                                    content += "checked='checked' ";
-                                }
-                                content += "class='renew' id='renew_" + oObj.itemnumber + "' name='renew' value='" + oObj.itemnumber +"'/>"
-                                        +  "</span>";
-
-                                content += "<span class='renewals'>("
-                                        + RENEWALS_REMAINING.format( oObj.renewals_remaining, oObj.renewals_allowed )
-                                        + ")</span>";
+                        if ( can_renew || can_force_renew ) {
+                            content += "<span class='" + span_class + "' style='" + span_style + "'>"
+                                    +  "<input type='checkbox' ";
+                            if ( oObj.date_due_overdue && can_renew ) {
+                                content += "checked='checked' ";
                             }
+                            content += "class='renew' id='renew_" + oObj.itemnumber + "' name='renew' value='" + oObj.itemnumber +"'/>"
+                                    +  "</span>";
+
+                            content += "<span class='renewals'>("
+                                    + RENEWALS_REMAINING.format( oObj.renewals_remaining, oObj.renewals_allowed )
+                                    + ")</span>";
                         }
 
                         content += "</span>";
index 3d5e880..6d9e5ad 100644 (file)
@@ -481,6 +481,10 @@ $(document).ready(function() {
             <li>No more renewals possible</li>
         [% END %]
 
+        [% IF NO_RENEWAL_FOR_ONSITE_CHECKOUTS %]
+            <li>This item can not be renewed, it's an on-site checkout</li>
+        [% END %]
+
         [%IF ( AGE_RESTRICTION ) %]
             <li>Age restriction [% AGE_RESTRICTION %].</li>
         [% END %]
index 591c7e4..f4910ef 100755 (executable)
@@ -27,7 +27,7 @@ use C4::Overdues qw(UpdateFine);
 use Koha::DateUtils;
 use Koha::Database;
 
-use Test::More tests => 67;
+use Test::More tests => 69;
 
 BEGIN {
     use_ok('C4::Circulation');
@@ -685,5 +685,41 @@ C4::Context->dbh->do("DELETE FROM accountlines");
     is( $renewokay, 0, 'Bug 14337 - Verify the borrower can not renew with a hold on the record if AllowRenewalIfOtherItemsAvailable is enabled but the only available item is notforloan' );
 }
 
+{
+    # 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;