Bug 11872 - Lost overdue items should not generate fines
authorKyle M Hall <kyle@bywatersolutions.com>
Tue, 29 Jul 2014 16:39:15 +0000 (12:39 -0400)
committerFridolin Somers <fridolin.somers@biblibre.com>
Mon, 23 Mar 2015 15:26:48 +0000 (16:26 +0100)
An item can be marked as lost by longoverdue.pl, but left checked out to
the patron. In this case, the item will continue to accrue fines.

Test Plan:
1) Check out an item and back date it so it is overdue and should
   generate fines.
2) Mark the item as lost by either using longoverdue.pl, or just
   by setting itemlost to 1 by directly accessing the database
3) Run fines.pl
4) Note the overdue generated a fine
5) Repeat steps 1-2
6) Apply this patch
7) Run fines.pl
8) Note a fine was not generated

Signed-off-by: Jonathan Druart <jonathan.druart@biblibre.com>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
Signed-off-by: Mason James <mtj@kohaaloha.com>
(cherry picked from commit e920b9a6813d677d86e327ea11c7ed571570f3b2)

Signed-off-by: Fridolin Somers <fridolin.somers@biblibre.com>

C4/Overdues.pm
misc/cronjobs/fines.pl
misc/cronjobs/staticfines.pl

index 800eaf5..38bc170 100644 (file)
@@ -106,14 +106,14 @@ sub Getoverdues {
     my $statement;
     if ( C4::Context->preference('item-level_itypes') ) {
         $statement = "
-   SELECT issues.*, items.itype as itemtype, items.homebranch, items.barcode
+   SELECT issues.*, items.itype as itemtype, items.homebranch, items.barcode, items.itemlost
      FROM issues 
 LEFT JOIN items       USING (itemnumber)
     WHERE date_due < NOW()
 ";
     } else {
         $statement = "
-   SELECT issues.*, biblioitems.itemtype, items.itype, items.homebranch, items.barcode
+   SELECT issues.*, biblioitems.itemtype, items.itype, items.homebranch, items.barcode, items.itemlost
      FROM issues 
 LEFT JOIN items       USING (itemnumber)
 LEFT JOIN biblioitems USING (biblioitemnumber)
index 02bde14..38c344a 100755 (executable)
@@ -95,6 +95,8 @@ if ($filename) {
 my $counted = 0;
 my $overdues = Getoverdues();
 for my $overdue ( @{$overdues} ) {
+    next if $overdue->{itemlost};
+
     if ( !defined $overdue->{borrowernumber} ) {
         carp
 "ERROR in Getoverdues : issues.borrowernumber IS NULL.  Repair 'issues' table now!  Skipping record.\n";
index 0d819a5..9f12988 100755 (executable)
@@ -138,6 +138,7 @@ my ($tyear, $tmonth, $tday) = split( /-/, $today_iso );
 $today_days = Date_to_Days( $tyear, $tmonth, $tday );
 
 for ( my $i = 0 ; $i < scalar(@$data) ; $i++ ) {
+    next if $data->[$i]->{'itemlost'};
     my $datedue;
     my $datedue_days;
     eval {