more patron info fields; date handling
authorBill Erickson <berickxx@gmail.com>
Wed, 9 Sep 2020 19:48:21 +0000 (15:48 -0400)
committerBill Erickson <berickxx@gmail.com>
Mon, 30 Nov 2020 16:38:25 +0000 (08:38 -0800)
Signed-off-by: Bill Erickson <berickxx@gmail.com>
Open-ILS/src/perlmods/lib/OpenILS/Application/SIP2.pm
Open-ILS/src/perlmods/lib/OpenILS/Application/SIP2/Common.pm
Open-ILS/src/perlmods/lib/OpenILS/Application/SIP2/Patron.pm

index e0ed21b..0c55354 100644 (file)
@@ -215,6 +215,7 @@ sub handle_patron_info {
     $response->{code} = '64';
 
     return $response unless $pdetails;
+    my $patron = $pdetails->{patron};
 
     push(
         @{$response->{fixed_fields}}, 
@@ -226,6 +227,15 @@ sub handle_patron_info {
         $SC->count4($pdetails->{unavail_holds_count})
     );
 
+    push(
+        @{$response->{fields}}, 
+        {BE => $patron->email},
+        {PA => $SC->sipymd($patron->expire_date)},
+        {PB => $SC->sipymd($patron->dob, 1)},
+        {PC => $patron->profile->name},
+        {XI => $patron->id}
+    );
+
     if ($list_items eq 'hold_items') {
         for my $hold (@{$pdetails->{hold_items}}) {
             push(@{$response->{fields}}, {AS => $hold});
@@ -327,13 +337,9 @@ sub patron_response_common_data {
         fields => [
             {AO => $session->config->{institution}},
             {AA => $barcode},
-            {BL => $SC->sipbool(1)},            # valid patron
-            {BV => $pdetails->{balance_owed}},  # fee amount
-            {CQ => $SC->sipbool($password)},    # password verified if exists
-            {PA => $SC->format_date($session, $patron->expire_date)},
-            ($patron->dob ? 
-                {PB => $SC->format_date($session, $patron->dob, 'dob')} : ()),
-            {PC => $patron->profile->name}
+            {BL => $SC->sipbool(1)},           # valid patron
+            {BV => $pdetails->{balance_owed}}, # fee amount
+            {CQ => $SC->sipbool($password)}    # password verified if exists
         ]
     };
 }
index 304c647..8433775 100644 (file)
@@ -10,44 +10,20 @@ sub sipdate {
     return $date->strftime(SIP_DATE_FORMAT);
 }
 
-sub format_date {
-    my ($class, $session, $date, $type) = @_;
-    $type ||= '';
+sub sipymd {
+    my ($class, $date_str, $to_local_tz) = @_;
+    return '' unless $date_str;
 
-    return "" unless $date;
-
-    my $dt = DateTime::Format::ISO8601->new-> parse_datetime(clean_ISO8601($date));
+    my $dt = DateTime::Format::ISO8601->new
+        ->parse_datetime(clean_ISO8601($date_str));
 
     # 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;
-    my $mon    = $time[4]+1;
-    my $day    = $time[3];
-    my $hour   = $time[2];
-    my $minute = $time[1];
-    my $second = $time[0];
-  
-    $date = sprintf("%04d%02d%02d", $year, $mon, $day);
-
-    # Due dates need hyphen separators and time of day as well
-    if ($type eq 'due') {
-
-        if ($session->config->{due_date_use_sip_date_format}) {
-            $date = $class->sipdate($dt);
-
-        } else {
-            $date = sprintf("%04d-%02d-%02d %02d:%02d:%02d", 
-                $year, $mon, $day, $hour, $minute, $second);
-        }
-    }
+    # 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 $to_local_tz;
 
-    return $date;
+    return $dt->strftime('%Y%m%d');
 }
 
 # False == 'N'
index 04ec361..b619cf9 100644 (file)
@@ -328,8 +328,6 @@ sub set_patron_privileges {
     my $expire = DateTime::Format::ISO8601->new
         ->parse_datetime(clean_ISO8601($patron->expire_date));
 
-    $details->{expire_date} = $SC->format_date($patron->expire_date);
-
     if ($expire < DateTime->now) {
         $logger->info("SIP2 Patron account is expired; all privileges blocked");
         $details->{charge_denied} = 1;