[Koha-patches] [PATCH] Update fines cronjob: remove redundant scripts, remove some superfluous code in remaining fines.pl.

Ryan Higgins rch at liblime.com
Sun Aug 10 14:24:03 CEST 2008


---
 C4/Overdues.pm               |    5 +-
 misc/cronjobs/fines-ll.pl    |  195 ------------------------------------------
 misc/cronjobs/fines-sanop.pl |  194 -----------------------------------------
 misc/cronjobs/fines.pl       |  110 ++++++++++++++++++++++++
 misc/cronjobs/fines2.pl      |  159 ----------------------------------
 5 files changed, 114 insertions(+), 549 deletions(-)
 delete mode 100755 misc/cronjobs/fines-ll.pl
 delete mode 100755 misc/cronjobs/fines-sanop.pl
 create mode 100755 misc/cronjobs/fines.pl
 delete mode 100755 misc/cronjobs/fines2.pl

diff --git a/C4/Overdues.pm b/C4/Overdues.pm
index e735ff9..3a74f63 100644
--- a/C4/Overdues.pm
+++ b/C4/Overdues.pm
@@ -493,9 +493,12 @@ sub UpdateFine {
 
     if ( my $data = $sth->fetchrow_hashref ) {
 
-		# we're updating an existing fine.
+		# we're updating an existing fine.  Only modify if we're adding to the charge.
+        # Note that in the current implementation, you cannot pay against an accruing fine
+        # (i.e. , of accounttype 'FU').  Doing so will break accrual.
     	if ( $data->{'amount'} != $amount ) {
             my $diff = $amount - $data->{'amount'};
+            $diff = 0 if ( $data->{amount} > $amount);
             my $out  = $data->{'amountoutstanding'} + $diff;
             my $query = "
                 UPDATE accountlines
diff --git a/misc/cronjobs/fines-ll.pl b/misc/cronjobs/fines-ll.pl
deleted file mode 100755
index e2d28a6..0000000
--- a/misc/cronjobs/fines-ll.pl
+++ /dev/null
@@ -1,195 +0,0 @@
-#!/usr/bin/perl
-
-#  This script loops through each overdue item, determines the fine,
-#  and updates the total amount of fines due by each user.  It relies on
-#  the existence of /tmp/fines, which is created by ???
-# Doesnt really rely on it, it relys on being able to write to /tmp/
-# It creates the fines file
-#
-#  This script is meant to be run nightly out of cron.
-
-# Copyright 2000-2002 Katipo Communications
-#
-# This file is part of Koha.
-#
-# Koha is free software; you can redistribute it and/or modify it under the
-# terms of the GNU General Public License as published by the Free Software
-# Foundation; either version 2 of the License, or (at your option) any later
-# version.
-#
-# Koha is distributed in the hope that it will be useful, but WITHOUT ANY
-# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
-# A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License along with
-# Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place,
-# Suite 330, Boston, MA  02111-1307 USA
-
-
-use strict;
-BEGIN {
-    # find Koha's Perl modules
-    # test carefully before changing this
-    use FindBin;
-    eval { require "$FindBin::Bin/kohalib.pl" };
-}
-use C4::Context;
-use C4::Circulation;
-use C4::Overdues;
-use C4::Calendar;
-use Date::Manip qw/Date_DaysSince1BC/;
-use C4::Biblio;
-#use Data::Dumper;
-#
-my $fldir = "/tmp";
-
-my $libname=C4::Context->preference('LibraryName');
-my $dbname= C4::Context->config('database');
-
-my $SET_LOST = 0;  #  automatically charge item price at delay=3 if set.
-
-my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =localtime(time);
-$mon++;
-$year=$year+1900;
-my $date=Date_DaysSince1BC($mon,$mday,$year);
-my $datestr = $year . sprintf("-%02d-%02d",$mon,$mday);
-my $filename= $dbname;
-$filename =~ s/\W//;
-$filename = $fldir . '/'. $filename . $datestr . ".log";
-open (FILE,">$filename") || die "Can't open LOG";
-print FILE "cardnumber\tcategory\tsurname\tfirstname\temail\tphone\taddress\tcitystate\tbarcode\tdate_due\ttype\titemnumber\tdays_overdue\tfine\n";
-
-# FIXME
-# it looks like $count is just a counter, would it be
-# better to rely on the length of the array @$data and turn the
-# for loop below into a foreach loop?
-#
-my $DEBUG =1;
-my $data=Getoverdues();
-# warn "Overdues : = ".scalar(@$data)." => ".Data::Dumper::Dumper($data);
-my $overdueItemsCounted=0 if $DEBUG;
-my $reference = $year."".$mon;
-my $borrowernumber;
-
-for (my $i=0;$i<scalar(@$data);$i++){
-  my @dates=split('-',$data->[$i]->{'date_due'});
-  my $date2=Date_DaysSince1BC($dates[1],$dates[2],$dates[0]);
-  my $datedue=$data->[$i]->{'date_due'};
-  my $due="$dates[1]/$dates[2]/$dates[0]";
-  my $borrower=BorType($data->[$i]->{'borrowernumber'});
-  my $branchcode;
-  if ( C4::Context->preference('CircControl') eq 'ItemHomeLibrary' ) {
-  	$branchcode = $data->[$i]->{'homebranch'};
-  } elsif ( C4::Context->preference('CircControl') eq 'PatronLibrary' ) {
-  	$branchcode = $borrower->{'branchcode'};
-} else {
-  	# CircControl must be PickupLibrary. (branchcode comes from issues table here).
-	$branchcode =  $data->[$i]->{'branchcode'};
-  }
-  my $calendar = C4::Calendar->new( branchcode => $branchcode );
-
-  my @dmy =  split( '-', C4::Dates->new()->output('metric') ) ;
-  my $isHoliday = $calendar->isHoliday( split( '/', C4::Dates->new()->output('metric') ) );
-  my $starter;
-      
- if ($date2 <= $date){
-    $overdueItemsCounted++ if $DEBUG;
-    my $difference=$date-$date2;
-	my $start_date = C4::Dates->new($data->[$i]->{'date_due'},'iso');
-	my $end_date = C4::Dates->new($datestr,'iso');
-    my ($amount,$type,$printout,$daycounttotal,$daycount)=
-  		CalcFine($data->[$i], $borrower->{'categorycode'}, $branchcode,undef,undef, $start_date,$end_date);
-    my ($delays1,$delays2,$delays3)=GetOverdueDelays($borrower->{'categorycode'});
-
-	# Don't update the fine if today is a holiday.  
-  	# This ensures that dropbox mode will remove the correct amount of fine.
-	if( ! $isHoliday ) {
-		# FIXME - $type is always null, afaict.
-		UpdateFine($data->[$i]->{'itemnumber'},$data->[$i]->{'borrowernumber'},$amount,$type,$due) if( $amount > 0 ) ;
- 	}
-	if($delays1  and $delays2  and $delays3)  {
-    
-    	my $debarredstatus=CheckBorrowerDebarred($borrower->{'borrowernumber'});
-
-        #DELAYS 1##########################################
-        if ($amount > 0 && $daycount >= $delays1 && $daycount < $delays2){
-            # FIXME : already in GetIssuingRules ?
-            my $debarred1=GetOverduerules($borrower->{'categorycode'},1);
-            (UpdateBorrowerDebarred($borrower->{'borrowernumber'}))if(($debarred1 eq '1' ) and ($debarredstatus eq '0'));
-            # is there an open "dossier" for this date & borrower
-            my $getnotifyid=CheckExistantNotifyid($borrower->{'borrowernumber'},$datedue);
-            my $update=CheckAccountLineLevelInfo($borrower->{'borrowernumber'},$data->[$i]->{'itemnumber'},1,$datedue);
-            if ($update eq '0'){
-               	if ($getnotifyid eq '0'){
-                        $starter=GetNextIdNotify($reference,$borrower->{'borrowernumber'});
-               	} else {
-                  $starter=$getnotifyid;
-              	}
-            }
-            UpdateAccountLines($starter,1,$borrower->{'borrowernumber'},$data->[$i]->{'itemnumber'});
-        }
-    
-        #DELAYS 2#################################
-    
-        if ($daycount >= $delays2 && $daycount < $delays3){
-        	my $debarred2=GetOverduerules($borrower->{'categorycode'},2);
-        	(UpdateBorrowerDebarred($borrower->{'borrowernumber'}))if(($debarred2 eq '1' ) and ($debarredstatus eq '0'));
-       		my $update=CheckAccountLineLevelInfo($borrower->{'borrowernumber'},$data->[$i]->{'itemnumber'},2,$datedue);
-        	if ($update eq '0'){
-        		UpdateAccountLines(undef,2,$borrower->{'borrowernumber'},$data->[$i]->{'itemnumber'});
-        	}
-        }
-        ###############################################
-    
-        #DELAYS 3###################################
-        if ($daycount >= $delays3  ){
-            my $debarred3=GetOverduerules($borrower->{'categorycode'},3);
-            (UpdateBorrowerDebarred($borrower->{'borrowernumber'}))if(($debarred3 eq '1' ) and ($debarredstatus eq '0'));
-            my $update=CheckAccountLineLevelInfo($borrower->{'borrowernumber'},$data->[$i]->{'itemnumber'},3,$datedue);
-            if ($update eq '0'){
-                    UpdateAccountLines(undef,3,$borrower->{'borrowernumber'},$data->[$i]->{'itemnumber'});
-            }
-            my $items=GetItems($data->[$i]->{'itemnumber'});
-            my $todaydate=$year."-".$mon."-".$mday;
-            # add item price, the item is considered as lost.
-            my $description="Item Price";
-            my $typeaccount="IP";
-            my $level="3";
-            my $notifyid=GetNotifyId($borrower->{'borrowernumber'},$data->[$i]->{'itemnumber'});
-            my $timestamp=$todaydate." ".$hour."\:".$min."\:".$sec;
-            my $create=CheckAccountLineItemInfo($borrower->{'borrowernumber'},$data->[$i]->{'itemnumber'},$typeaccount,$notifyid);
-            if ($SET_LOST && ($create eq '0') ){
-          		CreateItemAccountLine($borrower->{'borrowernumber'},$data->[$i]->{'itemnumber'},$todaydate,$items->{'price'},$description,$typeaccount,
-            		$items->{'price'},$timestamp,$notifyid,$level);
-            }
-        }
-        ###############################################
-	}
-
-
-	if ($borrower->{'category_type'} eq 'C'){  
-        my $query=qq|    SELECT *
-                FROM borrowers
-                WHERE borrowernumber=?|;
-        my $dbh = C4::Context->dbh;
-        my $sth=$dbh->prepare($query);
-        $sth->execute($borrower->{'guarantorid'});
-        my $tdata=$sth->fetchrow_hashref;
-        $sth->finish;
-        $borrower->{'phone'}=$tdata->{'phone'};
-    }
- 	print FILE "$printout\t$borrower->{'cardnumber'}\t$borrower->{'categorycode'}\t$borrower->{'surname'}\t$borrower->{'firstname'}\t$borrower->{'email'}\t$borrower->{'phone'}\t$borrower->{'address'}\t$borrower->{'city'}\t$data->[$i]->{'barcode'}\t$data->[$i]->{'date_due'}\t$type\t$data->[$i]->{'itemnumber'}\t$daycounttotal\t$amount\n";
- }
-}
-
-my $numOverdueItems=scalar(@$data);
-if ($DEBUG) {
-   print <<EOM
-
-Number of Overdue Items counted $overdueItemsCounted
-Number of Overdue Items reported $numOverdueItems
-
-EOM
-}
-
-close FILE;
diff --git a/misc/cronjobs/fines-sanop.pl b/misc/cronjobs/fines-sanop.pl
deleted file mode 100755
index 02cca26..0000000
--- a/misc/cronjobs/fines-sanop.pl
+++ /dev/null
@@ -1,194 +0,0 @@
-#!/usr/bin/perl
-
-#  This script loops through each overdue item, determines the fine,
-#  and updates the total amount of fines due by each user.  It relies on
-#  the existence of /tmp/fines, which is created by ???
-# Doesnt really rely on it, it relys on being able to write to /tmp/
-# It creates the fines file
-#
-#  This script is meant to be run nightly out of cron.
-
-# Copyright 2000-2002 Katipo Communications
-#
-# This file is part of Koha.
-#
-# Koha is free software; you can redistribute it and/or modify it under the
-# terms of the GNU General Public License as published by the Free Software
-# Foundation; either version 2 of the License, or (at your option) any later
-# version.
-#
-# Koha is distributed in the hope that it will be useful, but WITHOUT ANY
-# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
-# A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License along with
-# Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place,
-# Suite 330, Boston, MA  02111-1307 USA
-
-
-use strict;
-BEGIN {
-    # find Koha's Perl modules
-    # test carefully before changing this
-    use FindBin;
-    eval { require "$FindBin::Bin/kohalib.pl" };
-}
-use C4::Context;
-use C4::Circulation;
-use C4::Overdues;
-use Date::Manip qw/Date_DaysSince1BC/;
-use C4::Biblio;
-
-open (FILE,'>/tmp/fines') || die;
-# FIXME
-# it looks like $count is just a counter, would it be
-# better to rely on the length of the array @$data and turn the
-# for loop below into a foreach loop?
-#
-my $DEBUG =1;
-my $data=Getoverdues();
-# warn "Overdues : = ".scalar(@$data)." => ".Data::Dumper::Dumper($data);
-my $overdueItemsCounted=0 if $DEBUG;
-# FIXME - There's got to be a better way to figure out what day
-# today is.
-my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =localtime(time);
-$mon++;
-$year=$year+1900;
-my $date=Date_DaysSince1BC($mon,$mday,$year);
-# print "DATE : ".$date if $DEBUG;
-if ($mon < '10'  ){
-$mon="0".$mon;
-}
-if ($mday < '10'  ){
-$mday="0".$mday;
-}
-my $reference = $year."".$mon;
-my $borrowernumber;
-
-for (my $i=0;$i<scalar(@$data);$i++){
-  my @dates=split('-',$data->[$i]->{'date_due'});
-  my $date2=Date_DaysSince1BC($dates[1],$dates[2],$dates[0]);
-  my $datedue=$data->[$i]->{'date_due'};
-  my $due="$dates[2]/$dates[1]/$dates[0]";
-  my $borrower=BorType($data->[$i]->{'borrowernumber'});
-  my $starter;
-      
- if ($date2 <= $date){
-    $overdueItemsCounted++ if $DEBUG;
-    my $difference=$date-$date2;
-    my ($amount,$type,$printout,$daycounttotal,$daycount)=
-    CalcFine($data->[$i]->{'itemnumber'},
-        $borrower->{'categorycode'},
-        $difference,
-        $datedue);
-    
-    my ($delays1,$delays2,$delays3)=GetOverdueDelays($borrower->{'categorycode'});
-    my $issuingrules=GetIssuingRules($data->[$i]->{'itemnumber'},$borrower->{'categorycode'});
-
-# warn "$delays1  and $delays2  and $delays3";
-if($delays1  and $delays2  and $delays3)  {
-    
-    my $debarredstatus=CheckBorrowerDebarred($borrower->{'borrowernumber'});
-     
-    if (($issuingrules->{'fine'} > 0) || ($issuingrules->{'fine'} ne '' )){
-
-        #DELAYS 1##########################################
-#         warn "$amount > 0 && $daycount >= $delays1 && $daycount < $delays2";
-        if ($amount > 0 && $daycount >= $delays1 && $daycount < $delays2){
-            # FIXME : already in GetIssuingRules ?
-            my $debarred1=GetOverduerules($borrower->{'categorycode'},1);
-            (UpdateBorrowerDebarred($borrower->{'borrowernumber'}))if(($debarred1 eq '1' ) and ($debarredstatus eq '0'));
-            # save fine
-            UpdateFine($data->[$i]->{'itemnumber'},$data->[$i]->{'borrowernumber'},$amount,$type,$due);
-            # is there an open "dossier" for this date & borrower
-            my $getnotifyid=CheckExistantNotifyid($borrower->{'borrowernumber'},$datedue);
-        
-            my $update=CheckAccountLineLevelInfo($borrower->{'borrowernumber'},$data->[$i]->{'itemnumber'},1,$datedue);
-                if ($update eq '0'){
-                    if ($getnotifyid eq '0'){
-                        $starter=GetNextIdNotify($reference,$borrower->{'borrowernumber'});
-
-                    }
-                    else{
-                        $starter=$getnotifyid;
-                    }
-        
-                }
-            UpdateAccountLines($starter,1,$borrower->{'borrowernumber'},$data->[$i]->{'itemnumber'});
-        }
-        ###############################################
-        #SANOP specific
-        if ($daycount>=$delays2) {
-    
-            $amount=$issuingrules->{'fine'} * ($delays2);
-            UpdateFine($data->[$i]->{'itemnumber'},$data->[$i]->{'borrowernumber'},$amount,$type,$due);
-    
-        }
-    
-        #DELAYS 2#################################
-    
-        if ($daycount >= $delays2 && $daycount < $delays3){
-        my $debarred2=GetOverduerules($borrower->{'categorycode'},2);
-        (UpdateBorrowerDebarred($borrower->{'borrowernumber'}))if(($debarred2 eq '1' ) and ($debarredstatus eq '0'));
-       my $update=CheckAccountLineLevelInfo($borrower->{'borrowernumber'},$data->[$i]->{'itemnumber'},2,$datedue);
-        if ($update eq '0'){
-        UpdateAccountLines(undef,2,$borrower->{'borrowernumber'},$data->[$i]->{'itemnumber'});
-        }
-        }
-        ###############################################
-    
-        #DELAYS 3###################################
-        if ($daycount >= $delays3  ){
-            my $debarred3=GetOverduerules($borrower->{'categorycode'},3);
-            (UpdateBorrowerDebarred($borrower->{'borrowernumber'}))if(($debarred3 eq '1' ) and ($debarredstatus eq '0'));
-            my $update=CheckAccountLineLevelInfo($borrower->{'borrowernumber'},$data->[$i]->{'itemnumber'},3,$datedue);
-            if ($update eq '0'){
-                    UpdateAccountLines(undef,3,$borrower->{'borrowernumber'},$data->[$i]->{'itemnumber'});
-            }
-            my $items=GetItems($data->[$i]->{'itemnumber'});
-            my $todaydate=$year."-".$mon."-".$mday;
-            # add item price, the item is considered as lost.
-            my $description="Item Price";
-            my $typeaccount="IP";
-            my $level="3";
-            my $notifyid=GetNotifyId($borrower->{'borrowernumber'},$data->[$i]->{'itemnumber'});
-            my $timestamp=$todaydate." ".$hour."\:".$min."\:".$sec;
-            my $create=CheckAccountLineItemInfo($borrower->{'borrowernumber'},$data->[$i]->{'itemnumber'},$typeaccount,$notifyid);
-            if ($create eq '0'){
-    
-            CreateItemAccountLine($borrower->{'borrowernumber'},$data->[$i]->{'itemnumber'},$todaydate,$items->{'price'},$description,$typeaccount,
-            $items->{'price'},$timestamp,$notifyid,$level);
-            }
-        }
-        ###############################################
-    }
-}
-
-
-
-if ($borrower->{'category_type'} eq 'C'){  
-        my $query=qq|    SELECT *
-                FROM borrowers
-                WHERE borrowernumber=?|;
-        my $dbh = C4::Context->dbh;
-        my $sth=$dbh->prepare($query);
-        $sth->execute($borrower->{'guarantorid'});
-        my $tdata=$sth->fetchrow_hashref;
-        $sth->finish;
-        $borrower->{'phone'}=$tdata->{'phone'};
-       }
- print "$printout\t$borrower->{'cardnumber'}\t$borrower->{'category_type'}\t$borrower->{'firstname'}\t$borrower->{'surname'}\t$data->[$i]->{'date_due'}\t$type\t$difference\t$borrower->{'email'}\t$borrower->{'phone'}\t$borrower->{'address'}\t$borrower->{'city'}\t$amount\n";
- }
-}
-
-my $numOverdueItems=scalar(@$data);
-if ($DEBUG) {
-   print <<EOM
-
-Number of Overdue Items counted $overdueItemsCounted
-Number of Overdue Items reported $numOverdueItems
-
-EOM
-}
-
-close FILE;
diff --git a/misc/cronjobs/fines.pl b/misc/cronjobs/fines.pl
new file mode 100755
index 0000000..afc4dca
--- /dev/null
+++ b/misc/cronjobs/fines.pl
@@ -0,0 +1,110 @@
+#!/usr/bin/perl
+
+#  This script loops through each overdue item, determines the fine,
+#  and updates the total amount of fines due by each user.  It relies on
+#  the existence of /tmp/fines, which is created by ???
+# Doesnt really rely on it, it relys on being able to write to /tmp/
+# It creates the fines file
+#
+#  This script is meant to be run nightly out of cron.
+
+# Copyright 2000-2002 Katipo Communications
+#
+# This file is part of Koha.
+#
+# Koha is free software; you can redistribute it and/or modify it under the
+# terms of the GNU General Public License as published by the Free Software
+# Foundation; either version 2 of the License, or (at your option) any later
+# version.
+#
+# Koha is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+# A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along with
+# Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place,
+# Suite 330, Boston, MA  02111-1307 USA
+
+
+use strict;
+BEGIN {
+    # find Koha's Perl modules
+    # test carefully before changing this
+    use FindBin;
+    eval { require "$FindBin::Bin/kohalib.pl" };
+}
+use C4::Context;
+use C4::Circulation;
+use C4::Overdues;
+use C4::Calendar;
+use Date::Calc qw/Date_to_Days/;
+use C4::Biblio;
+
+
+my $fldir = "/tmp" ;
+
+my $libname=C4::Context->preference('LibraryName');
+my $dbname= C4::Context->config('database');
+
+my $today = C4::Dates->new();
+my $datestr = $today->output('iso');
+my $today_days= Date_to_Days(split(/-/,$today->output('iso')));
+my $filename= $dbname;
+$filename =~ s/\W//;
+$filename = $fldir . '/'. $filename . $datestr . ".log";
+open (FILE,">$filename") || die "Can't open LOG";
+print FILE "cardnumber\tcategory\tsurname\tfirstname\temail\tphone\taddress\tcitystate\tbarcode\tdate_due\ttype\titemnumber\tdays_overdue\tfine\n";
+
+
+my $DEBUG =1;
+
+my $data=Getoverdues();
+my $overdueItemsCounted=0 ;
+my $borrowernumber;
+
+for (my $i=0;$i<scalar(@$data);$i++){
+  my $datedue=C4::Dates->new($data->[$i]->{'date_due'},'iso');
+  my $datedue_days = Date_to_Days(split(/-/,$datedue->output('iso')));
+  my $due_str=$datedue->output();
+  my $borrower=BorType($data->[$i]->{'borrowernumber'});
+  my $branchcode;
+  if ( C4::Context->preference('CircControl') eq 'ItemHomeLibrary' ) {
+  	$branchcode = $data->[$i]->{'homebranch'};
+  } elsif ( C4::Context->preference('CircControl') eq 'PatronLibrary' ) {
+  	$branchcode = $borrower->{'branchcode'};
+} else {
+  	# CircControl must be PickupLibrary. (branchcode comes from issues table here).
+	$branchcode =  $data->[$i]->{'branchcode'};
+  }
+  my $calendar = C4::Calendar->new( branchcode => $branchcode );
+
+  my $isHoliday = $calendar->isHoliday( split( '/', C4::Dates->new()->output('metric') ) );
+      
+ if ($datedue_days <= $today_days){
+    $overdueItemsCounted++ if $DEBUG;
+    my $difference=$today_days - $datedue_days;
+    my ($amount,$type,$printout,$daycounttotal,$daycount)=
+  		CalcFine($data->[$i], $borrower->{'categorycode'}, $branchcode,undef,undef, $datedue ,$today);
+    my ($delays1,$delays2,$delays3)=GetOverdueDelays($borrower->{'categorycode'});
+
+	# Don't update the fine if today is a holiday.  
+  	# This ensures that dropbox mode will remove the correct amount of fine.
+	if( (C4::Context->preference('finesMode') eq 'production') &&  ! $isHoliday ) {
+		# FIXME - $type is always null, afaict.
+		UpdateFine($data->[$i]->{'itemnumber'},$data->[$i]->{'borrowernumber'},$amount,$type,$due_str) if( $amount > 0 ) ;
+ 	}
+ 	print FILE "$printout\t$borrower->{'cardnumber'}\t$borrower->{'categorycode'}\t$borrower->{'surname'}\t$borrower->{'firstname'}\t$borrower->{'email'}\t$borrower->{'phone'}\t$borrower->{'address'}\t$borrower->{'city'}\t$data->[$i]->{'barcode'}\t$data->[$i]->{'date_due'}\t$type\t$data->[$i]->{'itemnumber'}\t$daycounttotal\t$amount\n";
+ }
+}
+
+my $numOverdueItems=scalar(@$data);
+if ($DEBUG) {
+   print <<EOM
+
+Number of Overdue Items counted $overdueItemsCounted
+Number of Overdue Items reported $numOverdueItems
+
+EOM
+}
+
+close FILE;
diff --git a/misc/cronjobs/fines2.pl b/misc/cronjobs/fines2.pl
deleted file mode 100755
index fe2cfa1..0000000
--- a/misc/cronjobs/fines2.pl
+++ /dev/null
@@ -1,159 +0,0 @@
-#!/usr/bin/perl
-
-#  This script loops through each overdue item, determines the fine,
-#  and updates the total amount of fines due by each user.  It relies on
-#  the existence of /tmp/fines, which is created by ???
-# Doesnt really rely on it, it relys on being able to write to /tmp/
-# It creates the fines file
-#
-#  This script is meant to be run nightly out of cron.
-
-# Copyright 2000-2002 Katipo Communications
-#
-# This file is part of Koha.
-#
-# Koha is free software; you can redistribute it and/or modify it under the
-# terms of the GNU General Public License as published by the Free Software
-# Foundation; either version 2 of the License, or (at your option) any later
-# version.
-#
-# Koha is distributed in the hope that it will be useful, but WITHOUT ANY
-# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
-# A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License along with
-# Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place,
-# Suite 330, Boston, MA  02111-1307 USA
-
-
-use strict;
-BEGIN {
-    # find Koha's Perl modules
-    # test carefully before changing this
-    use FindBin;
-    eval { require "$FindBin::Bin/kohalib.pl" };
-}
-
-use Date::Manip;	# qw( Date_DaysSince1BC ) ;
-use Data::Dumper;
-use Getopt::Long;
-
-use C4::Context;
-use C4::Circulation;
-use C4::Overdues;	# qw( Getoverdues CalcFine );
-use C4::Biblio;
-use C4::Items;
-use C4::Dates;
-use C4::Debug;
-
-our $verbose;
-GetOptions('verbose+', \$verbose);
-$debug and $verbose++;
-
-# my $filename = "/tmp/fines";
-# open (FILE, ">$filename") or die "Cannot write to $filename";
-
-my ($data)=Getoverdues();
-my $overdueItemsCounted=0;
-
-# FIXME - There's got to be a better way to figure out what day today is.
-my ($mday,$mon,$year) = (localtime)[3..5]; # ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)
-my $date = Date_DaysSince1BC($mon+1,$mday,$year+1900);
-my $today_obj = C4::Dates->new();
-my $today_iso = $today_obj->output('iso');
-
-if ($verbose) {
-	printf "Number of overdues: %7d\nDate_DaysSince1BC : %7d\n", scalar(@$data), $date;
-	print "today: $today_iso\n";
-}
-
-# get the maxfine parameter
-my $maxFine=C4::Context->preference("MaxFine") || 999999999;
-
-our $phone_sth = C4::Context->dbh->prepare("Select * from borrowers where borrowernumber=?");
-sub get_guarantor_phone ($) {
-	$phone_sth->execute(shift);
-	my $x = $phone_sth->fetchrow_hashref;
-	return $x->{'phone'};
-}
-
-our $fine_sth = C4::Context->dbh->prepare("
-	INSERT INTO accountlines
-	(borrowernumber, itemnumber, accountno, date,
-	amount, description, accounttype, amountoutstanding)
-	VALUES (?,?,?,now(),?,?,'L',?)
-	");
-sub insert_fine ($$$$$$) {
-	$verbose and print "inserting fine: " . join(", ", at _), "\n";
-	return $fine_sth->execute(@_);
-}
-
-my $circcontrol = C4::Context->preference('CircControl');
-foreach (@$data){
-	my $date_due = $_->{date_due};
-	$verbose and print "date_due: $date_due ", ($date_due le $today_iso ? 'fine!' : 'ok'), "\n";
-    my @dates=split('-',$date_due);
-    my $date2=Date_DaysSince1BC($dates[1],$dates[2],$dates[0]);
-    my $due="$dates[2]/$dates[1]/$dates[0]";
-	my $borrowernumber = $_->{borrowernumber};
-	my $itemnumber     = $_->{itemnumber};
-    my $borrower = BorType($borrowernumber);
-    ($date_due le $today_iso) or next;		# it is valid to string compare ISO dates.
-	$overdueItemsCounted++ if $verbose;
-	my $branchcode = ($circcontrol eq 'PatronLibrary'  ) ? $borrower->{branchcode} : 
-					 ($circcontrol eq 'ItemHomeLibrary') ?        $_->{homebranch} :
-					 									          $_->{branchcode} ; # Last option: Pickup Library.
-	my $difference=$date-$date2;
-	my (@calc_returns) = CalcFine(
-		$_, $borrower->{categorycode}, $branchcode,undef,undef, C4::Dates->new($date_due,'iso'), $today_obj 
-	);
-	if ($verbose) {
-		my $dump = Dumper($_);
-		$dump =~ s/;/,/;
-		$verbose and print "CalcFine($dump" .
-			"\t$borrower->{categorycode}, $branchcode,undef,undef,[$date_due],[today]) returns:\n" . Dumper(\@calc_returns), "\n";
-	}
-	my ($amount,$type,$printout) = @calc_returns[0..2];
-	# ($amount,$chargename,$daycount,$daycounttotal)=&CalcFine($itemnumber,$categorycode,$branch,$days_overdue,$description, $start_date, $end_date );
-
-	($amount > $maxFine) and $amount = $maxFine;
-	if ($amount > 0) {
-		UpdateFine($itemnumber,$borrowernumber,$amount,$type,$due);
-		if ($borrower->{'guarantorid'}) {
-			$borrower->{'phone'} = get_guarantor_phone($borrower->{'guarantorid'}) || $borrower->{'phone'};
-		}
-		print "$printout\t$borrower->{'cardnumber'}\t$borrower->{'categorycode'}\t$borrower->{'firstname'}\t$borrower->{'surname'}\t",
-		"$_->{'date_due'}\t$type\t$difference\t",
-		"$borrower->{'emailaddress'}\t$borrower->{'phone'}\t$borrower->{'streetaddress'}\t$borrower->{'city'}\t$amount\n" if $verbose;
-	}
-	if ($difference >= C4::Context->preference("NoReturnSetLost")){
-		my $borrower=BorType($borrowernumber);
-		if ($borrower->{'cardnumber'} ne ''){
-			my $cost = ReplacementCost($itemnumber);
-			my $item = GetBiblioFromItemNumber($itemnumber);
-			if ($item->{'itemlost'} ne '1' && $item->{'itemlost'} ne '2' ){
-				insert_fine(
-					$borrowernumber,
-					$itemnumber,
-					C4::Accounts::getnextacctno($borrowernumber),
-					$cost,
-					"Lost item $item->{'title'} $item->{'barcode'} $due",
-					$cost
-				);
-				ModItem({ itemlost => 2 }, undef, $itemnumber);
-			}
-		}
-	}
-}
-
-if ($verbose) {
-    my $numOverdueItems=scalar(@$data);
-    print <<EOM
-
-Number of Overdue Items counted  $overdueItemsCounted
-Number of Overdue Items reported $numOverdueItems
-
-EOM
-}
-
-# close FILE;
-- 
1.5.5.GIT




More information about the Koha-patches mailing list