push @EXPORT, qw(
&GetMember
- &GetMemberIssuesAndFines
&GetPendingIssues
&GetAllIssues
&GetBorNotifyAcctRecord
&GetBorrowersToExpunge
- &GetBorrowersWhoHaveNeverBorrowed
- &GetBorrowersWithIssuesHistoryOlderThan
-
- &GetUpcomingMembershipExpires
&IssueSlip
GetBorrowersWithEmail
#Insert data
push @EXPORT, qw(
&AddMember
+ &AddMember_Auto
&AddMember_Opac
);
return;
}
-=head2 GetMemberIssuesAndFines
-
- ($overdue_count, $issue_count, $total_fines) = &GetMemberIssuesAndFines($borrowernumber);
-
-Returns aggregate data about items borrowed by the patron with the
-given borrowernumber.
-
-C<&GetMemberIssuesAndFines> returns a three-element array. C<$overdue_count> is the
-number of overdue items the patron currently has borrowed. C<$issue_count> is the
-number of books the patron currently has borrowed. C<$total_fines> is
-the total fine currently due by the borrower.
-
-=cut
-
-#'
-sub GetMemberIssuesAndFines {
- my ( $borrowernumber ) = @_;
- my $dbh = C4::Context->dbh;
- my $query = "SELECT COUNT(*) FROM issues WHERE borrowernumber = ?";
-
- $debug and warn $query."\n";
- my $sth = $dbh->prepare($query);
- $sth->execute($borrowernumber);
- my $issue_count = $sth->fetchrow_arrayref->[0];
-
- $sth = $dbh->prepare(
- "SELECT COUNT(*) FROM issues
- WHERE borrowernumber = ?
- AND date_due < now()"
- );
- $sth->execute($borrowernumber);
- my $overdue_count = $sth->fetchrow_arrayref->[0];
-
- $sth = $dbh->prepare("SELECT SUM(amountoutstanding) FROM accountlines WHERE borrowernumber = ?");
- $sth->execute($borrowernumber);
- my $total_fines = $sth->fetchrow_arrayref->[0];
-
- return ($overdue_count, $issue_count, $total_fines);
-}
-
-
=head2 ModMember
my $success = ModMember(borrowernumber => $borrowernumber,
sub ModMember {
my (%data) = @_;
+
+ # trim whitespace from data which has some non-whitespace in it.
+ foreach my $field_name (keys(%data)) {
+ if ( defined $data{$field_name} && $data{$field_name} =~ /\S/ ) {
+ $data{$field_name} =~ s/^\s*|\s*$//g;
+ }
+ }
+
# test to know if you must update or not the borrower password
if (exists $data{password}) {
if ($data{password} eq '****' or $data{password} eq '') {
my $dbh = C4::Context->dbh;
my $schema = Koha::Database->new()->schema;
+ # trim whitespace from data which has some non-whitespace in it.
+ foreach my $field_name (keys(%data)) {
+ if ( defined $data{$field_name} && $data{$field_name} =~ /\S/ ) {
+ $data{$field_name} =~ s/^\s*|\s*$//g;
+ }
+ }
+
# generate a proper login if none provided
$data{'userid'} = Generate_Userid( $data{'borrowernumber'}, $data{'firstname'}, $data{'surname'} )
if ( $data{'userid'} eq '' || !Check_Userid( $data{'userid'} ) );
$data{'dateenrolled'} = output_pref( { dt => dt_from_string, dateonly => 1, dateformat => 'iso' } );
}
+ if ( C4::Context->preference("autoMemberNum") ) {
+ if ( not exists $data{cardnumber} or not defined $data{cardnumber} or $data{cardnumber} eq '' ) {
+ $data{cardnumber} = fixup_cardnumber( $data{cardnumber} );
+ }
+ }
+
my $patron_category = $schema->resultset('Category')->find( $data{'categorycode'} );
$data{'privacy'} =
$patron_category->default_privacy() eq 'default' ? 1
$data{'dateofbirth'} = undef if ( not $data{'dateofbirth'} );
$data{'debarred'} = undef if ( not $data{'debarred'} );
$data{'sms_provider_id'} = undef if ( not $data{'sms_provider_id'} );
+ $data{'guarantorid'} = undef if ( not $data{'guarantorid'} );
# get only the columns of Borrower
# FIXME Do we really need this check?
C<&GetPendingIssues> returns a
reference-to-array where each element is a reference-to-hash; the
keys are the fields from the C<issues>, C<biblio>, and C<items> tables.
-The keys include C<biblioitems> fields except marc and marcxml.
+The keys include C<biblioitems> fields.
=cut
}
}
- # must avoid biblioitems.* to prevent large marc and marcxml fields from killing performance
# FIXME: namespace collision: each table has "timestamp" fields. Which one is "timestamp" ?
# FIXME: circ/ciculation.pl tries to sort by timestamp!
# FIXME: namespace collision: other collisions possible.
sub GetFirstValidEmailAddress {
my $borrowernumber = shift;
- my $dbh = C4::Context->dbh;
- my $sth = $dbh->prepare( "SELECT email, emailpro, B_email FROM borrowers where borrowernumber = ? ");
- $sth->execute( $borrowernumber );
- my $data = $sth->fetchrow_hashref;
- if ($data->{'email'}) {
- return $data->{'email'};
- } elsif ($data->{'emailpro'}) {
- return $data->{'emailpro'};
- } elsif ($data->{'B_email'}) {
- return $data->{'B_email'};
- } else {
- return '';
- }
+ my $borrower = Koha::Patrons->find( $borrowernumber );
+
+ return $borrower->first_valid_email_address();
}
=head2 GetNoticeEmailAddress
return $data->{'primaryemail'} || '';
}
-=head2 GetUpcomingMembershipExpires
-
- my $expires = GetUpcomingMembershipExpires({
- branch => $branch, before => $before, after => $after,
- });
-
- $branch is an optional branch code.
- $before/$after is an optional number of days before/after the date that
- is set by the preference MembershipExpiryDaysNotice.
- If the pref would be 14, before 2 and after 3, you will get all expires
- from 12 to 17 days.
-
-=cut
-
-sub GetUpcomingMembershipExpires {
- my ( $params ) = @_;
- my $before = $params->{before} || 0;
- my $after = $params->{after} || 0;
- my $branch = $params->{branch};
-
- my $dbh = C4::Context->dbh;
- my $days = C4::Context->preference("MembershipExpiryDaysNotice") || 0;
- my $date1 = dt_from_string->add( days => $days - $before );
- my $date2 = dt_from_string->add( days => $days + $after );
- $date1= output_pref({ dt => $date1, dateformat => 'iso', dateonly => 1 });
- $date2= output_pref({ dt => $date2, dateformat => 'iso', dateonly => 1 });
-
- my $query = q|
- SELECT borrowers.*, categories.description,
- branches.branchname, branches.branchemail FROM borrowers
- LEFT JOIN branches USING (branchcode)
- LEFT JOIN categories USING (categorycode)
- |;
- if( $branch ) {
- $query.= 'WHERE branchcode=? AND dateexpiry BETWEEN ? AND ?';
- } else {
- $query.= 'WHERE dateexpiry BETWEEN ? AND ?';
- }
-
- my $sth = $dbh->prepare( $query );
- my @pars = $branch? ( $branch ): ();
- push @pars, $date1, $date2;
- $sth->execute( @pars );
- my $results = $sth->fetchall_arrayref( {} );
- return $results;
-}
-
=head2 GetBorrowersToExpunge
$borrowers = &GetBorrowersToExpunge(
return \@results;
}
-=head2 GetBorrowersWhoHaveNeverBorrowed
-
- $results = &GetBorrowersWhoHaveNeverBorrowed
-
-This function get all borrowers who have never borrowed.
-
-I<$result> is a ref to an array which all elements are a hasref.
-
-=cut
-
-sub GetBorrowersWhoHaveNeverBorrowed {
- my $filterbranch = shift ||
- ((C4::Context->preference('IndependentBranches')
- && C4::Context->userenv
- && !C4::Context->IsSuperLibrarian()
- && C4::Context->userenv->{branch})
- ? C4::Context->userenv->{branch}
- : "");
- my $dbh = C4::Context->dbh;
- my $query = "
- SELECT borrowers.borrowernumber,max(timestamp) as latestissue
- FROM borrowers
- LEFT JOIN issues ON borrowers.borrowernumber = issues.borrowernumber
- WHERE issues.borrowernumber IS NULL
- ";
- my @query_params;
- if ($filterbranch && $filterbranch ne ""){
- $query.=" AND borrowers.branchcode= ?";
- push @query_params,$filterbranch;
- }
- warn $query if $debug;
-
- my $sth = $dbh->prepare($query);
- if (scalar(@query_params)>0){
- $sth->execute(@query_params);
- }
- else {
- $sth->execute;
- }
-
- my @results;
- while ( my $data = $sth->fetchrow_hashref ) {
- push @results, $data;
- }
- return \@results;
-}
-
-=head2 GetBorrowersWithIssuesHistoryOlderThan
-
- $results = &GetBorrowersWithIssuesHistoryOlderThan($date)
-
-this function get all borrowers who has an issue history older than I<$date> given on input arg.
-
-I<$result> is a ref to an array which all elements are a hashref.
-This hashref is containt the number of time this borrowers has borrowed before I<$date> and the borrowernumber.
-
-=cut
-
-sub GetBorrowersWithIssuesHistoryOlderThan {
- my $dbh = C4::Context->dbh;
- my $date = shift ||POSIX::strftime("%Y-%m-%d",localtime());
- my $filterbranch = shift ||
- ((C4::Context->preference('IndependentBranches')
- && C4::Context->userenv
- && !C4::Context->IsSuperLibrarian()
- && C4::Context->userenv->{branch})
- ? C4::Context->userenv->{branch}
- : "");
- my $query = "
- SELECT count(borrowernumber) as n,borrowernumber
- FROM old_issues
- WHERE returndate < ?
- AND borrowernumber IS NOT NULL
- ";
- my @query_params;
- push @query_params, $date;
- if ($filterbranch){
- $query.=" AND branchcode = ?";
- push @query_params, $filterbranch;
- }
- $query.=" GROUP BY borrowernumber ";
- warn $query if $debug;
- my $sth = $dbh->prepare($query);
- $sth->execute(@query_params);
- my @results;
-
- while ( my $data = $sth->fetchrow_hashref ) {
- push @results, $data;
- }
- return \@results;
-}
-
=head2 IssueSlip
IssueSlip($branchcode, $borrowernumber, $quickslip)
return @result;
}
+=head2 AddMember_Auto
+
+=cut
+
+sub AddMember_Auto {
+ my ( %borrower ) = @_;
+
+ $borrower{'cardnumber'} ||= fixup_cardnumber();
+
+ $borrower{'borrowernumber'} = AddMember(%borrower);
+
+ return ( %borrower );
+}
+
=head2 AddMember_Opac
=cut
$borrower{'password'} = $password;
}
- $borrower{'cardnumber'} = fixup_cardnumber( $borrower{'cardnumber'} );
-
- my $borrowernumber = AddMember(%borrower);
+ %borrower = AddMember_Auto(%borrower);
- return ( $borrowernumber, $borrower{'password'} );
+ return ( $borrower{'borrowernumber'}, $borrower{'password'} );
}
=head2 DeleteExpiredOpacRegistrations