bug 7849 Instant Fine Calculation\n Adds functionality of calculate fines instantly...
authorElliott Davis <tdavis@uttyler.edu>
Tue, 17 Apr 2012 10:38:14 +0000 (10:38 +0000)
committerPaul Poulain <paul.poulain@biblibre.com>
Thu, 19 Apr 2012 15:52:18 +0000 (17:52 +0200)
Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
Signed-off-by: Paul Poulain <paul.poulain@biblibre.com>
C4/Circulation.pm
C4/Overdues.pm

index 6ca860d..b7e08f2 100644 (file)
@@ -37,6 +37,7 @@ use C4::Debug;
 use C4::Branch; # GetBranches
 use C4::Log; # logaction
 use C4::Koha qw(GetAuthorisedValueByCode);
+use C4::Overdues qw(CalcFine UpdateFine);
 use Data::Dumper;
 use Koha::DateUtils;
 use Koha::Calendar;
@@ -1598,6 +1599,8 @@ sub AddReturn {
 
     # case of a return of document (deal with issues and holdingbranch)
     if ($doreturn) {
+    my $today = DateTime->now( time_zone => C4::Context->tz() );
+    my $datedue = $issue->{date_due};
         $borrower or warn "AddReturn without current borrower";
                my $circControlBranch;
         if ($dropbox) {
@@ -1606,9 +1609,22 @@ sub AddReturn {
             # FIXME: check issuedate > returndate, factoring in holidays
             #$circControlBranch = _GetCircControlBranch($item,$borrower) unless ( $item->{'issuedate'} eq C4::Dates->today('iso') );;
             $circControlBranch = _GetCircControlBranch($item,$borrower);
+        my $datedue = $issue->{date_due};
+        $issue->{'overdue'} = DateTime->compare($issue->{'date_due'}, $today ) == -1 ? 1 : 0;
         }
 
         if ($borrowernumber) {
+        if($issue->{'overdue'}){
+                my ( $amount, $type, $daycounttotal ) = C4::Overdues::CalcFine( $item, $borrower->{categorycode},$branch, $datedue, $today );
+                my $type ||= q{};
+        if ( $amount > 0 && ( C4::Context->preference('finesMode') eq 'production' )) {
+          C4::Overdues::UpdateFine(
+              $issue->{itemnumber},
+              $issue->{borrowernumber},
+                      $amount, $type, output_pref($datedue)
+              );
+        }
+            }
             MarkIssueReturned($borrowernumber, $item->{'itemnumber'}, $circControlBranch, '', $borrower->{'privacy'});
             $messages->{'WasReturned'} = 1;    # FIXME is the "= 1" right?  This could be the borrower hash.
         }
index 23e75f5..c7430c9 100644 (file)
@@ -255,7 +255,8 @@ sub CalcFine {
     my ( $item, $bortype, $branchcode, $due_dt, $end_date  ) = @_;
     my $start_date = $due_dt->clone();
     # get issuingrules (fines part will be used)
-    my $data = C4::Circulation::GetIssuingRule($bortype, $item->{itemtype}, $branchcode);
+    my $itemtype = $item->{itemtype} || $item->{itype};
+    my $data = C4::Circulation::GetIssuingRule($bortype, $itemtype, $branchcode);
     my $fine_unit = $data->{lengthunit};
     $fine_unit ||= 'days';
 
@@ -300,6 +301,9 @@ sub _get_chargeable_units {
         } else {
             $charge_duration = $dt2->delta_ms( $dt1 );
         }
+        if($charge_duration->in_units('hours') == 0 && $charge_duration->in_units('seconds') > 0){
+            return 1;
+        }
         return $charge_duration->in_units('hours');
     }
     else { # days