View | Details | Raw Unified | Return to bug 8182
Collapse All | Expand All

(-)a/C4/SIP/ILS/Patron.pm (-172 / +215 lines)
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
#
(-)a/installer/data/mysql/updatedatabase.pl (-1 / +1 lines)
Lines 5018-5023 if (C4::Context->preference("Version") < TransformToNum($DBversion)) { Link Here
5018
$DBversion = "3.07.00.035";
5018
$DBversion = "3.07.00.035";
5019
if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5019
if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5020
    $dbh->do("ALTER TABLE issues CHANGE date_due date_due datetime");
5020
    $dbh->do("ALTER TABLE issues CHANGE date_due date_due datetime");
5021
    $dhb->do("UPDATE issues SET date_due = CONCAT(SUBSTR(date_due,1,11),'23:59:00')");
5021
    $dbh->do("ALTER TABLE issues CHANGE returndate returndate datetime");
5022
    $dbh->do("ALTER TABLE issues CHANGE returndate returndate datetime");
5022
    $dbh->do("ALTER TABLE issues CHANGE lastreneweddate lastreneweddate datetime");
5023
    $dbh->do("ALTER TABLE issues CHANGE lastreneweddate lastreneweddate datetime");
5023
    $dbh->do("ALTER TABLE issues CHANGE issuedate issuedate datetime");
5024
    $dbh->do("ALTER TABLE issues CHANGE issuedate issuedate datetime");
5024
- 

Return to bug 8182