LP#1635737 Use new OpenSRF interval_to_seconds() context
authorDan Wells <dbw2@calvin.edu>
Fri, 21 Jul 2017 18:28:16 +0000 (14:28 -0400)
committerMike Rylander <mrylander@gmail.com>
Mon, 31 Jul 2017 16:06:42 +0000 (12:06 -0400)
Use the optional context for interval_to_seconds() to account for the
variable length of duration components.  For example, "1 day" may be
shorter or longer than 24 hours during a time change event, "1 month"
may be shorter or longer depending on which month it is currently, etc.

Also, remove some timestamp munging, as that happens within
interval_to_seconds() already.

Signed-off-by: Dan Wells <dbw2@calvin.edu>
Signed-off-by: Mike Rylander <mrylander@gmail.com>
Open-ILS/src/perlmods/lib/OpenILS/Application/Circ/Circulate.pm
Open-ILS/src/perlmods/lib/OpenILS/Application/Circ/NonCat.pm

index 21b875d..65b6f04 100644 (file)
@@ -2077,16 +2077,12 @@ sub apply_modified_due_date {
 sub create_due_date {
     my( $self, $duration, $date_ceiling, $force_date, $start_time ) = @_;
 
-    # if there is a raw time component (e.g. from postgres), 
-    # turn it into an interval that interval_to_seconds can parse
-    $duration =~ s/(\d{2}):(\d{2}):(\d{2})/$1 h $2 m $3 s/o;
-
     # for now, use the server timezone.  TODO: use workstation org timezone
     my $due_date = DateTime->now(time_zone => 'local');
     $due_date = DateTime::Format::ISO8601->new->parse_datetime(cleanse_ISO8601($start_time)) if $start_time;
 
     # add the circ duration
-    $due_date->add(seconds => OpenSRF::Utils->interval_to_seconds($duration));
+    $due_date->add(seconds => OpenSRF::Utils->interval_to_seconds($duration, $due_date));
 
     if($date_ceiling) {
         my $cdate = DateTime::Format::ISO8601->new->parse_datetime(cleanse_ISO8601($date_ceiling));
index 26b85d2..3302b87 100644 (file)
@@ -188,7 +188,7 @@ sub noncat_due_date {
 
     my $duedate = $_dt_parser->parse_datetime( cleanse_ISO8601($circ->circ_time) );
     $duedate = $duedate
-        ->add( seconds => interval_to_seconds($otype->circ_duration) )
+        ->add( seconds => interval_to_seconds($otype->circ_duration, $duedate) )
         ->strftime('%FT%T%z');
 
     my $offset = $U->storagereq(