Bug 30061: Make Koha::Patron->get_age use DateTime math
authorTomas Cohen Arazi <tomascohen@theke.io>
Wed, 9 Feb 2022 13:45:15 +0000 (10:45 -0300)
committerFridolin Somers <fridolin.somers@biblibre.com>
Tue, 22 Mar 2022 20:17:33 +0000 (10:17 -1000)
This patch does what the title says. Instead of converting dates to
strings and performing math manually, we can just use the DateTime
objects we have and calculate the DateTime::Duration there's between
them, to get the years count.

To test:
1. Run:
   $ kshell
  k$ prove t/db_dependent/Koha/Patrons.t
=> SUCCESS: Tests pass
2. Apply this patch
3. Repeat 1
=> SUCCESS: Tests pass
4. Sign off :-D

Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
Signed-off-by: David Nind <david@davidnind.com>
Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Signed-off-by: Fridolin Somers <fridolin.somers@biblibre.com>
Koha/Patron.pm

index 6414abf..0c16079 100644 (file)
@@ -1223,7 +1223,7 @@ sub get_routing_lists {
 
 =head3 get_age
 
-my $age = $patron->get_age
+    my $age = $patron->get_age
 
 Return the age of the patron
 
@@ -1231,19 +1231,13 @@ Return the age of the patron
 
 sub get_age {
     my ($self)    = @_;
-    my $today_str = dt_from_string->strftime("%Y-%m-%d");
-    return unless $self->dateofbirth;
-    my $dob_str   = dt_from_string( $self->dateofbirth )->strftime("%Y-%m-%d");
 
-    my ( $dob_y,   $dob_m,   $dob_d )   = split /-/, $dob_str;
-    my ( $today_y, $today_m, $today_d ) = split /-/, $today_str;
+    return unless $self->dateofbirth;
 
-    my $age = $today_y - $dob_y;
-    if ( $dob_m . $dob_d > $today_m . $today_d ) {
-        $age--;
-    }
+    my $date_of_birth = dt_from_string( $self->dateofbirth );
+    my $today         = dt_from_string->truncate( to => 'day' );
 
-    return $age;
+    return $today->subtract_datetime( $date_of_birth )->years;
 }
 
 =head3 is_valid_age