use C4::Overdues;
use C4::Reserves;
use C4::Accounts;
+use C4::Biblio;
our ($VERSION,@ISA,@EXPORT,@EXPORT_OK,$debug);
my $query;
my $sth;
if ($borrowernumber) {
- $sth = $dbh->prepare("select borrowers.*,category_type from borrowers left join categories on borrowers.categorycode=categories.categorycode where borrowernumber=?");
+ $sth = $dbh->prepare("select borrowers.*,category_type,categories.description from borrowers left join categories on borrowers.categorycode=categories.categorycode where borrowernumber=?");
$sth->execute($borrowernumber);
}
elsif ($cardnumber) {
- $sth = $dbh->prepare("select borrowers.*,category_type from borrowers left join categories on borrowers.categorycode=categories.categorycode where cardnumber=?");
+ $sth = $dbh->prepare("select borrowers.*,category_type,categories.description from borrowers left join categories on borrowers.categorycode=categories.categorycode where cardnumber=?");
$sth->execute($cardnumber);
}
else {
FROM borrowers
LEFT JOIN categories on borrowers.categorycode=categories.categorycode
";
- if ( defined $type && ( $type eq 'cardnumber' || $type eq 'firstname'|| $type eq 'userid'|| $type eq 'borrowernumber' ) ){
+ if (defined($type) and ( $type eq 'cardnumber' || $type eq 'firstname'|| $type eq 'userid'|| $type eq 'borrowernumber' ) ){
$information = uc $information;
$sth = $dbh->prepare("$select WHERE $type=?");
} else {
}
$sth->execute($information);
my $data = $sth->fetchrow_hashref;
- $sth->finish;
($data) and return ($data);
- if ($type eq 'cardnumber' || $type eq 'firstname') { # otherwise, try with firstname
+ if (defined($type) and ($type eq 'cardnumber' || $type eq 'firstname')) { # otherwise, try with firstname
$sth = $dbh->prepare("$select WHERE firstname like ?");
$sth->execute($information);
$data = $sth->fetchrow_hashref;
- $sth->finish;
($data) and return ($data);
}
return undef;
return ($overdue_count, $issue_count, $total_fines);
}
+sub columns(;$) {
+ return @{C4::Context->dbh->selectcol_arrayref("SHOW columns from borrowers")};
+}
+
=head2
=head2 ModMember
=cut
-#'
sub ModMember {
my (%data) = @_;
my $dbh = C4::Context->dbh;
if (my $tempdate = $data{$_}) { # assignment, not comparison
($tempdate =~ /$iso_re/) and next; # Congatulations, you sent a valid ISO date.
warn "ModMember given $_ not in ISO format ($tempdate)";
- if (my $tempdate2 = format_date_in_iso($tempdate)) { # assignment, not comparison
- $data{$_} = $tempdate2;
- } else {
- warn "ModMember cannot convert '$tempdate' (from syspref)";
+ my $tempdate2 = format_date_in_iso($tempdate);
+ if (!$tempdate2 or $tempdate2 eq '0000-00-00') {
+ warn "ModMember cannot convert '$tempdate' (from syspref to ISO)";
+ next;
}
+ $data{$_} = $tempdate2;
}
}
if (!$data{'dateofbirth'}){
- undef $data{'dateofbirth'};
- }
- my $qborrower=$dbh->prepare("SHOW columns from borrowers");
- $qborrower->execute;
- my %hashborrowerfields;
- while (my ($field)=$qborrower->fetchrow){
- $hashborrowerfields{$field}=1;
- }
+ delete $data{'dateofbirth'};
+ }
+ my @columns = &columns;
+ my %hashborrowerfields = (map {$_=>1} @columns);
my $query = "UPDATE borrowers SET \n";
my $sth;
my @parameters;
# test to know if you must update or not the borrower password
- if ( $data{'password'} eq '****' ) {
- delete $data{'password'};
- } else {
- $data{'password'} = md5_base64( $data{'password'} ) if ($data{'password'} ne "");
- delete $data{'password'} if ($data{password} eq "");
+ if (exists $data{password}) {
+ if ($data{password} eq '****' or $data{password} eq '') {
+ delete $data{password};
+ } else {
+ $data{password} = md5_base64($data{password});
+ }
}
- foreach (keys %data){
- if ($_ ne 'borrowernumber' and $_ ne 'flags' and $hashborrowerfields{$_}){
- $query .= " $_=?, ";
- push @parameters,$data{$_};
+ my @badkeys;
+ foreach (keys %data) {
+ next if ($_ eq 'borrowernumber' or $_ eq 'flags');
+ if ($hashborrowerfields{$_}){
+ $query .= " $_=?, ";
+ push @parameters,$data{$_};
+ } else {
+ push @badkeys, $_;
+ delete $data{$_};
}
}
+ (@badkeys) and warn scalar(@badkeys) . " Illegal key(s) passed to ModMember: " . join(',',@badkeys);
$query =~ s/, $//;
$query .= " WHERE borrowernumber=?";
push @parameters, $data{'borrowernumber'};
# so when we update information for an adult we should check for guarantees and update the relevant part
# of their records, ie addresses and phone numbers
my $borrowercategory= GetBorrowercategory( $data{'category_type'} );
- if ( $borrowercategory->{'category_type'} eq ('A' || 'S') ) {
+ if ( exists $borrowercategory->{'category_type'} && $borrowercategory->{'category_type'} eq ('A' || 'S') ) {
# is adult check guarantees;
UpdateGuarantees(%data);
}
$sth = $dbh->prepare("SELECT enrolmentfee FROM categories WHERE categorycode=?");
$sth->execute($data{'categorycode'});
my ($enrolmentfee) = $sth->fetchrow;
- if ($enrolmentfee) {
+ if ($enrolmentfee && $enrolmentfee > 0) {
# insert fee in patron debts
manualinvoice($data{'borrowernumber'}, '', '', 'A', $enrolmentfee);
}
my $dbh = C4::Context->dbh;
my $sth = $dbh->prepare(
- "SELECT * FROM issues
+ "SELECT *,issues.timestamp as timestamp FROM issues
LEFT JOIN items ON issues.itemnumber=items.itemnumber
LEFT JOIN biblio ON items.biblionumber=biblio.biblionumber
LEFT JOIN biblioitems ON items.biblioitemnumber=biblioitems.biblioitemnumber
my $dbh = C4::Context->dbh;
my $count = 0;
my $query =
- "SELECT *,items.timestamp AS itemstimestamp
+ "SELECT *,issues.renewals AS renewals,items.renewals AS totalrenewals,items.timestamp AS itemstimestamp
FROM issues
LEFT JOIN items on items.itemnumber=issues.itemnumber
LEFT JOIN biblio ON items.biblionumber=biblio.biblionumber
LEFT JOIN biblioitems ON items.biblioitemnumber=biblioitems.biblioitemnumber
WHERE borrowernumber=?
UNION ALL
- SELECT *,items.timestamp AS itemstimestamp
+ SELECT *,old_issues.renewals AS renewals,items.renewals AS totalrenewals,items.timestamp AS itemstimestamp
FROM old_issues
LEFT JOIN items on items.itemnumber=old_issues.itemnumber
LEFT JOIN biblio ON items.biblionumber=biblio.biblionumber
$sth->execute( @bind );
my $total = 0;
while ( my $data = $sth->fetchrow_hashref ) {
+ my $biblio = GetBiblioFromItemNumber($data->{itemnumber}) if $data->{itemnumber};
+ $data->{biblionumber} = $biblio->{biblionumber};
$acctlines[$numlines] = $data;
$numlines++;
$total += $data->{'amountoutstanding'};
my ($cardnumber) = @_;
warn "Cardnumber passed to GetPatronImage is $cardnumber" if $debug;
my $dbh = C4::Context->dbh;
- my $query = "SELECT mimetype, imagefile FROM patronimage WHERE cardnumber = ?;";
+ my $query = 'SELECT mimetype, imagefile FROM patronimage WHERE cardnumber = ?';
my $sth = $dbh->prepare($query);
$sth->execute($cardnumber);
my $imagedata = $sth->fetchrow_hashref;