From: Bill Erickson Date: Mon, 16 Nov 2015 19:48:23 +0000 (-0500) Subject: LP#1516757 SIP DoB uses local timezone X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=f1de954f32bafaa360272495fb254637e636a9b7;p=working%2FEvergreen.git LP#1516757 SIP DoB uses local timezone Parse dates of birth using the local timezone to ensure that the date in the database will match what is sent to SIP clients. Otherwise, the date will be parsed as UTC and may result in the DoB value being offset by one day in the SIP response. Signed-off-by: Bill Erickson --- diff --git a/Open-ILS/src/perlmods/lib/OpenILS/SIP.pm b/Open-ILS/src/perlmods/lib/OpenILS/SIP.pm index bd11e1978e..cf98f33e62 100644 --- a/Open-ILS/src/perlmods/lib/OpenILS/SIP.pm +++ b/Open-ILS/src/perlmods/lib/OpenILS/SIP.pm @@ -186,12 +186,19 @@ sub patron_barcode_from_id { sub format_date { my $class = shift; my $date = shift; - my $type = shift || 'dob'; + my $type = shift || ''; return "" unless $date; my $dt = DateTime::Format::ISO8601->new-> parse_datetime(OpenSRF::Utils::cleanse_ISO8601($date)); + + # actor.usr.dob stores dates without time/timezone, which causes + # DateTime to assume the date is stored as UTC. Tell DateTime + # to use the local time zone, instead. + # Other dates will have time zones and should be parsed as-is. + $dt->set_time_zone('local') if $type eq 'dob'; + my @time = localtime($dt->epoch); my $year = $time[5]+1900; diff --git a/Open-ILS/src/perlmods/lib/OpenILS/SIP/Patron.pm b/Open-ILS/src/perlmods/lib/OpenILS/SIP/Patron.pm index ac4f05c3b2..eebf03e636 100644 --- a/Open-ILS/src/perlmods/lib/OpenILS/SIP/Patron.pm +++ b/Open-ILS/src/perlmods/lib/OpenILS/SIP/Patron.pm @@ -261,7 +261,7 @@ sub home_phone { sub sip_birthdate { my $self = shift; - my $dob = OpenILS::SIP->format_date($self->{user}->dob); + my $dob = OpenILS::SIP->format_date($self->{user}->dob, 'dob'); syslog('LOG_DEBUG', "OILS: Patron DOB = $dob"); return $dob; }