Bug 24840: Replace DateTime->now with dt_from_string
authorNick Clemens <nick@bywatersolutions.com>
Thu, 26 Mar 2020 11:05:32 +0000 (11:05 +0000)
committerMartin Renvoize <martin.renvoize@ptfs-europe.com>
Wed, 8 Apr 2020 10:54:23 +0000 (11:54 +0100)
We should use Koha::DateUtils instead of Date::Time directly

This patch simplay replaces calls to now() with a call to dt_from_string()
which does effectively the same thing.

Probably reading the code and verifying changes is sufficient but...

To test:
1 - confirm the files all compile
2 - confirm all tests pass
3 - confirm Koha still works

Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>

25 files changed:
C4/Circulation.pm
C4/Letters.pm
C4/MarcModificationTemplates.pm
Koha/Calendar.pm
Koha/Checkout.pm
Koha/Checkouts.pm
Koha/EDI.pm
Koha/Edifact/Order.pm
Koha/Edifact/Transport.pm
Koha/Patron/Password/Recovery.pm
Koha/Sitemapper/Writer.pm
circ/overdue.pl
circ/returns.pl
installer/data/mysql/fix_unclosed_nonaccruing_fines_bug17135.pl
installer/data/mysql/updatedatabase.pl
members/summary-print.pl
misc/cronjobs/fines.pl
misc/cronjobs/overdue_notices.pl
opac/opac-ics.pl
t/Circulation/AgeRestrictionMarkers.t
t/db_dependent/DecreaseLoanHighHolds.t
t/db_dependent/Letters/TemplateToolkit.t
t/db_dependent/OAI/Server.t
t/db_dependent/Passwordrecovery.t
t/db_dependent/Sitemapper.t

