From caf75d1154c0c4a2cb6e170cc92749c3659fb81e Mon Sep 17 00:00:00 2001
From: Andreas Romeyke <andreas.romeyke@slub-dresden.de>
Date: Mon, 16 Sep 2024 13:46:21 +0200
Subject: [PATCH] - add purged AIP handling

---
 perl/exit_strategy.pl | 46 +++++++++++++++++++++++++++++--------------
 1 file changed, 31 insertions(+), 15 deletions(-)

diff --git a/perl/exit_strategy.pl b/perl/exit_strategy.pl
index 5dc3185..5f691b9 100644
--- a/perl/exit_strategy.pl
+++ b/perl/exit_strategy.pl
@@ -324,15 +324,18 @@ SQL_PURGED_PLAN
       $dcvalue =~ tr/'/"/;
       eval {$plans->{dc}->execute($ieid, $ieversion, $dckey, $dcvalue)} or die "sql problem detected with $ieid ($ieversion, $dckey, $dcvalue), ", $dbh->errstr;
     }
-    if ($refhash->{'purged'}) {
-      my @purged = @{$refhash->{'purged'}};
-      foreach my $purge (@purged) {
+    foreach my $delstate (qw(purged deleted)) {
+      if ($refhash->{$delstate}) {
+        my $delete = $refhash->{$delstate};
         # TODO: call plan plans->{deleted}
-        my $state = $purge->{'state'};
-        my $reason = $purge->{'reason'};
-        my $date = $purge->{'date'};
-        my $authorized_by = $purge->{'authorized_by'};
-        eval {$plans->{deleted}->execute($ieid, $ieversion, $state, $reason, $date, $authorized_by)} or die "sql problem detected with $ieid ($ieversion, $state, $reason, $date, $authorized_by), ", $dbh->errstr;
+        my $state = $delete->{'state'};
+        my $reason = $delete->{'reason'};
+        my $note = $delete->{'note'};
+        my $date = $delete->{'date'};
+        my $authorized_by = $delete->{'authorized_by'};
+        eval {
+          $plans->{$delstate}->execute($ieid, $ieversion, $state, $reason, $note, $date, $authorized_by)
+        } or die "sql problem detected with $delstate $ieid ($ieversion, $state, $reason, $note, $date, $authorized_by), ", $dbh->errstr;
       }
     }
     return 1;
@@ -632,14 +635,27 @@ sub parse_iexml($filename, $recovery_flag) {
     # get dc-records
     $ret->{"dcrecords"} = get_dcrecords_ref($xp, $dmdsec);
     ############################################
-    my $is_deleted = has_purged_entries($xp, $amdsec);
+    my $is_deleted = has_purged_entries($xp, $amdsec_ie);
     if ($is_deleted) {
-      my @purged_states = @{get_purged_states($xp, $amdsec)};
-      foreach my $idx (0 .. $#purged_states) {
-        $ret->{'purged'}->[$idx]->{state} = $purged_states[$idx];
-        $ret->{'purged'}->[$idx]->{reason} = get_purged_reasons($xp, $amdsec)->[$idx];
-        $ret->{'purged'}->[$idx]->{date} = get_purged_dates($xp, $amdsec)->[$idx];
-        $ret->{'purged'}->[$idx]->{authorized_by} = get_purged_authorized_by($xp, $amdsec)->[$idx];
+      my @purged_states = @{get_purged_states($xp, $amdsec_ie)};
+      my $idx_purged;
+      my $idx_deleted;
+      for (my $i = 0; $i <= $#purged_states; $i++) {
+        if ($purged_states[$i] eq 'purged') {$idx_purged = $i; last;}
+        elsif ($purged_states[$i] eq 'deleted') {$idx_deleted = $i;}
+      }
+      if (defined $idx_purged) {
+        $ret->{purged}->{state} = "purged";
+        $ret->{purged}->{reason} = get_purged_reasons($xp, $amdsec_ie)->[$idx_purged];
+        $ret->{purged}->{note} = get_purged_notes($xp, $amdsec_ie)->[$idx_purged];
+        $ret->{purged}->{date} = get_purged_dates($xp, $amdsec_ie)->[$idx_purged];
+        $ret->{purged}->{authorized_by} = get_purged_authorized_by($xp, $amdsec_ie)->[$idx_purged];
+      } else {
+        $ret->{deleted}->{state} = "deleted";
+        $ret->{deleted}->{reason} = get_purged_reasons($xp, $amdsec_ie)->[$idx_deleted];
+        $ret->{deleted}->{note} = get_purged_notes($xp, $amdsec_ie)->[$idx_deleted];
+        $ret->{deleted}->{date} = get_purged_dates($xp, $amdsec_ie)->[$idx_deleted];
+        $ret->{deleted}->{authorized_by} = get_purged_authorized_by($xp, $amdsec_ie)->[$idx_deleted];
       }
     }
     ############################################
-- 
GitLab