X-Git-Url: http://koha-dev.rot13.org:8081/gitweb/?a=blobdiff_plain;f=C4%2FMembers.pm;h=eecb653fb9fe14d2bc8a2c42cbdc7d8410cd73c6;hb=b2c59c7ff248597aefc9043bc2aa4547938c82b5;hp=03f0b209e993b1837cd5adfbe853fdbe4b4fbbf6;hpb=e4e90ea0dae0b93978cf450d48a26f9da0be7587;p=srvgit diff --git a/C4/Members.pm b/C4/Members.pm index 03f0b209e9..eecb653fb9 100644 --- a/C4/Members.pm +++ b/C4/Members.pm @@ -59,7 +59,6 @@ BEGIN { @ISA = qw(Exporter); #Get data push @EXPORT, qw( - &Search &GetMemberDetails &GetMember @@ -71,16 +70,12 @@ BEGIN { &GetNoticeEmailAddress &GetAge - &GetSortDetails &GetHideLostItemsPreference - &IsMemberBlocked &GetMemberAccountRecords &GetBorNotifyAcctRecord - GetBorrowerCategorycode - &GetBorrowersToExpunge &GetBorrowersWhoHaveNeverBorrowed &GetBorrowersWithIssuesHistoryOlderThan @@ -90,7 +85,6 @@ BEGIN { &IssueSlip GetBorrowersWithEmail - HasOverdues GetOverduesForPatron ); @@ -100,16 +94,10 @@ BEGIN { &changepassword ); - #Delete data - push @EXPORT, qw( - &DelMember - ); - #Insert data push @EXPORT, qw( &AddMember &AddMember_Opac - &MoveMemberToDeleted ); #Check data @@ -462,49 +450,6 @@ sub GetMember { return; } -=head2 IsMemberBlocked - - my ($block_status, $count) = IsMemberBlocked( $borrowernumber ); - -Returns whether a patron is restricted or has overdue items that may result -in a block of circulation privileges. - -C<$block_status> can have the following values: - -1 if the patron is currently restricted, in which case -C<$count> is the expiration date (9999-12-31 for indefinite) - --1 if the patron has overdue items, in which case C<$count> is the number of them - -0 if the patron has no overdue items or outstanding fine days, in which case C<$count> is 0 - -Existing active restrictions are checked before current overdue items. - -=cut - -sub IsMemberBlocked { - my $borrowernumber = shift; - my $dbh = C4::Context->dbh; - - my $blockeddate = Koha::Patrons->find( $borrowernumber )->is_debarred; - - return ( 1, $blockeddate ) if $blockeddate; - - # if he have late issues - my $sth = $dbh->prepare( - "SELECT COUNT(*) as latedocs - FROM issues - WHERE borrowernumber = ? - AND date_due < now()" - ); - $sth->execute($borrowernumber); - my $latedocs = $sth->fetchrow_hashref->{'latedocs'}; - - return ( -1, $latedocs ) if $latedocs > 0; - - return ( 0, 0 ); -} - =head2 GetMemberIssuesAndFines ($overdue_count, $issue_count, $total_fines) = &GetMemberIssuesAndFines($borrowernumber); @@ -573,7 +518,7 @@ sub ModMember { } } - my $old_categorycode = GetBorrowerCategorycode( $data{borrowernumber} ); + my $old_categorycode = Koha::Patrons->find( $data{borrowernumber} )->categorycode; # get only the columns of a borrower my $schema = Koha::Database->new()->schema; @@ -586,19 +531,19 @@ sub ModMember { $new_borrower->{dateexpiry} ||= undef if exists $new_borrower->{dateexpiry}; $new_borrower->{debarred} ||= undef if exists $new_borrower->{debarred}; $new_borrower->{sms_provider_id} ||= undef if exists $new_borrower->{sms_provider_id}; + $new_borrower->{guarantorid} ||= undef if exists $new_borrower->{guarantorid}; - my $rs = $schema->resultset('Borrower')->search({ - borrowernumber => $new_borrower->{borrowernumber}, - }); + my $patron = Koha::Patrons->find( $new_borrower->{borrowernumber} ); delete $new_borrower->{userid} if exists $new_borrower->{userid} and not $new_borrower->{userid}; - my $execute_success = $rs->update($new_borrower); - if ($execute_success ne '0E0') { # only proceed if the update was a success + my $execute_success = $patron->store if $patron->set($new_borrower); + + if ($execute_success) { # only proceed if the update was a success # If the patron changes to a category with enrollment fee, we add a fee if ( $data{categorycode} and $data{categorycode} ne $old_categorycode ) { if ( C4::Context->preference('FeeOnChangePatronCategory') ) { - AddEnrolmentFeeIfNeeded( $data{categorycode}, $data{borrowernumber} ); + $patron->add_enrolment_fee_if_needed; } } @@ -681,13 +626,14 @@ sub AddMember { $data{'sms_provider_id'} = undef if ( not $data{'sms_provider_id'} ); # get only the columns of Borrower + # FIXME Do we really need this check? my @columns = $schema->source('Borrower')->columns; my $new_member = { map { join(' ',@columns) =~ /$_/ ? ( $_ => $data{$_} ) : () } keys(%data) } ; - $new_member->{checkprevcheckout} ||= 'inherit'; + delete $new_member->{borrowernumber}; - my $rs = $schema->resultset('Borrower'); - $data{borrowernumber} = $rs->create($new_member)->id; + my $patron = Koha::Patron->new( $new_member )->store; + $data{borrowernumber} = $patron->borrowernumber; # If NorwegianPatronDBEnable is enabled, we set syncstatus to something that a # cronjob will use for syncing with NL @@ -701,10 +647,9 @@ sub AddMember { }); } - # mysql_insertid is probably bad. not necessarily accurate and mysql-specific at best. logaction("MEMBERS", "CREATE", $data{'borrowernumber'}, "") if C4::Context->preference("BorrowersLog"); - AddEnrolmentFeeIfNeeded( $data{categorycode}, $data{borrowernumber} ); + $patron->add_enrolment_fee_if_needed; return $data{borrowernumber}; } @@ -1264,26 +1209,6 @@ sub GetUpcomingMembershipExpires { return $results; } -=head2 GetBorrowerCategorycode - - $categorycode = &GetBorrowerCategoryCode( $borrowernumber ); - -Given the borrowernumber, the function returns the corresponding categorycode - -=cut - -sub GetBorrowerCategorycode { - my ( $borrowernumber ) = @_; - my $dbh = C4::Context->dbh; - my $sth = $dbh->prepare( qq{ - SELECT categorycode - FROM borrowers - WHERE borrowernumber = ? - } ); - $sth->execute( $borrowernumber ); - return $sth->fetchrow; -} - =head2 GetAge $dateofbirth,$date = &GetAge($date); @@ -1354,117 +1279,6 @@ sub SetAge{ return $borrower; } # sub SetAge -=head2 GetSortDetails (OUEST-PROVENCE) - - ($lib) = &GetSortDetails($category,$sortvalue); - -Returns the authorized value details -C<&$lib>return value of authorized value details -C<&$sortvalue>this is the value of authorized value -C<&$category>this is the value of authorized value category - -=cut - -sub GetSortDetails { - my ( $category, $sortvalue ) = @_; - my $dbh = C4::Context->dbh; - my $query = qq|SELECT lib - FROM authorised_values - WHERE category=? - AND authorised_value=? |; - my $sth = $dbh->prepare($query); - $sth->execute( $category, $sortvalue ); - my $lib = $sth->fetchrow; - return ($lib) if ($lib); - return ($sortvalue) unless ($lib); -} - -=head2 MoveMemberToDeleted - - $result = &MoveMemberToDeleted($borrowernumber); - -Copy the record from borrowers to deletedborrowers table. -The routine returns 1 for success, undef for failure. - -=cut - -sub MoveMemberToDeleted { - my ($member) = shift or return; - - my $schema = Koha::Database->new()->schema(); - my $borrowers_rs = $schema->resultset('Borrower'); - $borrowers_rs->result_class('DBIx::Class::ResultClass::HashRefInflator'); - my $borrower = $borrowers_rs->find($member); - return unless $borrower; - - my $deleted = $schema->resultset('Deletedborrower')->create($borrower); - - return $deleted ? 1 : undef; -} - -=head2 DelMember - - DelMember($borrowernumber); - -This function remove directly a borrower whitout writing it on deleteborrower. -+ Deletes reserves for the borrower - -=cut - -sub DelMember { - my $dbh = C4::Context->dbh; - my $borrowernumber = shift; - #warn "in delmember with $borrowernumber"; - return unless $borrowernumber; # borrowernumber is mandatory. - # Delete Patron's holds - my @holds = Koha::Holds->search({ borrowernumber => $borrowernumber }); - $_->delete for @holds; - - my $query = " - DELETE - FROM borrowers - WHERE borrowernumber = ? - "; - my $sth = $dbh->prepare($query); - $sth->execute($borrowernumber); - logaction("MEMBERS", "DELETE", $borrowernumber, "") if C4::Context->preference("BorrowersLog"); - return $sth->rows; -} - -=head2 HandleDelBorrower - - HandleDelBorrower($borrower); - -When a member is deleted (DelMember in Members.pm), you should call me first. -This routine deletes/moves lists and entries for the deleted member/borrower. -Lists owned by the borrower are deleted, but entries from the borrower to -other lists are kept. - -=cut - -sub HandleDelBorrower { - my ($borrower)= @_; - my $query; - my $dbh = C4::Context->dbh; - - #Delete all lists and all shares of this borrower - #Consistent with the approach Koha uses on deleting individual lists - #Note that entries in virtualshelfcontents added by this borrower to - #lists of others will be handled by a table constraint: the borrower - #is set to NULL in those entries. - $query="DELETE FROM virtualshelves WHERE owner=?"; - $dbh->do($query,undef,($borrower)); - - #NOTE: - #We could handle the above deletes via a constraint too. - #But a new BZ report 11889 has been opened to discuss another approach. - #Instead of deleting we could also disown lists (based on a pref). - #In that way we could save shared and public lists. - #The current table constraints support that idea now. - #This pref should then govern the results of other routines/methods such as - #Koha::Virtualshelf->new->delete too. -} - =head2 GetHideLostItemsPreference $hidelostitemspref = &GetHideLostItemsPreference($borrowernumber); @@ -1503,6 +1317,7 @@ sub GetBorrowersToExpunge { my $params = shift; my $filterdate = $params->{'not_borrowed_since'}; my $filterexpiry = $params->{'expired_before'}; + my $filterlastseen = $params->{'last_seen'}; my $filtercategory = $params->{'category_code'}; my $filterbranch = $params->{'branchcode'} || ((C4::Context->preference('IndependentBranches') @@ -1543,6 +1358,10 @@ sub GetBorrowersToExpunge { $query .= " AND dateexpiry < ? "; push( @query_params, $filterexpiry ); } + if ( $filterlastseen ) { + $query .= ' AND lastseen < ? '; + push @query_params, $filterlastseen; + } if ( $filtercategory ) { $query .= " AND categorycode = ? "; push( @query_params, $filtercategory ); @@ -1836,50 +1655,6 @@ sub AddMember_Opac { return ( $borrowernumber, $borrower{'password'} ); } -=head2 AddEnrolmentFeeIfNeeded - - AddEnrolmentFeeIfNeeded( $borrower->{categorycode}, $borrower->{borrowernumber} ); - -Add enrolment fee for a patron if needed. - -=cut - -sub AddEnrolmentFeeIfNeeded { - my ( $categorycode, $borrowernumber ) = @_; - # check for enrollment fee & add it if needed - my $dbh = C4::Context->dbh; - my $sth = $dbh->prepare(q{ - SELECT enrolmentfee - FROM categories - WHERE categorycode=? - }); - $sth->execute( $categorycode ); - if ( $sth->err ) { - warn sprintf('Database returned the following error: %s', $sth->errstr); - return; - } - my ($enrolmentfee) = $sth->fetchrow; - if ($enrolmentfee && $enrolmentfee > 0) { - # insert fee in patron debts - C4::Accounts::manualinvoice( $borrowernumber, '', '', 'A', $enrolmentfee ); - } -} - -=head2 HasOverdues - -=cut - -sub HasOverdues { - my ( $borrowernumber ) = @_; - - my $sql = "SELECT COUNT(*) FROM issues WHERE date_due < NOW() AND borrowernumber = ?"; - my $sth = C4::Context->dbh->prepare( $sql ); - $sth->execute( $borrowernumber ); - my ( $count ) = $sth->fetchrow_array(); - - return $count; -} - =head2 DeleteExpiredOpacRegistrations Delete accounts that haven't been upgraded from the 'temporary' category @@ -1904,7 +1679,7 @@ WHERE categorycode = ? AND DATEDIFF( NOW(), dateenrolled ) > ? |; $sth->execute( $category_code, $delay ); my $cnt=0; while ( my ($borrowernumber) = $sth->fetchrow_array() ) { - DelMember($borrowernumber); + Koha::Patrons->find($borrowernumber)->delete; $cnt++; } return $cnt;