Bug 30061: Make Koha::Patron->get_age use DateTime math

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>
This commit is contained in:
Tomás Cohen Arazi 2022-02-09 10:45:15 -03:00 committed by Fridolin Somers
parent 296e3e618d
commit 90a24b185c

View 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;
my $date_of_birth = dt_from_string( $self->dateofbirth );
my $today = dt_from_string->truncate( to => 'day' );
my $age = $today_y - $dob_y;
if ( $dob_m . $dob_d > $today_m . $today_d ) {
$age--;
}
return $age;
return $today->subtract_datetime( $date_of_birth )->years;
}
=head3 is_valid_age