Lines 1-6
Link Here
|
1 |
# |
1 |
# |
2 |
# ILS::Patron.pm |
2 |
# ILS::Patron.pm |
3 |
# |
3 |
# |
4 |
# A Class for hiding the ILS's concept of the patron from the OpenSIP |
4 |
# A Class for hiding the ILS's concept of the patron from the OpenSIP |
5 |
# system |
5 |
# system |
6 |
# |
6 |
# |
Lines 26-207
use Digest::MD5 qw(md5_base64);
Link Here
|
26 |
use vars qw($VERSION @ISA @EXPORT @EXPORT_OK); |
26 |
use vars qw($VERSION @ISA @EXPORT @EXPORT_OK); |
27 |
|
27 |
|
28 |
BEGIN { |
28 |
BEGIN { |
29 |
$VERSION = 2.03; |
29 |
$VERSION = 2.03; |
30 |
@ISA = qw(Exporter); |
30 |
@ISA = qw(Exporter); |
31 |
@EXPORT_OK = qw(invalid_patron); |
31 |
@EXPORT_OK = qw(invalid_patron); |
32 |
} |
32 |
} |
33 |
|
33 |
|
34 |
our $kp; # koha patron |
34 |
our $kp; # koha patron |
35 |
|
35 |
|
36 |
sub new { |
36 |
sub new { |
37 |
my ($class, $patron_id) = @_; |
37 |
my ( $class, $patron_id ) = @_; |
38 |
my $type = ref($class) || $class; |
38 |
my $type = ref($class) || $class; |
39 |
my $self; |
39 |
my $self; |
40 |
$kp = GetMember(cardnumber=>$patron_id); |
40 |
$kp = GetMember( cardnumber => $patron_id ); |
41 |
$debug and warn "new Patron (GetMember): " . Dumper($kp); |
41 |
$debug and warn "new Patron (GetMember): " . Dumper($kp); |
42 |
unless (defined $kp) { |
42 |
unless ( defined $kp ) { |
43 |
syslog("LOG_DEBUG", "new ILS::Patron(%s): no such patron", $patron_id); |
43 |
syslog( "LOG_DEBUG", "new ILS::Patron(%s): no such patron", |
44 |
return undef; |
44 |
$patron_id ); |
45 |
} |
45 |
return undef; |
46 |
$kp = GetMemberDetails(undef,$patron_id); |
46 |
} |
47 |
$debug and warn "new Patron (GetMemberDetails): " . Dumper($kp); |
47 |
$kp = GetMemberDetails( undef, $patron_id ); |
48 |
my $pw = $kp->{password}; ### FIXME - md5hash -- deal with . |
48 |
$debug and warn "new Patron (GetMemberDetails): " . Dumper($kp); |
49 |
my $flags = $kp->{flags}; # or warn "Warning: No flags from patron object for '$patron_id'"; |
49 |
my $pw = $kp->{password}; ### FIXME - md5hash -- deal with . |
50 |
my $debarred = $kp->{debarred}; # 1 if ($kp->{flags}->{DBARRED}->{noissues}); |
50 |
my $flags = $kp |
51 |
$debug and warn sprintf("Debarred = %s : ", ($debarred||'undef')) . Dumper(%{$kp->{flags}}); |
51 |
->{flags}; # or warn "Warning: No flags from patron object for '$patron_id'"; |
52 |
my ($day, $month, $year) = (localtime)[3,4,5]; |
52 |
my $debarred = |
53 |
my $today = sprintf '%04d-%02d-%02d', $year+1900, $month+1, $day; |
53 |
$kp->{debarred}; # 1 if ($kp->{flags}->{DBARRED}->{noissues}); |
54 |
my $expired = ($today gt $kp->{dateexpiry}) ? 1 : 0; |
54 |
$debug |
|
|
55 |
and warn sprintf( "Debarred = %s : ", ( $debarred || 'undef' ) ) |
56 |
. Dumper( %{ $kp->{flags} } ); |
57 |
my ( $day, $month, $year ) = (localtime)[ 3, 4, 5 ]; |
58 |
my $today = sprintf '%04d-%02d-%02d', $year + 1900, $month + 1, $day; |
59 |
my $expired = ( $today gt $kp->{dateexpiry} ) ? 1 : 0; |
60 |
|
55 |
if ($expired) { |
61 |
if ($expired) { |
56 |
if ($kp->{opacnote} ) { |
62 |
if ( $kp->{opacnote} ) { |
57 |
$kp->{opacnote} .= q{ }; |
63 |
$kp->{opacnote} .= q{ }; |
58 |
} |
64 |
} |
59 |
$kp->{opacnote} .= 'PATRON EXPIRED'; |
65 |
$kp->{opacnote} .= 'PATRON EXPIRED'; |
60 |
} |
66 |
} |
61 |
my %ilspatron; |
67 |
my %ilspatron; |
62 |
my $adr = $kp->{streetnumber} || ''; |
68 |
my $adr = $kp->{streetnumber} || ''; |
63 |
my $address = $kp->{address} || ''; |
69 |
my $address = $kp->{address} || ''; |
64 |
my $dob = $kp->{dateofbirth}; |
70 |
my $dob = $kp->{dateofbirth}; |
65 |
$dob and $dob =~ s/-//g; # YYYYMMDD |
71 |
$dob and $dob =~ s/-//g; # YYYYMMDD |
66 |
my $dexpiry = $kp->{dateexpiry}; |
72 |
my $dexpiry = $kp->{dateexpiry}; |
67 |
$dexpiry and $dexpiry =~ s/-//g; # YYYYMMDD |
73 |
$dexpiry and $dexpiry =~ s/-//g; # YYYYMMDD |
68 |
$adr .= ($adr && $address) ? " $address" : $address; |
74 |
$adr .= ( $adr && $address ) ? " $address" : $address; |
69 |
my $fines_amount = $flags->{CHARGES}->{amount}; |
75 |
my $fines_amount = $flags->{CHARGES}->{amount}; |
70 |
$fines_amount = ($fines_amount and $fines_amount > 0) ? $fines_amount : 0; |
76 |
$fines_amount = ( $fines_amount and $fines_amount > 0 ) ? $fines_amount : 0; |
71 |
{ |
77 |
{ |
72 |
no warnings; # any of these $kp->{fields} being concat'd could be undef |
78 |
no warnings; # any of these $kp->{fields} being concat'd could be undef |
73 |
%ilspatron = ( |
79 |
%ilspatron = ( |
74 |
getmemberdetails_object => $kp, |
80 |
getmemberdetails_object => $kp, |
75 |
name => $kp->{firstname} . " " . $kp->{surname}, |
81 |
name => $kp->{firstname} . " " . $kp->{surname}, |
76 |
id => $kp->{cardnumber}, # to SIP, the id is the BARCODE, not userid |
82 |
id => $kp->{cardnumber}, # to SIP, the id is the BARCODE, not userid |
77 |
password => $pw, |
83 |
password => $pw, |
78 |
ptype => $kp->{categorycode}, # 'A'dult. Whatever. |
84 |
ptype => $kp->{categorycode}, # 'A'dult. Whatever. |
79 |
dateexpiry => $dexpiry, |
85 |
dateexpiry => $dexpiry, |
80 |
dateexpiry_iso => $kp->{dateexpiry}, |
86 |
dateexpiry_iso => $kp->{dateexpiry}, |
81 |
birthdate => $dob, |
87 |
birthdate => $dob, |
82 |
birthdate_iso => $kp->{dateofbirth}, |
88 |
birthdate_iso => $kp->{dateofbirth}, |
83 |
branchcode => $kp->{branchcode}, |
89 |
branchcode => $kp->{branchcode}, |
84 |
library_name => "", # only populated if needed, cached here |
90 |
library_name => "", # only populated if needed, cached here |
85 |
borrowernumber => $kp->{borrowernumber}, |
91 |
borrowernumber => $kp->{borrowernumber}, |
86 |
address => $adr, |
92 |
address => $adr, |
87 |
home_phone => $kp->{phone}, |
93 |
home_phone => $kp->{phone}, |
88 |
email_addr => $kp->{email}, |
94 |
email_addr => $kp->{email}, |
89 |
charge_ok => ( !$debarred && !$expired ), |
95 |
charge_ok => ( !$debarred && !$expired ), |
90 |
renew_ok => ( !$debarred && !$expired ), |
96 |
renew_ok => ( !$debarred && !$expired ), |
91 |
recall_ok => ( !$debarred && !$expired ), |
97 |
recall_ok => ( !$debarred && !$expired ), |
92 |
hold_ok => ( !$debarred && !$expired ), |
98 |
hold_ok => ( !$debarred && !$expired ), |
93 |
card_lost => ( $kp->{lost} || $kp->{gonenoaddress} || $flags->{LOST} ), |
99 |
card_lost => |
94 |
claims_returned => 0, |
100 |
( $kp->{lost} || $kp->{gonenoaddress} || $flags->{LOST} ), |
95 |
fines => $fines_amount, # GetMemberAccountRecords($kp->{borrowernumber}) |
101 |
claims_returned => 0, |
96 |
fees => 0, # currently not distinct from fines |
102 |
fines => |
97 |
recall_overdue => 0, |
103 |
$fines_amount, # GetMemberAccountRecords($kp->{borrowernumber}) |
98 |
items_billed => 0, |
104 |
fees => 0, # currently not distinct from fines |
99 |
screen_msg => 'Greetings from Koha. ' . $kp->{opacnote}, |
105 |
recall_overdue => 0, |
100 |
print_line => '', |
106 |
items_billed => 0, |
101 |
items => [], |
107 |
screen_msg => 'Greetings from Koha. ' . $kp->{opacnote}, |
102 |
hold_items => $flags->{WAITING}{itemlist}, |
108 |
print_line => '', |
103 |
overdue_items => $flags->{ODUES}{itemlist}, |
109 |
items => [], |
104 |
fine_items => [], |
110 |
hold_items => $flags->{WAITING}{itemlist}, |
105 |
recall_items => [], |
111 |
overdue_items => $flags->{ODUES}{itemlist}, |
106 |
unavail_holds => [], |
112 |
fine_items => [], |
107 |
inet => ( !$debarred && !$expired ), |
113 |
recall_items => [], |
108 |
expired => $expired, |
114 |
unavail_holds => [], |
109 |
); |
115 |
inet => ( !$debarred && !$expired ), |
|
|
116 |
expired => $expired, |
117 |
); |
110 |
} |
118 |
} |
111 |
$debug and warn "patron fines: $ilspatron{fines} ... amountoutstanding: $kp->{amountoutstanding} ... CHARGES->amount: $flags->{CHARGES}->{amount}"; |
119 |
$debug |
112 |
for (qw(EXPIRED CHARGES CREDITS GNA LOST DBARRED NOTES)) { |
120 |
and warn |
113 |
($flags->{$_}) or next; |
121 |
"patron fines: $ilspatron{fines} ... amountoutstanding: $kp->{amountoutstanding} ... CHARGES->amount: $flags->{CHARGES}->{amount}"; |
114 |
if ($_ ne 'NOTES' and $flags->{$_}->{message}) { |
122 |
for (qw(EXPIRED CHARGES CREDITS GNA LOST DBARRED NOTES)) { |
115 |
$ilspatron{screen_msg} .= " -- " . $flags->{$_}->{message}; # show all but internal NOTES |
123 |
( $flags->{$_} ) or next; |
|
|
124 |
if ( $_ ne 'NOTES' and $flags->{$_}->{message} ) { |
125 |
$ilspatron{screen_msg} .= |
126 |
" -- " . $flags->{$_}->{message}; # show all but internal NOTES |
116 |
} |
127 |
} |
117 |
if ($flags->{$_}->{noissues}) { |
128 |
if ( $flags->{$_}->{noissues} ) { |
118 |
foreach my $toggle (qw(charge_ok renew_ok recall_ok hold_ok inet)) { |
129 |
foreach my $toggle (qw(charge_ok renew_ok recall_ok hold_ok inet)) { |
119 |
$ilspatron{$toggle} = 0; # if we get noissues, disable everything |
130 |
$ilspatron{$toggle} = |
120 |
} |
131 |
0; # if we get noissues, disable everything |
121 |
} |
132 |
} |
122 |
} |
133 |
} |
123 |
|
134 |
} |
124 |
# FIXME: populate fine_items recall_items |
135 |
|
|
|
136 |
# FIXME: populate fine_items recall_items |
125 |
# $ilspatron{hold_items} = (GetReservesFromBorrowernumber($kp->{borrowernumber},'F')); |
137 |
# $ilspatron{hold_items} = (GetReservesFromBorrowernumber($kp->{borrowernumber},'F')); |
126 |
$ilspatron{unavail_holds} = [(GetReservesFromBorrowernumber($kp->{borrowernumber}))]; |
138 |
$ilspatron{unavail_holds} = |
127 |
$ilspatron{items} = GetPendingIssues($kp->{borrowernumber}); |
139 |
[ ( GetReservesFromBorrowernumber( $kp->{borrowernumber} ) ) ]; |
128 |
$self = \%ilspatron; |
140 |
$ilspatron{items} = GetPendingIssues( $kp->{borrowernumber} ); |
129 |
$debug and warn Dumper($self); |
141 |
$self = \%ilspatron; |
130 |
syslog("LOG_DEBUG", "new ILS::Patron(%s): found patron '%s'", $patron_id,$self->{id}); |
142 |
$debug and warn Dumper($self); |
|
|
143 |
syslog( "LOG_DEBUG", "new ILS::Patron(%s): found patron '%s'", |
144 |
$patron_id, $self->{id} ); |
131 |
bless $self, $type; |
145 |
bless $self, $type; |
132 |
return $self; |
146 |
return $self; |
133 |
} |
147 |
} |
134 |
|
148 |
|
135 |
|
|
|
136 |
# 0 means read-only |
149 |
# 0 means read-only |
137 |
# 1 means read/write |
150 |
# 1 means read/write |
138 |
|
151 |
|
139 |
my %fields = ( |
152 |
my %fields = ( |
140 |
id => 0, |
153 |
id => 0, |
141 |
name => 0, |
154 |
name => 0, |
142 |
address => 0, |
155 |
address => 0, |
143 |
email_addr => 0, |
156 |
email_addr => 0, |
144 |
home_phone => 0, |
157 |
home_phone => 0, |
145 |
birthdate => 0, |
158 |
birthdate => 0, |
146 |
birthdate_iso => 0, |
159 |
birthdate_iso => 0, |
147 |
dateexpiry => 0, |
160 |
dateexpiry => 0, |
148 |
dateexpiry_iso => 0, |
161 |
dateexpiry_iso => 0, |
149 |
ptype => 0, |
162 |
ptype => 0, |
150 |
charge_ok => 0, # for patron_status[0] (inverted) |
163 |
charge_ok => 0, # for patron_status[0] (inverted) |
151 |
renew_ok => 0, # for patron_status[1] (inverted) |
164 |
renew_ok => 0, # for patron_status[1] (inverted) |
152 |
recall_ok => 0, # for patron_status[2] (inverted) |
165 |
recall_ok => 0, # for patron_status[2] (inverted) |
153 |
hold_ok => 0, # for patron_status[3] (inverted) |
166 |
hold_ok => 0, # for patron_status[3] (inverted) |
154 |
card_lost => 0, # for patron_status[4] |
167 |
card_lost => 0, # for patron_status[4] |
155 |
recall_overdue => 0, |
168 |
recall_overdue => 0, |
156 |
currency => 1, |
169 |
currency => 1, |
157 |
# fee_limit => 0, |
170 |
|
158 |
screen_msg => 1, |
171 |
# fee_limit => 0, |
159 |
print_line => 1, |
172 |
screen_msg => 1, |
160 |
too_many_charged => 0, # for patron_status[5] |
173 |
print_line => 1, |
161 |
too_many_overdue => 0, # for patron_status[6] |
174 |
too_many_charged => 0, # for patron_status[5] |
162 |
too_many_renewal => 0, # for patron_status[7] |
175 |
too_many_overdue => 0, # for patron_status[6] |
163 |
too_many_claim_return => 0, # for patron_status[8] |
176 |
too_many_renewal => 0, # for patron_status[7] |
164 |
too_many_lost => 0, # for patron_status[9] |
177 |
too_many_claim_return => 0, # for patron_status[8] |
165 |
# excessive_fines => 0, # for patron_status[10] |
178 |
too_many_lost => 0, # for patron_status[9] |
166 |
# excessive_fees => 0, # for patron_status[11] |
179 |
|
167 |
recall_overdue => 0, # for patron_status[12] |
180 |
# excessive_fines => 0, # for patron_status[10] |
168 |
too_many_billed => 0, # for patron_status[13] |
181 |
# excessive_fees => 0, # for patron_status[11] |
169 |
inet => 0, # EnvisionWare extension |
182 |
recall_overdue => 0, # for patron_status[12] |
|
|
183 |
too_many_billed => 0, # for patron_status[13] |
184 |
inet => 0, # EnvisionWare extension |
170 |
getmemberdetails_object => 0, |
185 |
getmemberdetails_object => 0, |
171 |
); |
186 |
); |
172 |
|
187 |
|
173 |
our $AUTOLOAD; |
188 |
our $AUTOLOAD; |
174 |
|
189 |
|
175 |
sub DESTROY { |
190 |
sub DESTROY { |
|
|
191 |
|
176 |
# be cool. needed for AUTOLOAD(?) |
192 |
# be cool. needed for AUTOLOAD(?) |
177 |
} |
193 |
} |
178 |
|
194 |
|
179 |
sub AUTOLOAD { |
195 |
sub AUTOLOAD { |
180 |
my $self = shift; |
196 |
my $self = shift; |
181 |
my $class = ref($self) or croak "$self is not an object"; |
197 |
my $class = ref($self) or croak "$self is not an object"; |
182 |
my $name = $AUTOLOAD; |
198 |
my $name = $AUTOLOAD; |
183 |
|
199 |
|
184 |
$name =~ s/.*://; |
200 |
$name =~ s/.*://; |
185 |
|
201 |
|
186 |
unless (exists $fields{$name}) { |
202 |
unless ( exists $fields{$name} ) { |
187 |
croak "Cannot access '$name' field of class '$class'"; |
203 |
croak "Cannot access '$name' field of class '$class'"; |
188 |
} |
204 |
} |
189 |
|
205 |
|
190 |
if (@_) { |
206 |
if (@_) { |
191 |
$fields{$name} or croak "Field '$name' of class '$class' is READ ONLY."; |
207 |
$fields{$name} or croak "Field '$name' of class '$class' is READ ONLY."; |
192 |
return $self->{$name} = shift; |
208 |
return $self->{$name} = shift; |
193 |
} else { |
209 |
} |
194 |
return $self->{$name}; |
210 |
else { |
195 |
} |
211 |
return $self->{$name}; |
|
|
212 |
} |
196 |
} |
213 |
} |
197 |
|
214 |
|
198 |
sub check_password { |
215 |
sub check_password { |
199 |
my ($self, $pwd) = @_; |
216 |
my ( $self, $pwd ) = @_; |
200 |
my $md5pwd = $self->{password}; |
217 |
my $md5pwd = $self->{password}; |
201 |
# warn sprintf "check_password for %s: '%s' vs. '%s'",($self->{name}||''),($self->{password}||''),($pwd||''); |
218 |
|
202 |
(defined $pwd ) or return 0; # you gotta give me something (at least ''), or no deal |
219 |
# warn sprintf "check_password for %s: '%s' vs. '%s'",($self->{name}||''),($self->{password}||''),($pwd||''); |
203 |
(defined $md5pwd) or return($pwd eq ''); # if the record has a NULL password, accept '' as match |
220 |
( defined $pwd ) |
204 |
return (md5_base64($pwd) eq $md5pwd); |
221 |
or return 0; # you gotta give me something (at least ''), or no deal |
|
|
222 |
( defined $md5pwd ) |
223 |
or return ( $pwd eq '' ) |
224 |
; # if the record has a NULL password, accept '' as match |
225 |
return ( md5_base64($pwd) eq $md5pwd ); |
205 |
} |
226 |
} |
206 |
|
227 |
|
207 |
# A few special cases, not in AUTOLOADed %fields |
228 |
# A few special cases, not in AUTOLOADed %fields |
Lines 217-223
sub fines_amount {
Link Here
|
217 |
|
238 |
|
218 |
sub language { |
239 |
sub language { |
219 |
my $self = shift; |
240 |
my $self = shift; |
220 |
return $self->{language} || '000'; # Unspecified |
241 |
return $self->{language} || '000'; # Unspecified |
221 |
} |
242 |
} |
222 |
|
243 |
|
223 |
sub expired { |
244 |
sub expired { |
Lines 228-248
sub expired {
Link Here
|
228 |
# |
249 |
# |
229 |
# remove the hold on item item_id from my hold queue. |
250 |
# remove the hold on item item_id from my hold queue. |
230 |
# return true if I was holding the item, false otherwise. |
251 |
# return true if I was holding the item, false otherwise. |
231 |
# |
252 |
# |
232 |
sub drop_hold { |
253 |
sub drop_hold { |
233 |
my ($self, $item_id) = @_; |
254 |
my ( $self, $item_id ) = @_; |
234 |
$item_id or return undef; |
255 |
$item_id or return undef; |
235 |
my $result = 0; |
256 |
my $result = 0; |
236 |
foreach (qw(hold_items unavail_holds)) { |
257 |
foreach (qw(hold_items unavail_holds)) { |
237 |
$self->{$_} or next; |
258 |
$self->{$_} or next; |
238 |
for (my $i = 0; $i < scalar @{$self->{$_}}; $i++) { |
259 |
for ( my $i = 0 ; $i < scalar @{ $self->{$_} } ; $i++ ) { |
239 |
my $held_item = $self->{$_}[$i]->{item_id} or next; |
260 |
my $held_item = $self->{$_}[$i]->{item_id} or next; |
240 |
if ($held_item eq $item_id) { |
261 |
if ( $held_item eq $item_id ) { |
241 |
splice @{$self->{$_}}, $i, 1; |
262 |
splice @{ $self->{$_} }, $i, 1; |
242 |
$result++; |
263 |
$result++; |
243 |
} |
264 |
} |
244 |
} |
265 |
} |
245 |
} |
266 |
} |
246 |
return $result; |
267 |
return $result; |
247 |
} |
268 |
} |
248 |
|
269 |
|
Lines 252-264
sub drop_hold {
Link Here
|
252 |
sub x_items { |
273 |
sub x_items { |
253 |
my $self = shift or return; |
274 |
my $self = shift or return; |
254 |
my $array_var = shift or return; |
275 |
my $array_var = shift or return; |
255 |
my ($start, $end) = @_; |
276 |
my ( $start, $end ) = @_; |
256 |
$self->{$array_var} or return []; |
277 |
$self->{$array_var} or return []; |
257 |
$start = 1 unless defined($start); |
278 |
$start = 1 unless defined($start); |
258 |
$end = scalar @{$self->{$array_var}} unless defined($end); |
279 |
$end = scalar @{ $self->{$array_var} } unless defined($end); |
259 |
# syslog("LOG_DEBUG", "$array_var: start = %d, end = %d; items(%s)", $start, $end, join(', ', @{$self->{items}})); |
280 |
|
|
|
281 |
# syslog("LOG_DEBUG", "$array_var: start = %d, end = %d; items(%s)", $start, $end, join(', ', @{$self->{items}})); |
260 |
|
282 |
|
261 |
return [@{$self->{$array_var}}[$start-1 .. $end-1]]; |
283 |
return [ @{ $self->{$array_var} }[ $start - 1 .. $end - 1 ] ]; |
262 |
} |
284 |
} |
263 |
|
285 |
|
264 |
# |
286 |
# |
Lines 266-314
sub x_items {
Link Here
|
266 |
# |
288 |
# |
267 |
sub hold_items { |
289 |
sub hold_items { |
268 |
my $self = shift or return; |
290 |
my $self = shift or return; |
269 |
return $self->x_items('hold_items', @_); |
291 |
return $self->x_items( 'hold_items', @_ ); |
270 |
} |
292 |
} |
271 |
|
293 |
|
272 |
sub overdue_items { |
294 |
sub overdue_items { |
273 |
my $self = shift or return; |
295 |
my $self = shift or return; |
274 |
return $self->x_items('overdue_items', @_); |
296 |
return $self->x_items( 'overdue_items', @_ ); |
275 |
} |
297 |
} |
|
|
298 |
|
276 |
sub charged_items { |
299 |
sub charged_items { |
277 |
my $self = shift or return; |
300 |
my $self = shift or return; |
278 |
return $self->x_items('items', @_); |
301 |
return $self->x_items( 'items', @_ ); |
279 |
} |
302 |
} |
|
|
303 |
|
280 |
sub fine_items { |
304 |
sub fine_items { |
281 |
my $self = shift or return; |
305 |
my $self = shift or return; |
282 |
return $self->x_items('fine_items', @_); |
306 |
return $self->x_items( 'fine_items', @_ ); |
283 |
} |
307 |
} |
|
|
308 |
|
284 |
sub recall_items { |
309 |
sub recall_items { |
285 |
my $self = shift or return; |
310 |
my $self = shift or return; |
286 |
return $self->x_items('recall_items', @_); |
311 |
return $self->x_items( 'recall_items', @_ ); |
287 |
} |
312 |
} |
|
|
313 |
|
288 |
sub unavail_holds { |
314 |
sub unavail_holds { |
289 |
my $self = shift or return; |
315 |
my $self = shift or return; |
290 |
return $self->x_items('unavail_holds', @_); |
316 |
return $self->x_items( 'unavail_holds', @_ ); |
291 |
} |
317 |
} |
292 |
|
318 |
|
293 |
sub block { |
319 |
sub block { |
294 |
my ($self, $card_retained, $blocked_card_msg) = @_; |
320 |
my ( $self, $card_retained, $blocked_card_msg ) = @_; |
295 |
foreach my $field ('charge_ok', 'renew_ok', 'recall_ok', 'hold_ok', 'inet') { |
321 |
foreach |
296 |
$self->{$field} = 0; |
322 |
my $field ( 'charge_ok', 'renew_ok', 'recall_ok', 'hold_ok', 'inet' ) |
|
|
323 |
{ |
324 |
$self->{$field} = 0; |
297 |
} |
325 |
} |
298 |
$self->{screen_msg} = "Block feature not implemented"; # $blocked_card_msg || "Card Blocked. Please contact library staff"; |
326 |
$self->{screen_msg} = "Block feature not implemented" |
299 |
# TODO: not really affecting patron record |
327 |
; # $blocked_card_msg || "Card Blocked. Please contact library staff"; |
|
|
328 |
# TODO: not really affecting patron record |
300 |
return $self; |
329 |
return $self; |
301 |
} |
330 |
} |
302 |
|
331 |
|
303 |
sub enable { |
332 |
sub enable { |
304 |
my $self = shift; |
333 |
my $self = shift; |
305 |
foreach my $field ('charge_ok', 'renew_ok', 'recall_ok', 'hold_ok', 'inet') { |
334 |
foreach |
306 |
$self->{$field} = 1; |
335 |
my $field ( 'charge_ok', 'renew_ok', 'recall_ok', 'hold_ok', 'inet' ) |
|
|
336 |
{ |
337 |
$self->{$field} = 1; |
307 |
} |
338 |
} |
308 |
syslog("LOG_DEBUG", "Patron(%s)->enable: charge: %s, renew:%s, recall:%s, hold:%s", |
339 |
syslog( |
309 |
$self->{id}, $self->{charge_ok}, $self->{renew_ok}, |
340 |
"LOG_DEBUG", |
310 |
$self->{recall_ok}, $self->{hold_ok}); |
341 |
"Patron(%s)->enable: charge: %s, renew:%s, recall:%s, hold:%s", |
311 |
$self->{screen_msg} = "Enable feature not implemented."; # "All privileges restored."; # TODO: not really affecting patron record |
342 |
$self->{id}, |
|
|
343 |
$self->{charge_ok}, |
344 |
$self->{renew_ok}, |
345 |
$self->{recall_ok}, |
346 |
$self->{hold_ok} |
347 |
); |
348 |
$self->{screen_msg} = "Enable feature not implemented." |
349 |
; # "All privileges restored."; # TODO: not really affecting patron record |
312 |
return $self; |
350 |
return $self; |
313 |
} |
351 |
} |
314 |
|
352 |
|
Lines 318-343
sub inet_privileges {
Link Here
|
318 |
} |
356 |
} |
319 |
|
357 |
|
320 |
sub fee_limit { |
358 |
sub fee_limit { |
|
|
359 |
|
321 |
# my $self = shift; |
360 |
# my $self = shift; |
322 |
return C4::Context->preference("noissuescharge") || 5; |
361 |
return C4::Context->preference("noissuescharge") || 5; |
323 |
} |
362 |
} |
324 |
|
363 |
|
325 |
sub excessive_fees { |
364 |
sub excessive_fees { |
326 |
my $self = shift or return; |
365 |
my $self = shift or return; |
327 |
return ($self->fee_amount and $self->fee_amount > $self->fee_limit); |
366 |
return ( $self->fee_amount and $self->fee_amount > $self->fee_limit ); |
328 |
} |
367 |
} |
|
|
368 |
|
329 |
sub excessive_fines { |
369 |
sub excessive_fines { |
330 |
my $self = shift or return; |
370 |
my $self = shift or return; |
331 |
return $self->excessive_fees; # excessive_fines is the same thing as excessive_fees for Koha |
371 |
return |
|
|
372 |
$self->excessive_fees |
373 |
; # excessive_fines is the same thing as excessive_fees for Koha |
332 |
} |
374 |
} |
333 |
|
375 |
|
334 |
sub library_name { |
376 |
sub library_name { |
335 |
my $self = shift; |
377 |
my $self = shift; |
336 |
unless ($self->{library_name}) { |
378 |
unless ( $self->{library_name} ) { |
337 |
$self->{library_name} = GetBranchName($self->{branchcode}); |
379 |
$self->{library_name} = GetBranchName( $self->{branchcode} ); |
338 |
} |
380 |
} |
339 |
return $self->{library_name}; |
381 |
return $self->{library_name}; |
340 |
} |
382 |
} |
|
|
383 |
|
341 |
# |
384 |
# |
342 |
# Messages |
385 |
# Messages |
343 |
# |
386 |
# |