From 188029b6a60e53c3a91d5374592ad04957dc5d74 Mon Sep 17 00:00:00 2001 From: Bill Erickson Date: Mon, 16 Nov 2015 14:48:23 -0500 Subject: [PATCH] LP#1516757: ensure that SIP2 returns DOB correctly 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. To test ------- [1] Fire up a SIP client of some sort and retrieve a patron record; verify that the patron's date of birth is correct, and not offset by one day. Signed-off-by: Bill Erickson Signed-off-by: Galen Charlton --- Open-ILS/src/perlmods/lib/OpenILS/SIP.pm | 9 ++++++++- Open-ILS/src/perlmods/lib/OpenILS/SIP/Patron.pm | 2 +- 2 files changed, 9 insertions(+), 2 deletions(-) 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; } -- 2.11.0