@@ -, +, @@ Patrons.pm --- Koha/Patrons.pm | 115 +++++++++++++++++++++++++++++------------------- 1 file changed, 69 insertions(+), 46 deletions(-) --- a/Koha/Patrons.pm +++ a/Koha/Patrons.pm @@ -30,7 +30,7 @@ use Koha::ArticleRequest::Status; use Koha::Patron; use Koha::Exceptions::Patron; use Koha::Patron::Categories; -use Date::Calc qw( Today Add_Delta_YMD ); +use Date::Calc qw( Today Add_Delta_YMD Add_Delta_Days); use base qw(Koha::Objects); @@ -165,11 +165,9 @@ sub search_patrons_to_anonymise { Koha::Patrons->search->anonymise_issue_history( { [ before => $older_than_date ] } ); -Anonymise issue history (old_issues and items_last_borrowers) for all issues older -than the given date (optional). - +Anonymise issue history (old_issues) for all patrons older than the given date (optional). To make sure all the conditions are met, the caller has the responsibility to -call search_patrons_to_anonymise to filter the Koha::Patrons set. +call search_patrons_to_anonymise to filter the Koha::Patrons set =cut @@ -180,13 +178,6 @@ sub anonymise_issue_history { $older_than_date = dt_from_string $older_than_date if $older_than_date; - my $filter_damaged = - C4::Context->preference("KeepDamagedCheckouts") || 0; - my $filter_lost = - C4::Context->preference("KeepLostCheckouts") || 0; - my $filter_withdrawn = - C4::Context->preference("KeepWithdrawnCheckouts") || 0; - # The default of 0 does not work due to foreign key constraints # The anonymisation should not fail quietly if AnonymousPatron is not a valid entry # Set it to undef (NULL) @@ -194,47 +185,79 @@ sub anonymise_issue_history { my $nb_rows = 0; while ( my $patron = $self->next ) { my $old_issues_to_anonymise = $patron->old_checkouts->search( - { - ( - $older_than_date - ? ( returndate => - { '<' => $dtf->format_datetime($older_than_date) } ) - : () - ), - ( $filter_damaged ? ( "itemnumber.damaged" => 0 ) : () ), - ( $filter_lost ? ( "itemnumber.itemlost" => 0 ) : () ), - ( $filter_withdrawn ? ( "itemnumber.withdrawn" => 0 ) : () ) - }, - { - join => ['itemnumber'] - } + { + ( + $older_than_date + ? ( returndate => + { '<' => $dtf->format_datetime($older_than_date) } ) + : () + ) + } ); - - my $last_borrowers_to_anonymise = - $patron->_result->items_last_borrowers->search( - { - ( - $older_than_date - ? ( created_on => - { '<' => $dtf->format_datetime($older_than_date) } ) - : (), - ), - ( $filter_damaged ? ( "itemnumber.damaged" => 0 ) : () ), - ( $filter_lost ? ( "itemnumber.itemlost" => 0 ) : () ), - ( $filter_withdrawn ? ( "itemnumber.withdrawn" => 0 ) : () ) - }, - { - join => ['itemnumber'] - } - ); - my $anonymous_patron = C4::Context->preference('AnonymousPatron') || undef; $nb_rows += $old_issues_to_anonymise->update( { 'old_issues.borrowernumber' => $anonymous_patron } ); - $last_borrowers_to_anonymise->update( { 'items_last_borrower.borrowernumber' => $anonymous_patron } ); } return $nb_rows; } + +=head3 anonymise_last_borrowers + + Koha::Patrons->search->anonymise_last_borrowers(); + + Anonymise items last borrower for all items_last_borrower older + than AnonymiseLastBorrowerDays. + +=cut + +sub anonymise_last_borrowers { + my ( $self, $params ) = @_; + + return unless C4::Context->preference("AnonymiseLastBorrower"); + my $days = C4::Context->preference("AnonymiseLastBorrowerDays") || 0; + my ($year,$month,$day) = Today(); + my ($newyear,$newmonth,$newday) = Add_Delta_Days ($year,$month,$day,(-1)*$days); + my $older_than_date = dt_from_string(sprintf "%4d-%02d-%02d",$newyear,$newmonth,$newday); + + my $anonymous_patron = C4::Context->preference('AnonymousPatron') || undef; + + my $dtf = Koha::Database->new->schema->storage->datetime_parser; + my $rs = $self->_resultset->search( + { created_on => { '<' => $dtf->format_datetime($older_than_date), }, + 'items_last_borrowers.borrowernumber' => { 'not' => undef }, # Keep forever + ( $anonymous_patron ? ( 'items_last_borrowers.borrowernumber' => { '!=' => $anonymous_patron } ) : () ), + }, + { join => ["items_last_borrowers"], + distinct => 1, + } + ); + my $patrons = Koha::Patrons->_new_from_dbic($rs); + + my $nb_rows = 0; + while ( my $patron = $patrons->next ) { + my $last_borrowers_to_anonymise = + $patron->_result->items_last_borrowers->search( + { + ( + $older_than_date + ? ( created_on => + { '<' => $dtf->format_datetime($older_than_date) } ) + : (), + "itemnumber.damaged" => 0, + "itemnumber.itemlost" => 0, + "itemnumber.withdrawn" => 0, + ), + }, + { + join => ['itemnumber'] + } + ); + $nb_rows += $last_borrowers_to_anonymise->update( { 'items_last_borrower.borrowernumber' => $anonymous_patron } ); + } + + return $nb_rows; +} + =head3 delete Koha::Patrons->search({ some filters here })->delete({ move => 1 }); --