use C4::Debug;
use C4::Context;
-# use C4::Dates;
use C4::Koha;
use C4::Members;
use C4::Reserves;
my ($class, $patron_id) = @_;
my $type = ref($class) || $class;
my $self;
- $kp = GetMember($patron_id,'cardnumber');
+ $kp = GetMember(cardnumber=>$patron_id);
$debug and warn "new Patron (GetMember): " . Dumper($kp);
unless (defined $kp) {
syslog("LOG_DEBUG", "new ILS::Patron(%s): no such patron", $patron_id);
my $flags = $kp->{flags}; # or warn "Warning: No flags from patron object for '$patron_id'";
my $debarred = $kp->{debarred}; # 1 if ($kp->{flags}->{DBARRED}->{noissues});
$debug and warn sprintf("Debarred = %s : ", ($debarred||'undef')) . Dumper(%{$kp->{flags}});
+ my ($day, $month, $year) = (localtime)[3,4,5];
+ my $today = sprintf '%04d-%02d-%02d', $year+1900, $month+1, $day;
+ my $expired = ($today gt $kp->{dateexpiry}) ? 1 : 0;
+ if ($expired) {
+ if ($kp->{opacnote} ) {
+ $kp->{opacnote} .= q{ };
+ }
+ $kp->{opacnote} .= 'PATRON EXPIRED';
+ }
my %ilspatron;
my $adr = $kp->{streetnumber} || '';
my $address = $kp->{address} || '';
my $dob = $kp->{dateofbirth};
$dob and $dob =~ s/-//g; # YYYYMMDD
+ my $dexpiry = $kp->{dateexpiry};
+ $dexpiry and $dexpiry =~ s/-//g; # YYYYMMDD
$adr .= ($adr && $address) ? " $address" : $address;
my $fines_amount = $flags->{CHARGES}->{amount};
$fines_amount = ($fines_amount and $fines_amount > 0) ? $fines_amount : 0;
id => $kp->{cardnumber}, # to SIP, the id is the BARCODE, not userid
password => $pw,
ptype => $kp->{categorycode}, # 'A'dult. Whatever.
+ dateexpiry => $dexpiry,
+ dateexpiry_iso => $kp->{dateexpiry},
birthdate => $dob,
birthdate_iso => $kp->{dateofbirth},
branchcode => $kp->{branchcode},
address => $adr,
home_phone => $kp->{phone},
email_addr => $kp->{email},
- charge_ok => ( !$debarred ),
- renew_ok => ( !$debarred ),
- recall_ok => ( !$debarred ),
- hold_ok => ( !$debarred ),
+ charge_ok => ( !$debarred && !$expired ),
+ renew_ok => ( !$debarred && !$expired ),
+ recall_ok => ( !$debarred && !$expired ),
+ hold_ok => ( !$debarred && !$expired ),
card_lost => ( $kp->{lost} || $kp->{gonenoaddress} || $flags->{LOST} ),
claims_returned => 0,
fines => $fines_amount, # GetMemberAccountRecords($kp->{borrowernumber})
fine_items => [],
recall_items => [],
unavail_holds => [],
- inet => ( !$debarred ),
+ inet => ( !$debarred && !$expired ),
+ expired => $expired,
);
}
$debug and warn "patron fines: $ilspatron{fines} ... amountoutstanding: $kp->{amountoutstanding} ... CHARGES->amount: $flags->{CHARGES}->{amount}";
- for (qw(CHARGES CREDITS GNA LOST DBARRED NOTES)) {
+ for (qw(EXPIRED CHARGES CREDITS GNA LOST DBARRED NOTES)) {
($flags->{$_}) or next;
if ($_ ne 'NOTES' and $flags->{$_}->{message}) {
$ilspatron{screen_msg} .= " -- " . $flags->{$_}->{message}; # show all but internal NOTES
home_phone => 0,
birthdate => 0,
birthdate_iso => 0,
+ dateexpiry => 0,
+ dateexpiry_iso => 0,
ptype => 0,
charge_ok => 0, # for patron_status[0] (inverted)
renew_ok => 0, # for patron_status[1] (inverted)
return $self->{language} || '000'; # Unspecified
}
+sub expired {
+ my $self = shift;
+ return $self->{expired};
+}
+
#
# remove the hold on item item_id from my hold queue.
# return true if I was holding the item, false otherwise.
1;
__END__
-=head2 EXAMPLES
+=head1 EXAMPLES
-our %patron_example = (
+ our %patron_example = (
djfiander => {
name => "David J. Fiander",
id => 'djfiander',
},
);
-From borrowers table:
-+---------------------+--------------+------+-----+
-| Field | Type | Null | Key |
-+---------------------+--------------+------+-----+
-| borrowernumber | int(11) | NO | PRI |
-| cardnumber | varchar(16) | YES | UNI |
-| surname | mediumtext | NO | |
-| firstname | text | YES | |
-| title | mediumtext | YES | |
-| othernames | mediumtext | YES | |
-| initials | text | YES | |
-| streetnumber | varchar(10) | YES | |
-| streettype | varchar(50) | YES | |
-| address | mediumtext | NO | |
-| address2 | text | YES | |
-| city | mediumtext | NO | |
-| zipcode | varchar(25) | YES | |
-| email | mediumtext | YES | |
-| phone | text | YES | |
-| mobile | varchar(50) | YES | |
-| fax | mediumtext | YES | |
-| emailpro | text | YES | |
-| phonepro | text | YES | |
-| B_streetnumber | varchar(10) | YES | |
-| B_streettype | varchar(50) | YES | |
-| B_address | varchar(100) | YES | |
-| B_city | mediumtext | YES | |
-| B_zipcode | varchar(25) | YES | |
-| B_email | text | YES | |
-| B_phone | mediumtext | YES | |
-| dateofbirth | date | YES | |
-| branchcode | varchar(10) | NO | MUL |
-| categorycode | varchar(10) | NO | MUL |
-| dateenrolled | date | YES | |
-| dateexpiry | date | YES | |
-| gonenoaddress | tinyint(1) | YES | |
-| lost | tinyint(1) | YES | |
-| debarred | tinyint(1) | YES | |
-| contactname | mediumtext | YES | |
-| contactfirstname | text | YES | |
-| contacttitle | text | YES | |
-| guarantorid | int(11) | YES | |
-| borrowernotes | mediumtext | YES | |
-| relationship | varchar(100) | YES | |
-| ethnicity | varchar(50) | YES | |
-| ethnotes | varchar(255) | YES | |
-| sex | varchar(1) | YES | |
-| password | varchar(30) | YES | |
-| flags | int(11) | YES | |
-| userid | varchar(30) | YES | MUL |
-| opacnote | mediumtext | YES | |
-| contactnote | varchar(255) | YES | |
-| sort1 | varchar(80) | YES | |
-| sort2 | varchar(80) | YES | |
-| altcontactfirstname | varchar(255) | YES | |
-| altcontactsurname | varchar(255) | YES | |
-| altcontactaddress1 | varchar(255) | YES | |
-| altcontactaddress2 | varchar(255) | YES | |
-| altcontactaddress3 | varchar(255) | YES | |
-| altcontactzipcode | varchar(50) | YES | |
-| altcontactphone | varchar(50) | YES | |
-+---------------------+--------------+------+-----+
-
-From C4::Members
-
-$flags->{KEY}
-{CHARGES}
+ From borrowers table:
++---------------------+--------------+------+-----+---------+----------------+
+| Field | Type | Null | Key | Default | Extra |
++---------------------+--------------+------+-----+---------+----------------+
+| borrowernumber | int(11) | NO | PRI | NULL | auto_increment |
+| cardnumber | varchar(16) | YES | UNI | NULL | |
+| surname | mediumtext | NO | | NULL | |
+| firstname | text | YES | | NULL | |
+| title | mediumtext | YES | | NULL | |
+| othernames | mediumtext | YES | | NULL | |
+| initials | text | YES | | NULL | |
+| streetnumber | varchar(10) | YES | | NULL | |
+| streettype | varchar(50) | YES | | NULL | |
+| address | mediumtext | NO | | NULL | |
+| address2 | text | YES | | NULL | |
+| city | mediumtext | NO | | NULL | |
+| state | mediumtext | YES | | NULL | |
+| zipcode | varchar(25) | YES | | NULL | |
+| country | text | YES | | NULL | |
+| email | mediumtext | YES | | NULL | |
+| phone | text | YES | | NULL | |
+| mobile | varchar(50) | YES | | NULL | |
+| fax | mediumtext | YES | | NULL | |
+| emailpro | text | YES | | NULL | |
+| phonepro | text | YES | | NULL | |
+| B_streetnumber | varchar(10) | YES | | NULL | |
+| B_streettype | varchar(50) | YES | | NULL | |
+| B_address | varchar(100) | YES | | NULL | |
+| B_address2 | text | YES | | NULL | |
+| B_city | mediumtext | YES | | NULL | |
+| B_state | mediumtext | YES | | NULL | |
+| B_zipcode | varchar(25) | YES | | NULL | |
+| B_country | text | YES | | NULL | |
+| B_email | text | YES | | NULL | |
+| B_phone | mediumtext | YES | | NULL | |
+| dateofbirth | date | YES | | NULL | |
+| branchcode | varchar(10) | NO | MUL | | |
+| categorycode | varchar(10) | NO | MUL | | |
+| dateenrolled | date | YES | | NULL | |
+| dateexpiry | date | YES | | NULL | |
+| gonenoaddress | tinyint(1) | YES | | NULL | |
+| lost | tinyint(1) | YES | | NULL | |
+| debarred | tinyint(1) | YES | | NULL | |
+| contactname | mediumtext | YES | | NULL | |
+| contactfirstname | text | YES | | NULL | |
+| contacttitle | text | YES | | NULL | |
+| guarantorid | int(11) | YES | MUL | NULL | |
+| borrowernotes | mediumtext | YES | | NULL | |
+| relationship | varchar(100) | YES | | NULL | |
+| ethnicity | varchar(50) | YES | | NULL | |
+| ethnotes | varchar(255) | YES | | NULL | |
+| sex | varchar(1) | YES | | NULL | |
+| password | varchar(30) | YES | | NULL | |
+| flags | int(11) | YES | | NULL | |
+| userid | varchar(30) | YES | MUL | NULL | |
+| opacnote | mediumtext | YES | | NULL | |
+| contactnote | varchar(255) | YES | | NULL | |
+| sort1 | varchar(80) | YES | | NULL | |
+| sort2 | varchar(80) | YES | | NULL | |
+| altcontactfirstname | varchar(255) | YES | | NULL | |
+| altcontactsurname | varchar(255) | YES | | NULL | |
+| altcontactaddress1 | varchar(255) | YES | | NULL | |
+| altcontactaddress2 | varchar(255) | YES | | NULL | |
+| altcontactaddress3 | varchar(255) | YES | | NULL | |
+| altcontactstate | mediumtext | YES | | NULL | |
+| altcontactzipcode | varchar(50) | YES | | NULL | |
+| altcontactcountry | text | YES | | NULL | |
+| altcontactphone | varchar(50) | YES | | NULL | |
+| smsalertnumber | varchar(50) | YES | | NULL | |
+| privacy | int(11) | NO | | 1 | |
++---------------------+--------------+------+-----+---------+----------------+
+
+
+ From C4::Members
+
+ $flags->{KEY}
+ {CHARGES}
{message} Message showing patron's credit or debt
{noissues} Set if patron owes >$5.00
-{GNA} Set if patron gone w/o address
+ {GNA} Set if patron gone w/o address
{message} "Borrower has no valid address"
{noissues} Set.
-{LOST} Set if patron's card reported lost
+ {LOST} Set if patron's card reported lost
{message} Message to this effect
{noissues} Set.
-{DBARRED} Set if patron is debarred
+ {DBARRED} Set if patron is debarred
{message} Message to this effect
{noissues} Set.
-{NOTES} Set if patron has notes
+ {NOTES} Set if patron has notes
{message} Notes about patron
-{ODUES} Set if patron has overdue books
+ {ODUES} Set if patron has overdue books
{message} "Yes"
{itemlist} ref-to-array: list of overdue books
{itemlisttext} Text list of overdue items
-{WAITING} Set if there are items available that the patron reserved
+ {WAITING} Set if there are items available that the patron reserved
{message} Message to this effect
{itemlist} ref-to-array: list of available items