From 6ba9eafb143c642f0a1166ff26deac7b30453479 Mon Sep 17 00:00:00 2001
From: Tomas Cohen Arazi <tomascohen@theke.io>
Date: Mon, 3 Jan 2022 15:08:27 -0300
Subject: [PATCH] Bug 29525: Make batch_anonymise.pl deal with holds

This patch makes the batch_anonymise.pl script handle holds too. It does
so by leveraging on the newly introduced method 'filter_by_anonymizable'
and also 'anonymize'.

To test:
1. Have a patron with two past holds.
2. Make sure they are a few days back:
   $ koha-mysql kohadev
   > UPDATE old_reserves SET timestamp=ADDDATE(NOW(), INTERVAL -4 DAY);
3. Run:
   $ kshell
  k$ perl misc/cronjobs/batch_anonymise.pl --days 2 -v
=> SUCCESS: You see something like:
Checkouts and holds before 2022-01-01 will be anonymised.
0 checkouts anonymised.
2 holds anonymised.
4. Repeat 3
=> SUCCESS: They are already anonymized. You see
Checkouts and holds before 2022-01-01 will be anonymised.
0 checkouts anonymised.
0 holds anonymised.
5. Sign off :-D
---
 misc/cronjobs/batch_anonymise.pl | 19 +++++++++++++++----
 1 file changed, 15 insertions(+), 4 deletions(-)

diff --git a/misc/cronjobs/batch_anonymise.pl b/misc/cronjobs/batch_anonymise.pl
index edea4fa7ed..5383578ef1 100755
--- a/misc/cronjobs/batch_anonymise.pl
+++ b/misc/cronjobs/batch_anonymise.pl
@@ -17,15 +17,19 @@
 # You should have received a copy of the GNU General Public License
 # along with Koha; if not, see <http://www.gnu.org/licenses>.
 
-use strict;
-use warnings;
+use Modern::Perl;
 
 use Koha::Script -cron;
+
 use C4::Context;
+use C4::Log qw( cronlogaction );
+
+use Koha::Database;
+use Koha::Old::Holds;
 use Koha::Patrons;
+
 use Date::Calc qw( Add_Delta_Days Today );
 use Getopt::Long qw( GetOptions );
-use C4::Log qw( cronlogaction );
 
 sub usage {
     print STDERR <<USAGE;
@@ -61,9 +65,16 @@ cronlogaction();
 my ($year,$month,$day) = Today();
 my ($newyear,$newmonth,$newday) = Add_Delta_Days ($year,$month,$day,(-1)*$days);
 my $formatdate = sprintf "%4d-%02d-%02d",$newyear,$newmonth,$newday;
-$verbose and print "Checkouts before $formatdate will be anonymised.\n";
+$verbose and print "Checkouts and holds before $formatdate will be anonymised.\n";
 
 my $rows = Koha::Patrons->search_patrons_to_anonymise( { before => $formatdate } )->anonymise_issue_history( { before => $formatdate } );
 $verbose and print int($rows) . " checkouts anonymised.\n";
 
+$rows = Koha::Old::Holds
+          ->filter_by_anonymizable
+          ->filter_by_last_update( { days => $days } )
+          ->anonymize;
+
+$verbose and print int($rows) . " holds anonymised.\n";
+
 exit(0);
-- 
2.32.0