updating INSTALL and INSTALL.debian
[koha_fer] / circ / circulation.pl
index 07aa649..0492330 100755 (executable)
@@ -26,8 +26,8 @@ use strict;
 use CGI;
 use C4::Output;
 use C4::Print;
-use C4::Auth;
-use C4::Date;
+use C4::Auth qw/:DEFAULT get_session/;
+use C4::Dates qw/format_date/;
 use C4::Branch; # GetBranches
 use C4::Koha;   # GetPrinter
 use C4::Circulation;
@@ -59,7 +59,7 @@ if ($branch){
     # update our session so the userenv is updated
     my $dbh=C4::Context->dbh;
     my $sessionID = $query->cookie("CGISESSID") ;
-    my $session = new CGI::Session("driver:MySQL", $sessionID, {Handle=>$dbh});
+    my $session = get_session($sessionID);
     $session->param('branch',$branch);
     my $branchname = GetBranchName($branch);
     $session->param('branchname',$branchname);
@@ -70,7 +70,7 @@ if ($printer){
     # update our session so the userenv is updated
        my $dbh=C4::Context->dbh;
        my $sessionID = $query->cookie("CGISESSID") ;
-       my $session = new CGI::Session("driver:MySQL", $sessionID, {Handle=>$dbh});
+       my $session = get_session($sessionID);
        $session->param('branchprinter',$printer);
 
 }
@@ -89,6 +89,9 @@ my $branches = GetBranches();
 
 my $printers = GetPrinters();
 
+my @failedrenews = $query->param('failedrenew');
+my @renew_failed;
+for (@failedrenews) { $renew_failed[$_] = 1; } 
 
 my $findborrower = $query->param('findborrower');
 $findborrower =~ s|,| |g;
@@ -108,14 +111,20 @@ $printer = C4::Context->userenv->{'branchprinter'};
         }
 
 my $barcode        = $query->param('barcode') || '';
+
+# strip whitespace
+$barcode =~ s/\s*//g;
+
 my $year           = $query->param('year');
 my $month          = $query->param('month');
 my $day            = $query->param('day');
 my $stickyduedate  = $query->param('stickyduedate');
+my $duedatespec    = $query->param('duedatespec');
 my $issueconfirmed = $query->param('issueconfirmed');
 my $cancelreserve  = $query->param('cancelreserve');
 my $organisation   = $query->param('organisations');
 my $print          = $query->param('print');
+my $newexpiry = $query->param('dateexpiry');
 
 #set up cookie.....
 # my $branchcookie;
@@ -126,8 +135,19 @@ my $print          = $query->param('print');
 # }
 #
 
+my ($datedue,$invalidduedate);
+if ($duedatespec) {
+       $datedue =  C4::Dates->new($duedatespec);
+       $invalidduedate=1 unless $datedue;
+}
 
-my @datearr = localtime( time() );
+#if (defined($year)) {
+#        $duedatespec = "$year-$month-$day";
+#} else {
+#        ($year, $month, $day) = ($duedatespec) ? split /-/, $duedatespec : (0,0,0);
+#}
+
+my @datearr = localtime();
 
 # FIXME - Could just use POSIX::strftime("%Y%m%d", localtime);
 my $todaysdate =
