LP#1801191: Refactor for clarity; bugfix
[Evergreen.git] / Open-ILS / src / perlmods / lib / OpenILS / Utils / HoldTargeter.pm
index 957fb25..44685cf 100644 (file)
@@ -1181,34 +1181,31 @@ sub process_recalls {
 
     $self->log_hold("recalling circ ".$circ->id);
 
-    my $old_due_date = DateTime::Format::ISO8601->parse_datetime(cleanse_ISO8601($circ->due_date))->iso8601();
+    my $old_due_date = DateTime::Format::ISO8601->parse_datetime(clean_ISO8601($circ->due_date));
 
     # Give the user a new due date of either a full recall threshold,
     # or the return interval, whichever is further in the future.
     my $threshold_date = DateTime::Format::ISO8601
         ->parse_datetime(clean_ISO8601($circ->xact_start))
-        ->add(seconds => interval_to_seconds($threshold))
-        ->iso8601();
+        ->add(seconds => interval_to_seconds($threshold));
 
     my $return_date = DateTime->now(time_zone => 'local')->add(
-        seconds => interval_to_seconds($interval))->iso8601();
+        seconds => interval_to_seconds($interval));
 
-    if (DateTime->compare(
-        DateTime::Format::ISO8601->parse_datetime($threshold_date),
-        DateTime::Format::ISO8601->parse_datetime($return_date)) == 1) {
+    if (DateTime->compare($threshold_date, $return_date) == 1) {
+        # extend $return_date to threshold
         $return_date = $threshold_date;
     }
-
-    # But if the new due date is later than the old one,
-    # keep the old one.
-    if (DateTime->compare(
-        DateTime::Format::ISO8601->parse_datetime($return_date),
-        DateTime::Format::ISO8601->parse_datetime($old_due_date)) == 1) { 
+    # But don't go past the original due date
+    # (the threshold should not be past the due date, but manual edits can
+    # cause it to be)
+    if (DateTime->compare($return_date, $old_due_date) == 1) {
+        # truncate $return_date to due date
         $return_date = $old_due_date;
     }
 
     my %update_fields = (
-        due_date => $return_date,
+        due_date => $return_date->iso8601(),
         renewal_remaining => 0,
     );