Bug 5578: Self checkout by Login enhancement
[srvgit] / circ / circulation.pl
index 4cf77b2..1e7d42e 100755 (executable)
@@ -1,9 +1,9 @@
 #!/usr/bin/perl
 
-# written 8/5/2002 by Finlay
 # script to execute issuing of books
 
 # Copyright 2000-2002 Katipo Communications
+# copyright 2010 BibLibre
 #
 # This file is part of Koha.
 #
@@ -21,7 +21,7 @@
 # Suite 330, Boston, MA  02111-1307 USA
 
 use strict;
-# use warnings;  # FIXME
+#use warnings; FIXME - Bug 2505
 use CGI;
 use C4::Output;
 use C4::Print;
@@ -109,6 +109,10 @@ if (C4::Context->preference("DisplayClearScreenButton")) {
     $template->param(DisplayClearScreenButton => 1);
 }
 
+if (C4::Context->preference("UseTablesortForCirc")) {
+    $template->param(UseTablesortForCirc => 1);
+}
+
 my $barcode        = $query->param('barcode') || '';
 $barcode =~  s/^\s*|\s*$//g; # remove leading/trailing whitespace
 
@@ -132,37 +136,25 @@ if ( $barcode ) {
     }
 }
 
-my ($datedue,$invalidduedate,$globalduedate);
+my ($datedue,$invalidduedate);
 
-if(C4::Context->preference('globalDueDate') && (C4::Context->preference('globalDueDate') =~ C4::Dates->regexp('syspref'))){
-        $globalduedate = C4::Dates->new(C4::Context->preference('globalDueDate'));
-}
 my $duedatespec_allow = C4::Context->preference('SpecifyDueDate');
 if($duedatespec_allow){
     if ($duedatespec) {
         if ($duedatespec =~ C4::Dates->regexp('syspref')) {
             my $tempdate = C4::Dates->new($duedatespec);
-            if ($tempdate and $tempdate->output('iso') gt C4::Dates->new()->output('iso')) {
-                # i.e., it has to be later than today/now
+#           if ($tempdate and $tempdate->output('iso') gt C4::Dates->new()->output('iso')) {
+#               # i.e., it has to be later than today/now
                 $datedue = $tempdate;
-            } else {
-                $invalidduedate = 1;
-                $template->param(IMPOSSIBLE=>1, INVALID_DATE=>$duedatespec);
-            }
+#           } else {
+#               $invalidduedate = 1;
+#               $template->param(IMPOSSIBLE=>1, INVALID_DATE=>$duedatespec);
+#           }
         } else {
             $invalidduedate = 1;
             $template->param(IMPOSSIBLE=>1, INVALID_DATE=>$duedatespec);
         }
-    } else {
-        # pass global due date to tmpl if specifyduedate is true 
-        # and we have no barcode (loading circ page but not checking out)
-        if($globalduedate &&  ! $barcode ){
-            $duedatespec = $globalduedate->output();
-            $stickyduedate = 1;
-        }
     }
-} else {
-    $datedue = $globalduedate if ($globalduedate);
 }
 
 my $todaysdate = C4::Dates->new->output('iso');