index 3374ebe..747d660 100644 (file)
@@ -705,7 +705,7 @@ sub CanBookBeIssued {
     if ($duedate && ref $duedate ne 'DateTime') {
         $duedate = dt_from_string($duedate);
     }
-    my $now = DateTime->now( time_zone => C4::Context->tz() );
+    my $now = dt_from_string();
     unless ( $duedate ) {
         my $issuedate = $now->clone();
 
@@ -1236,7 +1236,7 @@ sub checkHighHolds {
             }
         }
 
-        my $issuedate = DateTime->now( time_zone => C4::Context->tz() );
+        my $issuedate = dt_from_string();
 
         my $calendar = Koha::Calendar->new( branchcode => $branchcode );
 
@@ -1315,7 +1315,7 @@ sub AddIssue {
 
     # $issuedate defaults to today.
     if ( !defined $issuedate ) {
-        $issuedate = DateTime->now( time_zone => C4::Context->tz() );
+        $issuedate = dt_from_string();
     }
     else {
         if ( ref $issuedate ne 'DateTime' ) {
@@ -1466,7 +1466,7 @@ sub AddIssue {
             $item_object->holdingbranch(C4::Context->userenv->{'branch'});
             $item_object->itemlost(0);
             $item_object->onloan($datedue->ymd());
-            $item_object->datelastborrowed(DateTime->now( time_zone => C4::Context->tz() )->ymd()); # FIXME we should use dt_from_string here
+            $item_object->datelastborrowed( dt_from_string()->ymd() );
             $item_object->store({log_action => 0});
             ModDateLastSeen( $item_object->itemnumber );
 
@@ -2805,7 +2805,7 @@ sub CanBookBeRenewed {
                 $soonestrenewal->truncate( to => 'day' );
             }
 
-            if ( $soonestrenewal > DateTime->now( time_zone => C4::Context->tz() ) )
+            if ( $soonestrenewal > dt_from_string() )
             {
                 return ( 0, "auto_too_soon" ) if $issue->auto_renew && $patron->autorenew_checkouts;
                 return ( 0, "too_soon" );
@@ -2932,7 +2932,7 @@ sub AddRenewal {
     my $itemnumber      = shift or return;
     my $branch          = shift;
     my $datedue         = shift;
-    my $lastreneweddate = shift || DateTime->now(time_zone => C4::Context->tz);
+    my $lastreneweddate = shift || dt_from_string();
     my $skipfinecalc    = shift;
 
     my $item_object   = Koha::Items->find($itemnumber) or return;
@@ -2972,7 +2972,7 @@ sub AddRenewal {
 
             $datedue = (C4::Context->preference('RenewalPeriodBase') eq 'date_due') ?
                                             dt_from_string( $issue->date_due, 'sql' ) :
-                                            DateTime->now( time_zone => C4::Context->tz());
+                                            dt_from_string();
             $datedue =  CalcDateDue($datedue, $itemtype, $circ_library->branchcode, $patron_unblessed, 'is a renewal');
         }
 
@@ -3595,9 +3595,7 @@ sub CalcDateDue {
             $datedue = $startdate->clone;
         }
     } else {
-        $datedue =
-          DateTime->now( time_zone => C4::Context->tz() )
-          ->truncate( to => 'minute' );
+        $datedue = dt_from_string()->truncate( to => 'minute' );
     }
 
 
@@ -4081,7 +4079,7 @@ sub GetAgeRestriction {
             }
 
             #Get how many days the borrower has to reach the age restriction
-            my @Today = split /-/, DateTime->today->ymd();
+            my @Today = split /-/, dt_from_string()->ymd();
             my $daysToAgeRestriction = Date_to_Days(@alloweddate) - Date_to_Days(@Today);
             #Negative days means the borrower went past the age restriction age
             return ($restriction_year, $daysToAgeRestriction);
index bd212d6..1036c46 100644 (file)
@@ -796,7 +796,7 @@ sub _parseletter {
     }
 
     if ($letter->{content} && $letter->{content} =~ /<<today>>/) {
-        my $todaysdate = output_pref( DateTime->now() );
+        my $todaysdate = output_pref( dt_from_string() );
         $letter->{content} =~ s/<<today>>/$todaysdate/go;
     }
 
index f4a38a7..50d26a0 100644 (file)
@@ -24,6 +24,7 @@ use DateTime;
 use C4::Context;
 use Koha::SimpleMARC;
 use Koha::MoreUtils;
+use Koha::DateUtils;
 
 use vars qw(@ISA @EXPORT);
 
@@ -501,7 +502,7 @@ sub ModifyRecordWithTemplate {
     warn( "C4::MarcModificationTemplates::ModifyRecordWithTemplate( $template_id, $record )" ) if DEBUG;
     warn( "Unmodified Record:\n" . $record->as_formatted() ) if DEBUG >= 10;
 
-    my $current_date = DateTime->now()->ymd();
+    my $current_date = dt_from_string()->ymd();
     my $branchcode = '';
     $branchcode = C4::Context->userenv->{branch} if C4::Context->userenv;
 
index dfc358d..ef397cd 100644 (file)
@@ -410,7 +410,7 @@ Koha::Calendar - Object containing a branches calendar
   use Koha::Calendar
 
   my $c = Koha::Calendar->new( branchcode => 'MAIN' );
-  my $dt = DateTime->now();
+  my $dt = dt_from_string();
 
   # are we open
   $open = $c->is_holiday($dt);
index e256b6c..9180bf4 100644 (file)
@@ -54,7 +54,8 @@ will be the reference date.
 
 sub is_overdue {
     my ( $self, $dt ) = @_;
-    $dt ||= DateTime->now( time_zone => C4::Context->tz );
+    $dt ||= dt_from_string();
+
     my $is_overdue =
       DateTime->compare( dt_from_string( $self->date_due, 'sql' ), $dt ) == -1
       ? 1
index ccfeb36..84d4253 100644 (file)
@@ -24,6 +24,7 @@ use Carp;
 use C4::Context;
 use Koha::Checkout;
 use Koha::Database;
+use Koha::DateUtils;
 
 use base qw(Koha::Objects);
 
@@ -48,7 +49,7 @@ sub calculate_dropbox_date {
     my $branchcode = $userenv->{branch} // q{};
 
     my $calendar = Koha::Calendar->new( branchcode => $branchcode );
-    my $today        = DateTime->now( time_zone => C4::Context->tz() );
+    my $today        = dt_from_string();
     my $dropbox_date = $calendar->addDate( $today, -1 );
 
     return $dropbox_date;
index 5bf0197..a692da1 100644 (file)
@@ -27,6 +27,7 @@ use Business::ISBN;
 use DateTime;
 use C4::Context;
 use Koha::Database;
+use Koha::DateUtils;
 use C4::Acquisition qw( NewBasket CloseBasket ModOrder);
 use C4::Suggestions qw( ModSuggestion );
 use C4::Biblio qw( AddBiblio TransformKohaToMarc GetMarcBiblio GetFrameworkCode GetMarcFromKohaField );
@@ -174,7 +175,7 @@ sub process_ordrsp {
                             ordernumber             => $ordernumber,
                             cancellationreason      => $reason,
                             orderstatus             => 'cancelled',
-                            datecancellationprinted => DateTime->now()->ymd(),
+                            datecancellationprinted => dt_from_string()->ymd(),
                         }
                     );
                 }
@@ -624,7 +625,7 @@ sub quote_item {
     # database definitions should set some of these defaults but dont
     my $order_hash = {
         biblionumber       => $bib->{biblionumber},
-        entrydate          => DateTime->now( time_zone => 'local' )->ymd(),
+        entrydate          => dt_from_string()->ymd(),
         basketno           => $basketno,
         listprice          => $item->price,
         quantity           => $order_quantity,
index 5dbe1e0..b543487 100644 (file)
@@ -26,6 +26,7 @@ use DateTime;
 use Readonly;
 use Business::ISBN;
 use Koha::Database;
+use Koha::DateUtils;
 use C4::Budgets qw( GetBudget );
 
 use Koha::Acquisition::Orders;
@@ -51,7 +52,7 @@ sub new {
 
         # convenient alias
         $self->{basket} = $self->{orderlines}->[0]->basketno;
-        $self->{message_date} = DateTime->now( time_zone => 'local' );
+        $self->{message_date} = dt_from_string();
     }
 
     # validate that its worth proceeding
index a64d583..e52b6ef 100644 (file)
@@ -29,6 +29,7 @@ use File::Slurp;
 use File::Copy;
 use File::Basename qw( fileparse );
 use Koha::Database;
+use Koha::DateUtils;
 use Encode qw( from_to );
 
 sub new {
@@ -40,7 +41,7 @@ sub new {
         account     => $acct,
         schema      => $schema,
         working_dir => C4::Context::temporary_directory,    #temporary work directory
-        transfer_date => DateTime->now( time_zone => 'local' ),
+        transfer_date => dt_from_string(),
     };
 
     bless $self, $class;
index 0d09923..6640354 100644 (file)
@@ -21,6 +21,7 @@ use Modern::Perl;
 use C4::Context;
 use C4::Letters;
 use Crypt::Eksblowfish::Bcrypt qw(en_base64);
+use Koha::DateUtils;
 
 use vars qw(@ISA @EXPORT);
 
@@ -115,7 +116,7 @@ sub SendPasswordRecoveryEmail {
 
     # insert into database
     my $expirydate =
-      DateTime->now( time_zone => C4::Context->tz() )->add( days => 2 );
+      dt_from_string()->add( days => 2 );
     if ($update) {
         my $rs =
           $schema->resultset('BorrowerPasswordRecovery')
index 99f2a59..63f147a 100644 (file)
@@ -23,7 +23,7 @@ use Moo;
 use Modern::Perl;
 use XML::Writer;
 use IO::File;
-use DateTime;
+use Koha::DateUtils;
 
 
 my $MAX = 50000;
@@ -106,7 +106,7 @@ sub end {
 
     my $w = $self->_writer_create("sitemapindex.xml");
     $w->startTag('sitemapindex', 'xmlns' => 'http://www.sitemaps.org/schemas/sitemap/0.9');
-    my $now = DateTime->now()->ymd;
+    my $now = dt_from_string()->ymd;
     for my $i ( 1..$self->count ) {
         $w->startTag('sitemap');
             $w->startTag('loc');
index a61a795..ac5fc1e 100755 (executable)
@@ -214,7 +214,7 @@ if ($noreport) {
     #  FIX 2: ensure there are indexes for columns participating in the WHERE clauses, where feasible/reasonable
 
 
-    my $today_dt = DateTime->now(time_zone => C4::Context->tz);
+    my $today_dt = dt_from_string();
     $today_dt->truncate(to => 'minute');
     my $todaysdate = $today_dt->strftime('%Y-%m-%d %H:%M');
 
index 456d0d1..f0e4abe 100755 (executable)
@@ -302,7 +302,7 @@ if ($barcode) {
       AddReturn( $barcode, $userenv_branch, $exemptfine, $return_date );
 
     if ($returned) {
-        my $time_now = DateTime->now( time_zone => C4::Context->tz )->truncate( to => 'minute');
+        my $time_now = dt_from_string()->truncate( to => 'minute');
         my $date_due_dt = dt_from_string( $issue->date_due, 'sql' );
         my $duedate = $date_due_dt->strftime('%Y-%m-%d %H:%M');
         $returneditems{0}      = $barcode;
@@ -311,7 +311,7 @@ if ($barcode) {
         $input{borrowernumber} = $borrower->{'borrowernumber'};
         $input{duedate}        = $duedate;
         unless ( $dropboxmode ) {
-            $input{return_overdue} = 1 if (DateTime->compare($date_due_dt, DateTime->now()) == -1);
+            $input{return_overdue} = 1 if (DateTime->compare($date_due_dt, dt_from_string()) == -1);
         } else {
             $input{return_overdue} = 1 if (DateTime->compare($date_due_dt, $dropboxdate) == -1);
         }
@@ -569,7 +569,7 @@ foreach ( sort { $a <=> $b } keys %returneditems ) {
             $ri{duedate} = output_pref($duedate);
             my $patron = Koha::Patrons->find( $riborrowernumber{$_} );
             unless ( $dropboxmode ) {
-                $ri{return_overdue} = 1 if (DateTime->compare($duedate, DateTime->now()) == -1);
+                $ri{return_overdue} = 1 if (DateTime->compare($duedate, dt_from_string()) == -1);
             } else {
                 $ri{return_overdue} = 1 if (DateTime->compare($duedate, $dropboxdate) == -1);
             }
index d29b436..b3e4b06 100755 (executable)
@@ -77,7 +77,7 @@ sub Bug_17135_fix {
 
     my $control = C4::Context->preference('CircControl');
     my $mode = C4::Context->preference('finesMode');
-    my $today = DateTime->now( time_zone => C4::Context->tz() );
+    my $today = dt_from_string();
     my $dbh = C4::Context->dbh;
 
     ## fetch the unclosed FU fines linked to the issues by issue_id
index 686817e..b502a4a 100755 (executable)
@@ -16262,7 +16262,7 @@ $DBversion = '18.06.00.016';
 if( CheckVersion( $DBversion ) ) {
     my $dtf  = Koha::Database->new->schema->storage->datetime_parser;
     my $days = C4::Context->preference('MaxPickupDelay') || 7;
-    my $date = DateTime->now()->add( days => $days );
+    my $date = dt_from_string()->add( days => $days );
     my $sql  = q|UPDATE reserves SET expirationdate = ? WHERE expirationdate IS NULL AND waitingdate IS NOT NULL|;
     $dbh->do( $sql, undef, $dtf->format_datetime($date) );
     SetVersion( $DBversion );
index 50cf0a6..addb7fc 100755 (executable)
@@ -25,6 +25,7 @@ use C4::Members;
 use C4::Circulation qw( GetIssuingCharges );
 use C4::Reserves;
 use C4::Items;
+use Koha::DateUtils;
 use Koha::Holds;
 use Koha::ItemTypes;
 use Koha::Patrons;
@@ -109,7 +110,7 @@ sub build_reserve_data {
 
     my $return = [];
 
-    my $today = DateTime->now( time_zone => C4::Context->tz );
+    my $today = dt_from_string();
     $today->truncate( to => 'day' );
 
     while ( my $reserve = $reserves->next() ) {
index 0537f97..a5b920a 100755 (executable)
@@ -88,7 +88,7 @@ my $mode         = C4::Context->preference('finesMode');
 my $delim = "\t";    # ?  C4::Context->preference('delimiter') || "\t";
 
 my %is_holiday;
-my $today = DateTime->now( time_zone => C4::Context->tz() );
+my $today = dt_from_string();
 my $filename;
 if ($log or $output_dir) {
     $filename = get_filename($output_dir);
index 26a3657..d8fa4ee 100755 (executable)
@@ -417,7 +417,7 @@ if ( defined $htmlfilename ) {
   if ( $htmlfilename eq '' ) {
     $fh = *STDOUT;
   } else {
-    my $today = DateTime->now(time_zone => C4::Context->tz );
+    my $today = dt_from_string();
     open $fh, ">:encoding(UTF-8)",File::Spec->catdir ($htmlfilename,"notices-".$today->ymd().".html");
   }
   
@@ -438,7 +438,7 @@ elsif ( defined $text_filename ) {
   if ( $text_filename eq '' ) {
     $fh = *STDOUT;
   } else {
-    my $today = DateTime->now(time_zone => C4::Context->tz );
+    my $today = dt_from_string();
     open $fh, ">",File::Spec->catdir ($text_filename,"notices-".$today->ymd().".txt");
   }
 }
index 4069ce7..fb1ae4d 100755 (executable)
@@ -55,7 +55,7 @@ my $pending_checkouts = $patron->pending_checkouts;
 while ( my $c = $pending_checkouts->next ) {
     my $issue = $c->unblessed_all_relateds;
     my $vevent = Data::ICal::Entry::Event->new();
-    my $timestamp = DateTime->now(); # Defaults to UTC
+    my $timestamp = dt_from_string(undef,undef,"UTC"); #Get current time in UTC
     # Send some values to the template to generate summary and description
     $issue->{overdue} = $c->is_overdue;
     $template->param(
index e6d335e..a67f53d 100644 (file)
@@ -21,6 +21,7 @@
 use Modern::Perl;
 
 use DateTime;
+use Koha::DateUtils;
 use Test::More tests => 8;
 use Test::Warn;
 
@@ -39,7 +40,7 @@ is ( C4::Circulation::GetAgeRestriction('K16'), '16', 'K16 returns 16' );
 subtest 'Patron tests - 15 years old' => sub {
     plan tests => 5;
     ##Testing age restriction for a borrower.
-    my $now = DateTime->now();
+    my $now = dt_from_string();
     my $borrower = { dateofbirth => $now->add( years => -15 )->strftime("%Y-%m-%d") };
     TestPatron($borrower,0);
 };
@@ -56,7 +57,7 @@ subtest 'Patron tests - 15 years old (Time Zone shifts)' => sub {
             Time::Fake->offset("+${offset}h");
 
             ##Testing age restriction for a borrower.
-            my $now = DateTime->now();
+            my $now = dt_from_string();
             my $borrower = { dateofbirth => $now->add( years => -15 )->strftime("%Y-%m-%d") };
             TestPatron($borrower,$offset);
 
index c0528d6..f0bf9b6 100755 (executable)
@@ -20,6 +20,7 @@ use DateTime;
 
 use C4::Circulation;
 use Koha::Database;
+use Koha::DateUtils;
 use Koha::Patrons;
 use Koha::Biblio;
 use Koha::Item;
@@ -37,7 +38,7 @@ my $builder = t::lib::TestBuilder->new;
 
 $schema->storage->txn_begin();
 
-my $now_value       = DateTime->now();
+my $now_value       = dt_from_string();
 my $mocked_datetime = Test::MockModule->new('DateTime');
 $mocked_datetime->mock( 'now', sub { return $now_value->clone; } );
 
@@ -111,7 +112,7 @@ Koha::CirculationRules->set_rules(
 
 
 my $orig_due = C4::Circulation::CalcDateDue(
-    DateTime->now(time_zone => C4::Context->tz()),
+    dt_from_string(),
     $item->effective_itemtype,
     $patron->branchcode,
     $patron->unblessed
index 5e2d056..6f6c3b8 100644 (file)
@@ -57,7 +57,7 @@ my $dbh = C4::Context->dbh;
 
 $dbh->do(q|DELETE FROM letter|);
 
-my $now_value       = DateTime->now();
+my $now_value       = dt_from_string();
 my $mocked_datetime = Test::MockModule->new('DateTime');
 $mocked_datetime->mock( 'now', sub { return $now_value->clone; } );
 
index d0bbfff..de6939f 100644 (file)
@@ -72,7 +72,7 @@ $dbh->do('DELETE FROM oai_sets');
 
 set_fixed_time(CORE::time());
 
-my $base_datetime = DateTime->now();
+my $base_datetime = dt_from_string();
 my $date_added = $base_datetime->ymd . ' ' .$base_datetime->hms . 'Z';
 my $date_to = substr($date_added, 0, 10) . 'T23:59:59Z';
 my (@header, @marcxml, @oaidc);
index aec58d9..53abb13 100755 (executable)
@@ -21,6 +21,7 @@ use C4::Context;
 use Mail::Sendmail;
 use C4::Letters;
 use Koha::Database;
+use Koha::DateUtils;
 use Koha::Patrons;
 use t::lib::TestBuilder;
 
@@ -112,21 +113,21 @@ $schema->resultset('BorrowerPasswordRecovery')->create(
     {
         borrowernumber => $borrowernumber1,
         uuid           => $uuid1,
-        valid_until    => DateTime->now( time_zone => C4::Context->tz() )->add( days => 2 )->datetime()
+        valid_until    => dt_from_string()->add( days => 2 )->datetime()
     }
 );
 $schema->resultset('BorrowerPasswordRecovery')->create(
     {
         borrowernumber => $borrowernumber2,
         uuid           => $uuid2,
-        valid_until    => DateTime->now( time_zone => C4::Context->tz() )->subtract( days => 2 )->datetime()
+        valid_until    => dt_from_string()->subtract( days => 2 )->datetime()
     }
 );
 $schema->resultset('BorrowerPasswordRecovery')->create(
     {
         borrowernumber => $borrowernumber3,
         uuid           => $uuid3,
-        valid_until    => DateTime->now( time_zone => C4::Context->tz() )->subtract( days => 3 )->datetime()
+        valid_until    => dt_from_string()->subtract( days => 3 )->datetime()
     }
 );
 
@@ -164,7 +165,7 @@ $schema->resultset('BorrowerPasswordRecovery')->create(
     {
         borrowernumber => $borrowernumber2,
         uuid           => $uuid2,
-        valid_until    => DateTime->now( time_zone => C4::Context->tz() )->subtract( days => 2 )->datetime()
+        valid_until    => dt_from_string()->subtract( days => 2 )->datetime()
     }
 );
 
@@ -179,7 +180,7 @@ $schema->resultset('BorrowerPasswordRecovery')->create(
     {
         borrowernumber => $borrowernumber3,
         uuid           => $uuid3,
-        valid_until    => DateTime->now( time_zone => C4::Context->tz() )->subtract( days => 3 )->datetime()
+        valid_until    => dt_from_string()->subtract( days => 3 )->datetime()
     }
 );
 
index 23ef9eb..fe559c1 100755 (executable)
@@ -21,6 +21,7 @@ use Modern::Perl;
 use File::Basename;
 use File::Path;
 use DateTime;
+use Koha::DateUtils;
 use Test::MockModule;
 use Test::More tests => 16;
 use Carp qw/croak carp/;
@@ -31,7 +32,7 @@ BEGIN {
     use_ok('Koha::Sitemapper::Writer');
 }
 
-my $now_value       = DateTime->now();
+my $now_value       = dt_from_string();
 my $mocked_datetime = Test::MockModule->new('DateTime');
 $mocked_datetime->mock( 'now', sub { return $now_value->clone; } );