Bug 32336: (QA follow-up) Use $metadata->schema
[srvgit] / svc / checkouts
index 3e92e40..b8e84f4 100755 (executable)
@@ -22,21 +22,24 @@ use Modern::Perl;
 use CGI;
 use JSON qw(to_json);
 
-use C4::Auth qw(check_cookie_auth haspermission get_session);
-use C4::Circulation qw(GetIssuingCharges CanBookBeRenewed GetRenewCount GetSoonestRenewDate);
+use C4::Auth qw(check_cookie_auth haspermission);
+use C4::Circulation qw(GetIssuingCharges CanBookBeRenewed GetRenewCount );
 use C4::Overdues qw(GetFine);
 use C4::Context;
 
 use Koha::AuthorisedValues;
-use Koha::DateUtils;
+use Koha::DateUtils qw( dt_from_string output_pref );
+use Koha::Items;
 use Koha::ItemTypes;
 
-my $input = new CGI;
+my $input = CGI->new;
 
-my ( $auth_status, $sessionID ) =
-  check_cookie_auth( $input->cookie('CGISESSID'));
+my ( $auth_status, $session ) = check_cookie_auth( $input->cookie('CGISESSID'));
+if( $auth_status ne 'ok' ) {
+    print CGI::header( '-status' => '401' );
+    exit 0;
+}
 
-my $session   = get_session($sessionID);
 my $userid   = $session->param('id');
 
 unless (haspermission($userid, { circulate => 'circulate_remaining_permissions' })
@@ -85,6 +88,7 @@ my $sql = '
         items.itemnotes,
         items.itemnotes_nonpublic,
         items.itemcallnumber,
+        items.copynumber,
         items.replacementprice,
 
         issues.branchcode,
@@ -150,19 +154,26 @@ while ( my $c = $sth->fetchrow_hashref() ) {
     my ($charge) = GetIssuingCharges( $c->{itemnumber}, $c->{borrowernumber} );
     my $fine = GetFine( $c->{itemnumber}, $c->{borrowernumber} );
 
-    my ( $can_renew, $can_renew_error ) =
+    my ( $can_renew, $can_renew_error, $info ) =
       CanBookBeRenewed( $c->{borrowernumber}, $c->{itemnumber} );
     my $can_renew_date =
       $can_renew_error && $can_renew_error eq 'too_soon'
       ? output_pref(
         {
-            dt => GetSoonestRenewDate( $c->{borrowernumber}, $c->{itemnumber} ),
+            dt => $info->{soonest_renew_date},
             as_due_date => 1
         }
       )
       : undef;
 
-    my ( $renewals_count, $renewals_allowed, $renewals_remaining ) =
+    my (
+        $renewals_count,
+        $renewals_allowed,
+        $renewals_remaining,
+        $unseen_count,
+        $unseen_allowed,
+        $unseen_remaining
+    ) =
       GetRenewCount( $c->{borrowernumber}, $c->{itemnumber} );
 
     my ( $itemtype, $recordtype, $type_for_stat );
@@ -202,6 +213,29 @@ while ( my $c = $sth->fetchrow_hashref() ) {
         $materials = $descriptions->{lib} // $c->{materials};
     }
     my @subtitles = split(/ \| /, $c->{'subtitle'} // '' );
+
+    my $item = Koha::Items->find( $c->{itemnumber} );
+    my $recalled = 0;
+    if ( C4::Context->preference('UseRecalls') ) {
+        my $recall = undef;
+        $recall = $item->check_recalls if $item->can_be_waiting_recall;
+        if ( defined $recall ) {
+            if ( $recall->item_level ) {
+                if ( $recall->item_id == $c->{itemnumber} ) {
+                    # item-level recall on this item
+                    $recalled = 1;
+                } else {
+                    $recalled = 0;
+                }
+            } else {
+                # biblio-level recall, but don't want to mark recalled if the recall has been allocated a different item
+                if ( !$recall->waiting ) {
+                    $recalled = 1;
+                }
+            }
+        }
+    }
+
     my $checkout = {
         DT_RowId             => $c->{itemnumber} . '-' . $c->{borrowernumber},
         title                => $c->{title},
@@ -221,7 +255,8 @@ while ( my $c = $sth->fetchrow_hashref() ) {
         itemnotes_nonpublic  => $c->{itemnotes_nonpublic},
         branchcode           => $c->{branchcode},
         branchname           => $c->{branchname},
-        itemcallnumber => $c->{itemcallnumber}   || q{},
+        itemcallnumber       => $c->{itemcallnumber} || q{},
+        copynumber           => $c->{copynumber} || q{},
         charge         => $charge,
         fine           => $fine,
         price          => $c->{replacementprice} || q{},
@@ -238,8 +273,11 @@ while ( my $c = $sth->fetchrow_hashref() ) {
         onsite_checkout     => $c->{onsite_checkout},
         enumchron           => $c->{enumchron},
         renewals_count      => $renewals_count,
-        renewals_allowed    => $renewals_allowed,
+        renewals_allowed    => $renewals_allowed || 0,
         renewals_remaining  => $renewals_remaining,
+        unseen_count        => $unseen_count,
+        unseen_allowed      => $unseen_allowed,
+        unseen_remaining    => $unseen_remaining,
 
         return_claim_id         => $c->{return_claim_id},
         return_claim_notes      => $c->{return_claim_notes},
@@ -270,6 +308,7 @@ while ( my $c = $sth->fetchrow_hashref() ) {
             cardnumber => $c->{cardnumber},
         },
         issued_today => !$c->{not_issued_today},
+        recalled => $recalled,
     };
 
     if ( $c->{not_issued_today} ) {