@@ -298,6 +290,7 @@ if ($barcode) {
                 $template->param(
                     $needsconfirmation => $$question{$needsconfirmation},
                     getTitleMessageIteminfo => $getmessageiteminfo->{'title'},
+                    getBarcodeMessageIteminfo => $getmessageiteminfo->{'barcode'},
                     NEEDSCONFIRMATION  => 1
                 );
                 $confirm_required = 1;
@@ -306,10 +299,6 @@ if ($barcode) {
         unless($confirm_required) {
             AddIssue( $borrower, $barcode, $datedue, $cancelreserve );
             $inprocess = 1;
-            if($globalduedate && ! $stickyduedate && $duedatespec_allow ){
-                $duedatespec = $globalduedate->output();
-                $stickyduedate = 1;
-            }
         }
     }
     
@@ -347,6 +336,7 @@ if ($borrowernumber) {
         $getreserv{nottransfered} = 0;
 
         $getreserv{reservedate}    = format_date( $num_res->{'reservedate'} );
+        $getreserv{reservenumber}  = $num_res->{'reservenumber'};
         $getreserv{title}          = $getiteminfo->{'title'};
         $getreserv{itemtype}       = $itemtypeinfo->{'description'};
         $getreserv{author}         = $getiteminfo->{'author'};
@@ -413,9 +403,7 @@ my $todaysissues = '';
 my $previssues   = '';
 my @todaysissues;
 my @previousissues;
-## ADDED BY JF: new itemtype issuingrules counter stuff
-my $issued_itemtypes_count;
-my @issued_itemtypes_count_loop;
+
 my $totalprice = 0;
 
 if ($borrower) {
@@ -449,8 +437,6 @@ if ($borrower) {
         $it->{'od'} = ( $it->{'date_due'} lt $todaysdate ) ? 1 : 0 ;
         ($it->{'author'} eq '') and $it->{'author'} = ' ';
         $it->{'renew_failed'} = $renew_failed{$it->{'itemnumber'}};
-        # ADDED BY JF: NEW ITEMTYPE COUNT DISPLAY
-        $issued_itemtypes_count->{ $it->{'itemtype'} }++;
 
         if ( $todaysdate eq $it->{'issuedate'} or $todaysdate eq $it->{'lastreneweddate'} ) {
             push @todaysissues, $it;
@@ -472,38 +458,6 @@ if ($borrower) {
     }
 }
 
-#### ADDED BY JF FOR COUNTS BY ITEMTYPE RULES
-# FIXME: This should utilize all the issuingrules options rather than just the defaults
-# and it should be moved to a module
-my $dbh = C4::Context->dbh;
-
-# how many of each is allowed?
-my $issueqty_sth = $dbh->prepare(
-    'SELECT itemtypes.description AS description,issuingrules.itemtype,maxissueqty ' .
-    'FROM issuingrules LEFT JOIN itemtypes ON (itemtypes.itemtype=issuingrules.itemtype) ' .
-    'WHERE categorycode=?'
-);
-$issueqty_sth->execute(q{*}); # This is a literal asterisk, not a wildcard.
-
-while ( my $data = $issueqty_sth->fetchrow_hashref() ) {
-
-    # subtract how many of each this borrower has
-    $data->{'count'} = $issued_itemtypes_count->{ $data->{'description'} };  
-    $data->{'left'}  =
-      ( $data->{'maxissueqty'} -
-          $issued_itemtypes_count->{ $data->{'description'} } );
-
-    # can't have a negative number of remaining
-    if ( $data->{'left'} < 0 ) { $data->{'left'} = '0' }
-    if ( $data->{maxissueqty} <= $data->{count} ) {
-        $data->{flag} = 1;
-    }
-    if ( $data->{maxissueqty} > 0 && $data->{itemtype} !~m/^(\*|CIRC)$/ ) {
-        push @issued_itemtypes_count_loop, $data;
-    }
-}
-
-#### / JF
 
 my @values;
 my %labels;
@@ -524,7 +478,7 @@ if ($borrowerslist) {
         -id       => 'borrowernumber',
         -values   => \@values,
         -labels   => \%labels,
-       -onclick  => "window.location = '/cgi-bin/koha/circ/circulation.pl?borrowernumber=' + this.value;",
+        -ondblclick => 'document.forms[\'mainform\'].submit()',
         -size     => 7,
         -tabindex => '',
         -multiple => 0
@@ -645,8 +599,12 @@ if($bor_messages_loop){ $template->param(flagged => 1 ); }
 my (undef, $roadttype_hashref) = &GetRoadTypes();
 my $address = $borrower->{'streetnumber'}.' '.$roadttype_hashref->{$borrower->{'streettype'}}.' '.$borrower->{'address'};
 
+my $fast_cataloging = 0;
+    if (defined getframeworkinfo('FA')) {
+    $fast_cataloging = 1 
+    }
+
 $template->param(
-    issued_itemtypes_count_loop => \@issued_itemtypes_count_loop,
     lib_messages_loop => $lib_messages_loop,
     bor_messages_loop => $bor_messages_loop,
     all_messages_del  => C4::Context->preference('AllowAllMessageDeletion'),
@@ -689,6 +647,7 @@ $template->param(
     is_child          => ($borrower->{'category_type'} eq 'C'),
     circview => 1,
     soundon           => C4::Context->preference("SoundOn"),
+    fast_cataloging   => $fast_cataloging,
 );
 
 # save stickyduedate to session
@@ -700,15 +659,8 @@ my ($picture, $dberror) = GetPatronImage($borrower->{'cardnumber'});
 $template->param( picture => 1 ) if $picture;
 
 # get authorised values with type of BOR_NOTES
-my @canned_notes;
-my $sth = $dbh->prepare('SELECT * FROM authorised_values WHERE category = "BOR_NOTES"');
-$sth->execute();
-while ( my $row = $sth->fetchrow_hashref() ) {
-  push @canned_notes, $row;
-}
-if ( scalar( @canned_notes ) ) {
-  $template->param( canned_bor_notes_loop => \@canned_notes );
-}
+
+my $canned_notes = GetAuthorisedValues("BOR_NOTES");
 
 $template->param(
     debt_confirmed            => $debt_confirmed,
@@ -717,5 +669,6 @@ $template->param(
        AllowRenewalLimitOverride => C4::Context->preference("AllowRenewalLimitOverride"),
     dateformat                => C4::Context->preference("dateformat"),
     DHTMLcalendar_dateformat  => C4::Dates->DHTMLcalendar(),
+    canned_bor_notes_loop     => $canned_notes,
 );
 output_html_with_http_headers $query, $cookie, $template->output;