@@ -182,7 +202,6 @@ if ($findborrower) {
 # get the borrower information.....
 my $borrower;
 my @lines;
-
 if ($borrowernumber) {
     $borrower = GetMemberDetails( $borrowernumber, 0 );
     my ( $od, $issue, $fines ) = GetMemberIssuesAndFines( $borrowernumber );
@@ -197,27 +216,28 @@ if ($borrowernumber) {
     my ( $renew_year, $renew_month, $renew_day ) =
       Add_Delta_YM( $enrol_year, $enrol_month, $enrol_day,
         0 , $borrower->{'enrolmentperiod'}) if ($enrol_year*$enrol_month*$enrol_day>0);
-    # if the expiry date is before today
+    # if the expiry date is before today ie they have expired
     if ( $warning_year*$warning_month*$warning_day==0 
       || Date_to_Days( $today_year, $today_month, $today_day ) 
          > Date_to_Days( $warning_year, $warning_month, $warning_day ) )
     {
-
-        #borrowercard expired or nearly expired, warn the librarian
+        #borrowercard expired, no issues
         $template->param(
-            flagged       => "1",
-            warndeparture => format_date($borrower->{dateexpiry}),
+                       flagged => "1",
+            noissues       => "1",
+            expired => format_date($borrower->{dateexpiry}),
             renewaldate   => format_date("$renew_year-$renew_month-$renew_day")
         );
     }
     # check for NotifyBorrowerDeparture
-        if ($warning_year*$warning_month*$warning_day==0 
-      || (C4::Context->preference('NotifyBorrowerDeparture') &&
-            Date_to_Days(Add_Delta_Days($warning_year,$warning_month,$warning_day,- C4::Context->preference('NotifyBorrowerDeparture'))) <
-            Date_to_Days( $today_year, $today_month, $today_day )) ) 
-        {
-            $template->param("warndeparture" => format_date($borrower->{dateexpiry}));
-        }
+       elsif ( C4::Context->preference('NotifyBorrowerDeparture') &&
+               Date_to_Days(Add_Delta_Days($warning_year,$warning_month,$warning_day,- C4::Context->preference('NotifyBorrowerDeparture'))) <
+               Date_to_Days( $today_year, $today_month, $today_day ) ) 
+       {
+               # borrower card soon to expire warn librarian
+               $template->param("warndeparture" => format_date($borrower->{dateexpiry}),
+                       flagged       => "1",);
+       }
     $template->param(
         overduecount => $od,
         issuecount   => $issue,
@@ -231,20 +251,19 @@ if ($borrowernumber) {
 #
 
 if ($barcode) {
-    $barcode = cuecatbarcodedecode($barcode);
-    my ( $datedue, $invalidduedate ) = fixdate( $year, $month, $day );
-    if ($issueconfirmed) {
+   # $barcode = cuecatbarcodedecode($barcode);
+    
+       if ($issueconfirmed) {
         AddIssue( $borrower, $barcode, $datedue, $cancelreserve );
         $inprocess = 1;
     }
     else {
         my ( $error, $question ) =
-          CanBookBeIssued( $borrower, $barcode, $year, $month, $day,
-            $inprocess );
+          CanBookBeIssued( $borrower, $barcode, $datedue , $inprocess );
         my $noerror    = 1;
         my $noquestion = 1;
 #         Get the item title for more information
-       my $getmessageiteminfo  = GetBiblioFromItemNumber($barcode);
+       my $getmessageiteminfo  = GetBiblioFromItemNumber(undef,$barcode);
     
         foreach my $impossible ( keys %$error ) {
             $template->param(
@@ -262,9 +281,8 @@ if ($barcode) {
             $noquestion = 0;
         }
         $template->param(
-            day   => $day,
-            month => $month,
-            year  => $year
+                        itemhomebranch => $getmessageiteminfo->{'homebranch'} ,                     
+                        duedatespec => $duedatespec,
         );
         if ( $noerror && ( $noquestion || $issueconfirmed ) ) {
             AddIssue( $borrower, $barcode, $datedue );
@@ -299,7 +317,7 @@ if ($borrowernumber) {
         my %getreserv;
         my %getWaitingReserveInfo;
         my $getiteminfo  = GetBiblioFromItemNumber( $num_res->{'itemnumber'} );
-        my $itemtypeinfo = getitemtypeinfo( (C4::Context->preference('item-level_itype')) ? $getiteminfo->{'ccode'} : $getiteminfo->{'itemtype'} );
+        my $itemtypeinfo = getitemtypeinfo( (C4::Context->preference('item-level_itype')) ? $getiteminfo->{'itype'} : $getiteminfo->{'itemtype'} );
         my ( $transfertwhen, $transfertfrom, $transfertto ) =
           GetTransfers( $num_res->{'itemnumber'} );
 
@@ -313,6 +331,7 @@ if ($borrowernumber) {
         $getreserv{author}         = $getiteminfo->{'author'};
         $getreserv{barcodereserv}  = $getiteminfo->{'barcode'};
         $getreserv{itemcallnumber} = $getiteminfo->{'itemcallnumber'};
+               $getreserv{biblionumber}   = $getiteminfo->{'biblionumber'};
 
         #         check if we have a waiting status for reservations
         if ( $num_res->{'found'} eq 'W' ) {
@@ -347,7 +366,7 @@ if ($borrowernumber) {
 
 #         if we don't have a reserv on item, we put the biblio infos and the waiting position
         if ( $getiteminfo->{'title'} eq '' ) {
-            my $getbibinfo = GetBiblioItemData( $num_res->{'biblionumber'} );
+            my $getbibinfo = GetBiblioData( $num_res->{'biblionumber'} );
             my $getbibtype = getitemtypeinfo( $getbibinfo->{'itemtype'} );  # fixme - we should have item-level reserves here ?
             $getreserv{color}           = 'inwait';
             $getreserv{title}           = $getbibinfo->{'title'};
@@ -356,7 +375,7 @@ if ($borrowernumber) {
             $getreserv{itemtype}        = $getbibtype->{'description'};
             $getreserv{author}          = $getbibinfo->{'author'};
             $getreserv{itemcallnumber}  = '----------';
-
+               $getreserv{biblionumber}    = $num_res->{'biblionumber'};
         }
         push( @reservloop, \%getreserv );
 
@@ -414,7 +433,7 @@ if ($borrower) {
         $datedue =~ s/-//g;
                $it->{'od'} = ($datedue < $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'} }++;
 
@@ -424,11 +443,22 @@ if ($borrower) {
             push @previousissues, $it;
         }
     }
-    @todaysissues   = sort { $b->{'timestamp'} <=> $a->{'timestamp'} } @todaysissues;
-    @previousissues = sort { $b->{'date_due' } <=> $a->{'date_due' } } @previousissues;
+       if (C4::Context->preference("todaysIssuesDefaultSortOrder") eq 'asc'){
+               @todaysissues   = sort { $a->{'timestamp'} cmp $b->{'timestamp'} } @todaysissues;
+       }
+       else {
+               @todaysissues   = sort { $b->{'timestamp'} cmp $a->{'timestamp'} } @todaysissues;
+       }
+       if (C4::Context->preference("previousIssuesDefaultSortOrder") eq 'asc'){
+               @previousissues = sort { $a->{'date_due' } cmp $b->{'date_due' } } @previousissues;
+       }
+       else {
+               @previousissues = sort { $b->{'date_due' } cmp $a->{'date_due' } } @previousissues;
+       }
     my $i = 1;
        foreach my $book (@todaysissues) {
         $book->{'togglecolor'} = (++$i % 2) ? 0 : 1 ;
+               warn $book->{'timestamp'};
     }
     $i = 1;
        foreach my $book (@previousissues) {
@@ -479,9 +509,9 @@ my $CGIselectborrower;
 if ($borrowerslist) {
     foreach (
         sort {
-                $a->{'surname'}
-              . $a->{'firstname'} cmp $b->{'surname'}
-              . $b->{'firstname'}
+                lc $a->{'surname'}
+              . lc $a->{'firstname'} cmp lc $b->{'surname'}
+              . lc $b->{'firstname'}
         } @$borrowerslist
       )
     {
@@ -605,6 +635,10 @@ if ( C4::Context->preference("memberofinstitution") ) {
 
 $amountold = $temp[1];
 
+my $borrowercategory = GetBorrowercategory( $borrower->{'categorycode'} );
+my $category_type = $borrowercategory->{'category_type'};
+( $template->param( adultborrower => 1 ) ) if ( $category_type eq 'A' );
+
 $template->param(
     issued_itemtypes_count_loop => $issued_itemtypes_loop,
     findborrower                => $findborrower,
@@ -615,6 +649,7 @@ $template->param(
     printername                 => $printer,
     firstname                   => $borrower->{'firstname'},
     surname                     => $borrower->{'surname'},
+       dateexpiry => format_date($newexpiry),
     expiry                      =>
       $borrower->{'dateexpiry'},    #format_date($borrower->{'dateexpiry'}),
     categorycode      => $borrower->{'categorycode'},
@@ -636,17 +671,14 @@ $template->param(
     inprocess         => $inprocess,
     memberofinstution => $member_of_institution,
     CGIorganisations  => $CGIorganisations,
+       circview => 1,
+       
 );
 
 # set return date if stickyduedate
 if ($stickyduedate) {
-    my $t_year  = "year" . $year;
-    my $t_month = "month" . $month;
-    my $t_day   = "day" . $day;
     $template->param(
-        $t_year  => 1,
-        $t_month => 1,
-        $t_day   => 1,
+        duedatespec => $duedatespec,
     );
 }
 
@@ -655,7 +687,8 @@ if ($stickyduedate) {
 #}
 
 $template->param(
-    SpecifyDueDate     => C4::Context->preference("SpecifyDueDate")
+    SpecifyDueDate           => C4::Context->preference("SpecifyDueDate"),
+    CircAutocompl            => C4::Context->preference("CircAutocompl") ,
+    DHTMLcalendar_dateformat => C4::Dates->DHTMLcalendar(),
 );
-$template->param( CircAutocompl => C4::Context->preference("CircAutocompl") );
 output_html_with_http_headers $query, $cookie, $template->output;