$response->{code} = '64';
return $response unless $pdetails;
+ my $patron = $pdetails->{patron};
push(
@{$response->{fixed_fields}},
$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});
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
]
};
}
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'
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;