use strict;
-require Exporter;
use C4::Context;
-use C4::Date;
+use C4::Dates qw(format_date_in_iso);
use Digest::MD5 qw(md5_base64);
use Date::Calc qw/Today Add_Delta_YM/;
use C4::Log; # logaction
our ($VERSION,@ISA,@EXPORT,@EXPORT_OK,$debug);
BEGIN {
- $VERSION = 3.01;
+ $VERSION = 3.02;
$debug = $ENV{DEBUG} || 0;
+ require Exporter;
+ @ISA = qw(Exporter);
+ #Get data
+ push @EXPORT, qw(
+ &SearchMember
+ &GetMemberDetails
+ &GetMember
+
+ &GetGuarantees
+
+ &GetMemberIssuesAndFines
+ &GetPendingIssues
+ &GetAllIssues
+
+ &get_institutions
+ &getzipnamecity
+ &getidcity
+
+ &GetAge
+ &GetCities
+ &GetRoadTypes
+ &GetRoadTypeDetails
+ &GetSortDetails
+ &GetTitles
+
+ &GetMemberAccountRecords
+ &GetBorNotifyAcctRecord
+
+ &GetborCatFromCatType
+ &GetBorrowercategory
+
+ &GetBorrowersWhoHaveNotBorrowedSince
+ &GetBorrowersWhoHaveNeverBorrowed
+ &GetBorrowersWithIssuesHistoryOlderThan
+
+ &GetExpiryDate
+ );
+
+ #Modify data
+ push @EXPORT, qw(
+ &ModMember
+ &changepassword
+ );
+
+ #Delete data
+ push @EXPORT, qw(
+ &DelMember
+ );
+
+ #Insert data
+ push @EXPORT, qw(
+ &AddMember
+ &add_member_orgs
+ &MoveMemberToDeleted
+ &ExtendMemberSubscriptionTo
+ );
+
+ #Check data
+ push @EXPORT, qw(
+ &checkuniquemember
+ &checkuserpassword
+ &Check_Userid
+ &fixEthnicity
+ ðnicitycategories
+ &fixup_cardnumber
+ &checkcardnumber
+ );
}
=head1 NAME
=over 2
-=cut
-
-@ISA = qw(Exporter);
-
-#Get data
-push @EXPORT, qw(
- &SearchMember
- &GetMemberDetails
- &GetMember
-
- &GetGuarantees
-
- &GetMemberIssuesAndFines
- &GetPendingIssues
- &GetAllIssues
-
- &get_institutions
- &getzipnamecity
- &getidcity
-
- &GetAge
- &GetCities
- &GetRoadTypes
- &GetRoadTypeDetails
- &GetSortDetails
- &GetTitles
-
- &GetMemberAccountRecords
- &GetBorNotifyAcctRecord
-
- &GetborCatFromCatType
- &GetBorrowercategory
-
-
- &GetBorrowersWhoHaveNotBorrowedSince
- &GetBorrowersWhoHaveNeverBorrowed
- &GetBorrowersWithIssuesHistoryOlderThan
-
- &GetExpiryDate
-);
-
-#Modify data
-push @EXPORT, qw(
- &ModMember
- &changepassword
-);
-
-#Delete data
-push @EXPORT, qw(
- &DelMember
-);
-
-#Insert data
-push @EXPORT, qw(
- &AddMember
- &add_member_orgs
- &MoveMemberToDeleted
- &ExtendMemberSubscriptionTo
-);
-
-#Check data
-push @EXPORT, qw(
- &checkuniquemember
- &checkuserpassword
- &Check_Userid
- &fixEthnicity
- ðnicitycategories
- &fixup_cardnumber
- &checkcardnumber
-);
-
=item SearchMember
($count, $borrowers) = &SearchMember($searchstring, $type,$category_type,$filter,$showallbranches);
#used by member enquiries from the intranet
#called by member.pl and circ/circulation.pl
sub SearchMember {
- my ($searchstring, $orderby, $type,$category_type,$filter,$showallbranches ) = @_;
- my $dbh = C4::Context->dbh;
- my $query = "";
- my $count;
- my @data;
- my @bind = ();
-
- # this is used by circulation everytime a new borrowers cardnumber is scanned
- # so we can check an exact match first, if that works return, otherwise do the rest
- $query = "SELECT * FROM borrowers
- LEFT JOIN categories ON borrowers.categorycode=categories.categorycode
- ";
- my $sth = $dbh->prepare("$query WHERE cardnumber = ?");
- $sth->execute($searchstring);
- my $data = $sth->fetchall_arrayref({});
- if (@$data){
- return ( scalar(@$data), $data );
- }
+ my ($searchstring, $orderby, $type,$category_type,$filter,$showallbranches ) = @_;
+ my $dbh = C4::Context->dbh;
+ my $query = "";
+ my $count;
+ my @data;
+ my @bind = ();
+
+ # this is used by circulation everytime a new borrowers cardnumber is scanned
+ # so we can check an exact match first, if that works return, otherwise do the rest
+ $query = "SELECT * FROM borrowers
+ LEFT JOIN categories ON borrowers.categorycode=categories.categorycode
+ ";
+ my $sth = $dbh->prepare("$query WHERE cardnumber = ?");
+ $sth->execute($searchstring);
+ my $data = $sth->fetchall_arrayref({});
+ if (@$data){
+ return ( scalar(@$data), $data );
+ }
$sth->finish;
if ( $type eq "simple" ) # simple search for one letter only
if (C4::Context->userenv && C4::Context->userenv->{flags}!=1 && C4::Context->userenv->{'branch'}){
$query.=" borrowers.branchcode =".$dbh->quote(C4::Context->userenv->{'branch'})." AND " unless (C4::Context->userenv->{'branch'} eq "insecure");
}
- }
- $query.="((surname LIKE ? OR surname LIKE ?
- OR firstname LIKE ? OR firstname LIKE ?
- OR othernames LIKE ? OR othernames LIKE ?)
- " .
- ($category_type?" AND category_type = ".$dbh->quote($category_type):"");
- @bind = (
- "$data[0]%", "% $data[0]%", "$data[0]%", "% $data[0]%",
- "$data[0]%", "% $data[0]%"
- );
- for ( my $i = 1 ; $i < $count ; $i++ ) {
- $query = $query . " AND (" . " surname LIKE ? OR surname LIKE ?
- OR firstname LIKE ? OR firstname LIKE ?
- OR othernames LIKE ? OR othernames LIKE ?)";
- push( @bind,
- "$data[$i]%", "% $data[$i]%", "$data[$i]%",
- "% $data[$i]%", "$data[$i]%", "% $data[$i]%" );
-
- # FIXME - .= <<EOT;
- }
- $query = $query . ") OR cardnumber LIKE ?
- order by $orderby";
- push( @bind, $searchstring );
-
- # FIXME - .= <<EOT;
+ }
+ $query.="((surname LIKE ? OR surname LIKE ?
+ OR firstname LIKE ? OR firstname LIKE ?
+ OR othernames LIKE ? OR othernames LIKE ?)
+ " .
+ ($category_type?" AND category_type = ".$dbh->quote($category_type):"");
+ @bind = (
+ "$data[0]%", "% $data[0]%", "$data[0]%", "% $data[0]%",
+ "$data[0]%", "% $data[0]%"
+ );
+ for ( my $i = 1 ; $i < $count ; $i++ ) {
+ $query = $query . " AND (" . " surname LIKE ? OR surname LIKE ?
+ OR firstname LIKE ? OR firstname LIKE ?
+ OR othernames LIKE ? OR othernames LIKE ?)";
+ push( @bind,
+ "$data[$i]%", "% $data[$i]%", "$data[$i]%",
+ "% $data[$i]%", "$data[$i]%", "% $data[$i]%" );
+
+ # FIXME - .= <<EOT;
+ }
+ $query = $query . ") OR cardnumber LIKE ?
+ order by $orderby";
+ push( @bind, $searchstring );
+
+ # FIXME - .= <<EOT;
}
$sth = $dbh->prepare($query);
- $debug and print STDERR "Q $orderby : $query\n";
+ $debug and print STDERR "Q $orderby : $query\n";
$sth->execute(@bind);
my @results;
$data = $sth->fetchall_arrayref({});
my $borrower = $sth->fetchrow_hashref;
my ($amount) = GetMemberAccountRecords( $borrowernumber);
$borrower->{'amountoutstanding'} = $amount;
- # FIXME - patronflags calls GetMemberAccountRecords... just have patronflags return $amount
+ # FIXME - patronflags calls GetMemberAccountRecords... just have patronflags return $amount
my $flags = patronflags( $borrower);
my $accessflagshash;
my %flaginfo;
my $noissuescharge = C4::Context->preference("noissuescharge");
$flaginfo{'message'} = sprintf "Patron owes \$%.02f", $amount;
- $flaginfo{'amount'} = sprintf "%.02f",$amount;
+ $flaginfo{'amount'} = sprintf "%.02f",$amount;
if ( $amount > $noissuescharge ) {
$flaginfo{'noissues'} = 1;
}
elsif ( $amount < 0 ) {
my %flaginfo;
$flaginfo{'message'} = sprintf "Patron has credit of \$%.02f", -$amount;
- $flags{'CHARGES'} = \%flaginfo;
+ $flags{'CREDITS'} = \%flaginfo;
}
if ( $patroninformation->{'gonenoaddress'}
&& $patroninformation->{'gonenoaddress'} == 1 )
my ( $information, $type ) = @_;
my $dbh = C4::Context->dbh;
my $sth;
- my $select = "
+ my $select = "
SELECT borrowers.*, categories.category_type, categories.description
FROM borrowers
LEFT JOIN categories on borrowers.categorycode=categories.categorycode
";
- if ($type eq 'cardnumber' || $type eq 'firstname'|| $type eq 'userid'|| $type eq 'borrowernumber'){
- $information = uc $information;
- $sth = $dbh->prepare("$select WHERE $type=?");
+ if ($type eq 'cardnumber' || $type eq 'firstname'|| $type eq 'userid'|| $type eq 'borrowernumber'){
+ $information = uc $information;
+ $sth = $dbh->prepare("$select WHERE $type=?");
} else {
- $sth = $dbh->prepare("$select WHERE borrowernumber=?");
- }
+ $sth = $dbh->prepare("$select WHERE borrowernumber=?");
+ }
$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
- $sth = $dbh->prepare("$select WHERE firstname like ?");
- $sth->execute($information);
- $data = $sth->fetchrow_hashref;
- $sth->finish;
- return ($data);
+ $sth = $dbh->prepare("$select WHERE firstname like ?");
+ $sth->execute($information);
+ $data = $sth->fetchrow_hashref;
+ $sth->finish;
+ return ($data);
}
- return undef;
+ return undef;
}
=item GetMemberIssuesAndFines
&ModMember($borrowernumber);
-Modify borrower's data
+Modify borrower's data. All date fields should ALREADY be in ISO format.
=cut
sub ModMember {
my (%data) = @_;
my $dbh = C4::Context->dbh;
- $data{'dateofbirth'} = format_date_in_iso( $data{'dateofbirth' } ) if ($data{'dateofbirth' } );
- $data{'dateexpiry'} = format_date_in_iso( $data{ 'dateexpiry' } ) if ($data{ 'dateexpiry' } );
- $data{'dateenrolled'} = format_date_in_iso( $data{'dateenrolled'} ) if ($data{'dateenrolled'} );
+ my $iso_re = C4::Dates->new()->regexp('iso');
+ foreach (qw(dateofbirth dateexpiry dateenrolled)) {
+ 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)";
+ }
+ }
+ }
+ if (!$data{'dateofbirth'}){
+ undef $data{'dateofbirth'};
+ }
my $qborrower=$dbh->prepare("SHOW columns from borrowers");
$qborrower->execute;
my %hashborrowerfields;
$data{'password'} = md5_base64( $data{'password'} ) if ($data{'password'} ne "");
delete $data{'password'} if ($data{password} eq "");
}
- foreach (keys %data)
- { push @parameters,"$_ = ".$dbh->quote($data{$_}) if ($_ ne 'borrowernumber' and $_ ne 'flags' and $hashborrowerfields{$_}); }
+ foreach (keys %data)
+ { push @parameters,"$_ = ".$dbh->quote($data{$_}) if ($_ ne 'borrowernumber' and $_ ne 'flags' and $hashborrowerfields{$_}); }
$query .= join (',',@parameters) . "\n WHERE borrowernumber=? \n";
- $debug and print STDERR "$query (executed w/ arg: $data{'borrowernumber'})";
- $sth = $dbh->prepare($query);
- $sth->execute($data{'borrowernumber'});
- $sth->finish;
+ $debug and print STDERR "$query (executed w/ arg: $data{'borrowernumber'})";
+ $sth = $dbh->prepare($query);
+ $sth->execute($data{'borrowernumber'});
+ $sth->finish;
# ok if its an adult (type) it may have borrowers that depend on it as a guarantor
# so when we update information for an adult we should check for guarantees and update the relevant part
my $dbh = C4::Context->dbh;
$data{'userid'} = '' unless $data{'password'};
$data{'password'} = md5_base64( $data{'password'} ) if $data{'password'};
- $data{'dateofbirth'} = format_date_in_iso( $data{'dateofbirth'} );
- $data{'dateenrolled'} = format_date_in_iso( $data{'dateenrolled'});
- $data{'dateexpiry'} = format_date_in_iso( $data{'dateexpiry'} );
- # This query should be rewritten to use "?" at execute.
+
+ # WE SHOULD NEVER PASS THIS SUBROUTINE ANYTHING OTHER THAN ISO DATES
+ # IF YOU UNCOMMENT THESE LINES YOU BETTER HAVE A DARN COMPELLING REASON
+# $data{'dateofbirth'} = format_date_in_iso( $data{'dateofbirth'} );
+# $data{'dateenrolled'} = format_date_in_iso( $data{'dateenrolled'});
+# $data{'dateexpiry'} = format_date_in_iso( $data{'dateexpiry'} );
+ # This query should be rewritten to use "?" at execute.
+ if (!$data{'dateofbirth'}){
+ undef ($data{'dateofbirth'});
+ }
my $query =
"insert into borrowers set cardnumber=" . $dbh->quote( $data{'cardnumber'} )
- . ",surname=" . $dbh->quote( $data{'surname'} )
- . ",firstname=" . $dbh->quote( $data{'firstname'} )
- . ",title=" . $dbh->quote( $data{'title'} )
- . ",othernames=" . $dbh->quote( $data{'othernames'} )
- . ",initials=" . $dbh->quote( $data{'initials'} )
+ . ",surname=" . $dbh->quote( $data{'surname'} )
+ . ",firstname=" . $dbh->quote( $data{'firstname'} )
+ . ",title=" . $dbh->quote( $data{'title'} )
+ . ",othernames=" . $dbh->quote( $data{'othernames'} )
+ . ",initials=" . $dbh->quote( $data{'initials'} )
. ",streetnumber=". $dbh->quote( $data{'streetnumber'} )
- . ",streettype=" . $dbh->quote( $data{'streettype'} )
- . ",address=" . $dbh->quote( $data{'address'} )
- . ",address2=" . $dbh->quote( $data{'address2'} )
- . ",zipcode=" . $dbh->quote( $data{'zipcode'} )
- . ",city=" . $dbh->quote( $data{'city'} )
- . ",phone=" . $dbh->quote( $data{'phone'} )
- . ",email=" . $dbh->quote( $data{'email'} )
- . ",mobile=" . $dbh->quote( $data{'mobile'} )
- . ",phonepro=" . $dbh->quote( $data{'phonepro'} )
- . ",opacnote=" . $dbh->quote( $data{'opacnote'} )
+ . ",streettype=" . $dbh->quote( $data{'streettype'} )
+ . ",address=" . $dbh->quote( $data{'address'} )
+ . ",address2=" . $dbh->quote( $data{'address2'} )
+ . ",zipcode=" . $dbh->quote( $data{'zipcode'} )
+ . ",city=" . $dbh->quote( $data{'city'} )
+ . ",phone=" . $dbh->quote( $data{'phone'} )
+ . ",email=" . $dbh->quote( $data{'email'} )
+ . ",mobile=" . $dbh->quote( $data{'mobile'} )
+ . ",phonepro=" . $dbh->quote( $data{'phonepro'} )
+ . ",opacnote=" . $dbh->quote( $data{'opacnote'} )
. ",guarantorid=" . $dbh->quote( $data{'guarantorid'} )
. ",dateofbirth=" . $dbh->quote( $data{'dateofbirth'} )
- . ",branchcode=" . $dbh->quote( $data{'branchcode'} )
+ . ",branchcode=" . $dbh->quote( $data{'branchcode'} )
. ",categorycode=" . $dbh->quote( $data{'categorycode'} )
. ",dateenrolled=" . $dbh->quote( $data{'dateenrolled'} )
. ",contactname=" . $dbh->quote( $data{'contactname'} )
. ",borrowernotes=" . $dbh->quote( $data{'borrowernotes'} )
- . ",dateexpiry=" . $dbh->quote( $data{'dateexpiry'} )
+ . ",dateexpiry=" . $dbh->quote( $data{'dateexpiry'} )
. ",contactnote=" . $dbh->quote( $data{'contactnote'} )
- . ",B_address=" . $dbh->quote( $data{'B_address'} )
- . ",B_zipcode=" . $dbh->quote( $data{'B_zipcode'} )
- . ",B_city=" . $dbh->quote( $data{'B_city'} )
- . ",B_phone=" . $dbh->quote( $data{'B_phone'} )
- . ",B_email=" . $dbh->quote( $data{'B_email'} )
- . ",password=" . $dbh->quote( $data{'password'} )
- . ",userid=" . $dbh->quote( $data{'userid'} )
- . ",sort1=" . $dbh->quote( $data{'sort1'} )
- . ",sort2=" . $dbh->quote( $data{'sort2'} )
+ . ",B_address=" . $dbh->quote( $data{'B_address'} )
+ . ",B_zipcode=" . $dbh->quote( $data{'B_zipcode'} )
+ . ",B_city=" . $dbh->quote( $data{'B_city'} )
+ . ",B_phone=" . $dbh->quote( $data{'B_phone'} )
+ . ",B_email=" . $dbh->quote( $data{'B_email'} )
+ . ",password=" . $dbh->quote( $data{'password'} )
+ . ",userid=" . $dbh->quote( $data{'userid'} )
+ . ",sort1=" . $dbh->quote( $data{'sort1'} )
+ . ",sort2=" . $dbh->quote( $data{'sort2'} )
. ",contacttitle=" . $dbh->quote( $data{'contacttitle'} )
- . ",emailpro=" . $dbh->quote( $data{'emailpro'} )
+ . ",emailpro=" . $dbh->quote( $data{'emailpro'} )
. ",contactfirstname=" . $dbh->quote( $data{'contactfirstname'} )
- . ",sex=" . $dbh->quote( $data{'sex'} )
- . ",fax=" . $dbh->quote( $data{'fax'} )
+ . ",sex=" . $dbh->quote( $data{'sex'} )
+ . ",fax=" . $dbh->quote( $data{'fax'} )
. ",relationship=" . $dbh->quote( $data{'relationship'} )
. ",B_streetnumber=" . $dbh->quote( $data{'B_streetnumber'} )
. ",B_streettype=" . $dbh->quote( $data{'B_streettype'} )
. ",gonenoaddress=" . $dbh->quote( $data{'gonenoaddress'} )
- . ",lost=" . $dbh->quote( $data{'lost'} )
- . ",debarred=" . $dbh->quote( $data{'debarred'} )
- . ",ethnicity=" . $dbh->quote( $data{'ethnicity'} )
- . ",ethnotes=" . $dbh->quote( $data{'ethnotes'} );
+ . ",lost=" . $dbh->quote( $data{'lost'} )
+ . ",debarred=" . $dbh->quote( $data{'debarred'} )
+ . ",ethnicity=" . $dbh->quote( $data{'ethnicity'} )
+ . ",ethnotes=" . $dbh->quote( $data{'ethnotes'} )
+ . ",altcontactsurname=" . $dbh->quote( $data{'altcontactsurname'} )
+ . ",altcontactfirstname=" . $dbh->quote( $data{'altcontactfirstname'} )
+ . ",altcontactaddress1=" . $dbh->quote( $data{'altcontactaddress1'} )
+ . ",altcontactaddress2=" . $dbh->quote( $data{'altcontactaddress2'} )
+ . ",altcontactaddress3=" . $dbh->quote( $data{'altcontactaddress3'} )
+ . ",altcontactzipcode=" . $dbh->quote( $data{'altcontactzipcode'} )
+ . ",altcontactphone=" . $dbh->quote( $data{'altcontactphone'} ) ;
+ $debug and print STDERR "AddMember SQL: ($query)\n";
my $sth = $dbh->prepare($query);
-# print "Executing SQL: $query\n";
- $sth->execute;
+ # print "Executing SQL: $query\n";
+ $sth->execute();
$sth->finish;
- $data{'borrowernumber'} = $dbh->{'mysql_insertid'};
+ $data{'borrowernumber'} = $dbh->{'mysql_insertid'}; # unneeded w/ autoincrement ?
+ # mysql_insertid is probably bad. not necessarily accurate and mysql-specific at best.
&logaction(C4::Context->userenv->{'number'},"MEMBERS","CREATE",$data{'borrowernumber'},"")
if C4::Context->preference("BorrowersLog");
}
sub Check_Userid {
- my ($uid,$member) = @_;
- my $dbh = C4::Context->dbh;
+ my ($uid,$member) = @_;
+ my $dbh = C4::Context->dbh;
# Make sure the userid chosen is unique and not theirs if non-empty. If it is not,
# Then we need to tell the user and have them create a new one.
my $sth =
if ( ( $uid ne '' ) && ( my $row = $sth->fetchrow_hashref ) ) {
return 0;
}
- else {
- return 1;
- }
+ else {
+ return 1;
+ }
}
# the array, which is probably better done as a foreach loop.
#
my $guaquery = qq|UPDATE borrowers
- SET address='$data{'address'}',fax='$data{'fax'}',
- B_city='$data{'B_city'}',mobile='$data{'mobile'}',city='$data{'city'}',phone='$data{'phone'}'
- WHERE borrowernumber='$guarantees->[$i]->{'borrowernumber'}'
- |;
+ SET address='$data{'address'}',fax='$data{'fax'}',
+ B_city='$data{'B_city'}',mobile='$data{'mobile'}',city='$data{'city'}',phone='$data{'phone'}'
+ WHERE borrowernumber='$guarantees->[$i]->{'borrowernumber'}'
+ |;
my $sth3 = $dbh->prepare($guaquery);
$sth3->execute;
$sth3->finish;
FROM accountlines
WHERE borrowernumber=?
AND notify_id=?
- AND (accounttype='FU' OR accounttype='N' OR accounttype='M'OR accounttype='A'OR accounttype='F'OR accounttype='L' OR accounttype='IP' OR accounttype='CH' OR accounttype='RE' OR accounttype='RL')
AND amountoutstanding != '0'
ORDER BY notify_id,accounttype
");
+# AND (accounttype='FU' OR accounttype='N' OR accounttype='M'OR accounttype='A'OR accounttype='F'OR accounttype='L' OR accounttype='IP' OR accounttype='CH' OR accounttype='RE' OR accounttype='RL')
+
$sth->execute( $borrowernumber, $notifyid );
my $total = 0;
while ( my $data = $sth->fetchrow_hashref ) {
=head2 checkuniquemember (OUEST-PROVENCE)
- $result = &checkuniquemember($collectivity,$surname,$categorycode,$firstname,$dateofbirth);
+ ($result,$categorycode) = &checkuniquemember($collectivity,$surname,$firstname,$dateofbirth);
Checks that a member exists or not in the database.
-C<&result> is 1 (=exist) or 0 (=does not exist)
+C<&result> is nonzero (=exist) or 0 (=does not exist)
+C<&categorycode> is from categorycode table
C<&collectivity> is 1 (= we add a collectivity) or 0 (= we add a physical member)
C<&surname> is the surname
-C<&categorycode> is from categorycode table
C<&firstname> is the firstname (only if collectivity=0)
-C<&dateofbirth> is the date of birth (only if collectivity=0)
+C<&dateofbirth> is the date of birth in ISO format (only if collectivity=0)
=cut
+# FIXME: This function is not legitimate. Multiple patrons might have the same first/last name and birthdate.
+# This is especially true since first name is not even a required field.
+
sub checkuniquemember {
my ( $collectivity, $surname, $firstname, $dateofbirth ) = @_;
my $dbh = C4::Context->dbh;
- my $request;
- if ($collectivity) {
-
-# $request="select count(*) from borrowers where surname=? and categorycode=?";
- $request =
- "select borrowernumber,categorycode from borrowers where surname=? ";
- }
- else {
-
-# $request="select count(*) from borrowers where surname=? and categorycode=? and firstname=? and dateofbirth=?";
- $request =
-"select borrowernumber,categorycode from borrowers where surname=? and firstname=? and dateofbirth=?";
- }
+ my $request = ($collectivity) ?
+ "SELECT borrowernumber,categorycode FROM borrowers WHERE surname=? " :
+ "SELECT borrowernumber,categorycode FROM borrowers WHERE surname=? and firstname=? and dateofbirth=? ";
my $sth = $dbh->prepare($request);
if ($collectivity) {
$sth->execute( uc($surname) );
- }
- else {
+ } else {
$sth->execute( uc($surname), ucfirst($firstname), $dateofbirth );
}
my @data = $sth->fetchrow;
- if ( $data[0] ) {
- $sth->finish;
- return $data[0], $data[1];
-
- #
- }
- else {
- $sth->finish;
- return 0;
- }
+ $sth->finish;
+ ( $data[0] ) and return $data[0], $data[1];
+ return 0;
}
sub checkcardnumber {
- my ($cardnumber,$borrowernumber) = @_;
- my $dbh = C4::Context->dbh;
- my $query = "SELECT * FROM borrowers WHERE cardnumber=?";
- $query .= " AND borrowernumber <> ?" if ($borrowernumber);
+ my ($cardnumber,$borrowernumber) = @_;
+ my $dbh = C4::Context->dbh;
+ my $query = "SELECT * FROM borrowers WHERE cardnumber=?";
+ $query .= " AND borrowernumber <> ?" if ($borrowernumber);
my $sth = $dbh->prepare($query);
if ($borrowernumber) {
$sth->execute($cardnumber,$borrowernumber);
} else {
- $sth->execute($cardnumber);
+ $sth->execute($cardnumber);
}
- if (my $data= $sth->fetchrow_hashref()){
- return 1;
- }
- else {
- return 0;
- }
- $sth->finish();
+ if (my $data= $sth->fetchrow_hashref()){
+ return 1;
+ }
+ else {
+ return 0;
+ }
+ $sth->finish();
}
=head2 GetExpiryDate
$expirydate = GetExpiryDate($categorycode, $dateenrolled);
-process expiry date given a date and a categorycode
+
+Calculate expiry date given a categorycode and starting date. Date argument must be in ISO format.
+Return date is also in ISO format.
=cut
+
sub GetExpiryDate {
my ( $categorycode, $dateenrolled ) = @_;
- my $dbh = C4::Context->dbh;
- my $sth =
- $dbh->prepare(
- "select enrolmentperiod from categories where categorycode=?");
- $sth->execute($categorycode);
- my ($enrolmentperiod) = $sth->fetchrow;
- $enrolmentperiod = 12 unless ($enrolmentperiod);
- my @date=split /-/,format_date_in_iso($dateenrolled);
- @date=Add_Delta_YM($date[0],$date[1],$date[2],0,$enrolmentperiod);
- return sprintf("%04d-%02d-%02d",$date[0],$date[1],$date[2]);
+ my $enrolmentperiod = 12; # reasonable default
+ if ($categorycode) {
+ my $dbh = C4::Context->dbh;
+ my $sth = $dbh->prepare("select enrolmentperiod from categories where categorycode=?");
+ $sth->execute($categorycode);
+ $enrolmentperiod = $sth->fetchrow;
+ }
+ # die "GetExpiryDate: for enrollmentperiod $enrolmentperiod (category '$categorycode') starting $dateenrolled.\n";
+ my @date = split /-/,$dateenrolled;
+ return sprintf("%04d-%02d-%02d", Add_Delta_YM(@date,0,$enrolmentperiod));
}
=head2 checkuserpassword (OUEST-PROVENCE)
sub GetborCatFromCatType {
my ( $category_type, $action ) = @_;
my $dbh = C4::Context->dbh;
- my $request = qq| SELECT categorycode,description
- FROM categories
- $action
- ORDER BY categorycode|;
+ my $request = qq| SELECT categorycode,description
+ FROM categories
+ $action
+ ORDER BY categorycode|;
my $sth = $dbh->prepare($request);
if ($action) {
$sth->execute($category_type);
#my ($type_city) = @_;
my $dbh = C4::Context->dbh;
my $query = qq|SELECT cityid,city_zipcode,city_name
- FROM cities
- ORDER BY city_name|;
+ FROM cities
+ ORDER BY city_name|;
my $sth = $dbh->prepare($query);
#$sth->execute($type_city);
#test to know if the table contain some records if no the function return nothing
my $id = @id;
$sth->finish;
- if ( $id eq 0 ) {
+ if ( $id == 1 ) {
+ # all we have is the one blank row
return ();
}
else {
my ( $category, $sortvalue ) = @_;
my $dbh = C4::Context->dbh;
my $query = qq|SELECT lib
- FROM authorised_values
- WHERE category=?
- AND authorised_value=? |;
+ FROM authorised_values
+ WHERE category=?
+ AND authorised_value=? |;
my $sth = $dbh->prepare($query);
$sth->execute( $category, $sortvalue );
my $lib = $sth->fetchrow;
my $dbh = C4::Context->dbh;
my $query;
$query = qq|SELECT *
- FROM borrowers
- WHERE borrowernumber=?|;
+ FROM borrowers
+ WHERE borrowernumber=?|;
my $sth = $dbh->prepare($query);
$sth->execute($member);
my @data = $sth->fetchrow_array;
sub DelMember {
my $dbh = C4::Context->dbh;
my $borrowernumber = shift;
- warn "in delmember with $borrowernumber";
+ #warn "in delmember with $borrowernumber";
return unless $borrowernumber; # borrowernumber is mandatory.
my $query = qq|DELETE
- FROM reserves
- WHERE borrowernumber=?|;
+ FROM reserves
+ WHERE borrowernumber=?|;
my $sth = $dbh->prepare($query);
$sth->execute($borrowernumber);
$sth->finish;
=head2 ExtendMemberSubscriptionTo (OUEST-PROVENCE)
-$date= ExtendMemberSubscriptionTo($borrowerid, $date);
-Extending the subscription to a given date or to the expiry date calculated on local date.
-returns date
+ $date = ExtendMemberSubscriptionTo($borrowerid, $date);
+
+Extending the subscription to a given date or to the expiry date calculated on ISO date.
+Returns ISO date.
+
=cut
sub ExtendMemberSubscriptionTo {
my ( $borrowerid,$date) = @_;
my $dbh = C4::Context->dbh;
+ my $borrower = GetMember($borrowerid,'borrowernumber');
unless ($date){
- $date=POSIX::strftime("%Y-%m-%d",localtime(time));
+ $date=POSIX::strftime("%Y-%m-%d",localtime());
my $borrower = GetMember($borrowerid,'borrowernumber');
$date = GetExpiryDate( $borrower->{'categorycode'}, $date );
}
SET dateexpiry='$date'
WHERE borrowernumber='$borrowerid'
EOF
+ # add enrolmentfee if needed
+ $sth = $dbh->prepare("SELECT enrolmentfee FROM categories WHERE categorycode=?");
+ $sth->execute($borrower->{'categorycode'});
+ my ($enrolmentfee) = $sth->fetchrow;
+ if ($enrolmentfee) {
+ # insert fee in patron debts
+ manualinvoice($borrower->{'borrowernumber'}, '', '', 'A', $enrolmentfee);
+ }
return $date if ($sth);
return 0;
}
elements: a reference-to-array, which lists the id_roadtype
codes, and a reference-to-hash, which maps the road type of the road .
-
=cut
sub GetRoadTypes {
sub GetTitles {
my @borrowerTitle = split /,|\|/,C4::Context->preference('BorrowersTitles');
unshift( @borrowerTitle, "" );
- return ( \@borrowerTitle);
+ my $count=@borrowerTitle;
+ if ($count == 1){
+ return ();
}
+ else {
+ return ( \@borrowerTitle);
+ }
+}