]
};
}
+
+ my $patron = $pdetails->{patron};
return {
fixed_fields => [
$SC->spacebool($pdetails->{renew_denied}),
$SC->spacebool($pdetails->{recall_denied}),
$SC->spacebool($pdetails->{holds_denied}),
- $SC->spacebool($pdetails->{patron}->card->active eq 'f'),
+ $SC->spacebool($patron->card->active eq 'f'),
$SC->spacebool(0), # too many charged
$SC->spacebool($pdetails->{too_may_overdue}),
$SC->spacebool(0), # too many renewals
{AA => $barcode},
{BL => $SC->sipbool(1)}, # valid patron
{BV => $pdetails->{balance_owed}}, # fee amount
- {CQ => $SC->sipbool($password)} # password verified if exists
+ {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}
]
};
}
package OpenILS::Application::SIP2::Common;
use strict; use warnings;
+use OpenILS::Utils::DateTime qw/:datetime/;
use constant SIP_DATE_FORMAT => "%Y%m%d %H%M%S";
return $date->strftime(SIP_DATE_FORMAT);
}
+sub format_date {
+ my ($class, $session, $date, $type) = @_;
+ $type ||= '';
+
+ return "" unless $date;
+
+ my $dt = DateTime::Format::ISO8601->new-> parse_datetime(clean_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;
+ 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);
+ }
+ }
+
+ return $date;
+}
+
# False == 'N'
sub sipbool {
my ($class, $bool) = @_;
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;