+my $count;
+# my @ranges = map {
+my @report;
+my $total = 0;
+my $i = 0;
+
+# FIXME - The item is only marked returned if you supply --charge .
+# We need a better way to handle this.
+#
+my $sth_items = longoverdue_sth();
+
+foreach my $startrange (sort keys %$lost) {
+ if( my $lostvalue = $lost->{$startrange} ) {
+ my ($date1) = bounds($startrange);
+ my ($date2) = bounds( $endrange);
+ # print "\nRange ", ++$i, "\nDue $startrange - $endrange days ago ($date2 to $date1), lost => $lostvalue\n" if($verbose);
+ $verbose and
+ printf "\nRange %s\nDue %3s - %3s days ago (%s to %s), lost => %s\n", ++$i,
+ $startrange, $endrange, $date2, $date1, $lostvalue;
+ $sth_items->execute($startrange, $endrange, $lostvalue);
+ $count=0;
+ while (my $row=$sth_items->fetchrow_hashref) {
+ printf ("Due %s: item %5s from borrower %5s to lost: %s\n", $row->{date_due}, $row->{itemnumber}, $row->{borrowernumber}, $lostvalue) if($verbose);
+ if($confirm) {
+ ModItem({ itemlost => $lostvalue }, $row->{'biblionumber'}, $row->{'itemnumber'});
+ LostItem($row->{'itemnumber'}, $mark_returned, 'CHARGE FEE') if( $charge && $charge eq $lostvalue);
+ }
+ $count++;
+ }
+ push @report, {
+ startrange => $startrange,
+ endrange => $endrange,
+ range => "$startrange - $endrange",
+ date1 => $date1,
+ date2 => $date2,
+ lostvalue => $lostvalue,
+ count => $count,
+ };
+ $total += $count;
+ }
+ $endrange = $startrange;
+}
+
+sub summarize ($$) {
+ my $arg = shift; # ref to array
+ my $got_items = shift || 0; # print "count" line for items
+ my @report = @$arg or return undef;
+ my $i = 0;
+ for my $range (@report) {
+ printf "\nRange %s\nDue %3s - %3s days ago (%s to %s), lost => %s\n", ++$i,
+ map {$range->{$_}} qw(startrange endrange date2 date1 lostvalue);
+ $got_items and printf " %4s items\n", $range->{count};
+ }
+}
+
+if (!$quiet){
+ print "\n### LONGOVERDUE SUMMARY ###";
+ summarize (\@report, 1);
+ print "\nTOTAL: $total items\n";
+}