Fix for bug 1427
[koha_gimpoz] / circ / circulation.pl
index 813eaa2..2ab8f5f 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;
@@ -112,10 +115,12 @@ 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 +131,19 @@ my $print          = $query->param('print');
 # }
 #
 
+my ($datedue,$invalidduedate);
+if ($duedatespec) {
+       $datedue =  C4::Dates->new($duedatespec,'iso' );
+       $invalidduedate=1 unless $datedue;
+}
+
+#if (defined($year)) {
+#        $duedatespec = "$year-$month-$day";
+#} else {
+#        ($year, $month, $day) = ($duedatespec) ? split /-/, $duedatespec : (0,0,0);
+#}
 
-my @datearr = localtime( time() );
+my @datearr = localtime();
 
 # FIXME - Could just use POSIX::strftime("%Y%m%d", localtime);
 my $todaysdate =
@@ -182,7 +198,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 +212,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 +247,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 +277,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 +313,7 @@ if ($borrowernumber) {
         my %getreserv;
         my %getWaitingReserveInfo;
         my $getiteminfo  = GetBiblioFromItemNumber( $num_res->{'itemnumber'} );
-        my $itemtypeinfo = getitemtypeinfo( $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 +327,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,8 +362,8 @@ 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 $getbibtype = getitemtypeinfo( $getbibinfo->{'itemtype'} );
+            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'};
             $getreserv{waitingposition} = $num_res->{'priority'};
@@ -356,7 +371,7 @@ if ($borrowernumber) {
             $getreserv{itemtype}        = $getbibtype->{'description'};
             $getreserv{author}          = $getbibinfo->{'author'};
             $getreserv{itemcallnumber}  = '----------';
-
+               $getreserv{biblionumber}    = $num_res->{'biblionumber'};
         }
         push( @reservloop, \%getreserv );
 
@@ -387,6 +402,7 @@ my $issued_itemtypes_count;
 my $issued_itemtypes_allowed_count;    # hashref with total allowed by itemtype
 my $issued_itemtypes_remaining;        # hashref with remaining
 my $issued_itemtypes_flags;            #hashref that stores flags
+my @issued_itemtypes_count_loop;
 
 if ($borrower) {
 
@@ -409,11 +425,11 @@ if ($borrower) {
                ($restype) and $it->{'can_renew'} = 0;
 
                $it->{'dd'} = format_date($it->{'date_due'});
-        my $datedue = format_date($it->{'date_due'});
+        my $datedue = $it->{'date_due'};
         $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'} }++;
 
@@ -447,12 +463,13 @@ FROM issuingrules
   LEFT JOIN itemtypes ON (itemtypes.itemtype=issuingrules.itemtype)
   WHERE categorycode=?
 " );
-my @issued_itemtypes_count;
+#my @issued_itemtypes_count;  # huh?
 $issueqty_sth->execute("*");
+
 while ( my $data = $issueqty_sth->fetchrow_hashref() ) {
 
     # subtract how many of each this borrower has
-    $data->{'count'} = $issued_itemtypes_count->{ $data->{'description'} };
+    $data->{'count'} = $issued_itemtypes_count->{ $data->{'description'} };  
     $data->{'left'}  =
       ( $data->{'maxissueqty'} -
           $issued_itemtypes_count->{ $data->{'description'} } );
@@ -464,10 +481,10 @@ while ( my $data = $issueqty_sth->fetchrow_hashref() ) {
         || ( $data->{'itemtype'} eq "*" )
         || ( $data->{'itemtype'} eq "CIRC" ) )
     {
-        push @issued_itemtypes_count, $data;
+        push @issued_itemtypes_count_loop, $data;
     }
 }
-$issued_itemtypes_loop = \@issued_itemtypes_count;
+$issued_itemtypes_loop = \@issued_itemtypes_count_loop;
 
 #### / JF
 
@@ -489,6 +506,7 @@ if ($borrowerslist) {
     }
     $CGIselectborrower = CGI::scrolling_list(
         -name     => 'borrowernumber',
+               -class     => 'focus',
                -id          => 'borrowernumber',
         -values   => \@values,
         -labels   => \%labels,
@@ -602,6 +620,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,
@@ -612,10 +634,12 @@ $template->param(
     printername                 => $printer,
     firstname                   => $borrower->{'firstname'},
     surname                     => $borrower->{'surname'},
+       dateexpiry => format_date($newexpiry),
     expiry                      =>
       $borrower->{'dateexpiry'},    #format_date($borrower->{'dateexpiry'}),
     categorycode      => $borrower->{'categorycode'},
-    streetaddress     => $borrower->{'address'},
+    address     => $borrower->{'address'},
+    address2     => $borrower->{'address2'},
     email      => $borrower->{'email'},
        emailpro           => $borrower->{'emailpro'},
     borrowernotes     => $borrower->{'borrowernotes'},
@@ -632,17 +656,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,
     );
 }
 
@@ -651,7 +672,8 @@ if ($stickyduedate) {
 #}
 
 $template->param(
-    SpecifyDueDate     => C4::Context->preference("SpecifyDueDate")
+               SpecifyDueDate     => C4::Context->preference("SpecifyDueDate"),
+               CircAutocompl => C4::Context->preference("CircAutocompl") ,
+               DHTMLformat   => C4::Dates->DHTMLcalendar(),
 );
-$template->param( CircAutocompl => C4::Context->preference("CircAutocompl") );
 output_html_with_http_headers $query, $cookie, $template->output;