diff --git a/perl/exit_strategy.pl b/perl/exit_strategy.pl index d6686ddb8b2d7863574e6ad4789bc544ec1694bd..6e135f09dca623a52249fdbcb4f89181a0a6f176 100644 --- a/perl/exit_strategy.pl +++ b/perl/exit_strategy.pl @@ -615,25 +615,21 @@ sub check_if_file_is_readable($filename) { sub _handle_deleted_or_purged_aips($xp, $ret) { my $amdsec_ie = $xp->findnodes($compiled_xpath_amdSec_ie)->[0]; - my $is_deleted; - foreach my $state (qw(purged deleted)) { - my $dnx_ctx; - if ($state eq 'purged') { - $dnx_ctx = $xp->findnodes($xpath_if_purged_expr, $amdsec_ie)->[0]; - } - else { - $dnx_ctx = $xp->findnodes($xpath_if_deleted_expr, $amdsec_ie)->[0]; - } - $is_deleted = has_purged_entries($xp, $dnx_ctx); - if ($is_deleted) { - my $purged_state = get_purged_state($xp, $dnx_ctx); - $ret->{$state}->{state} = $purged_state; - $ret->{$state}->{reason} = get_purged_reasons($xp, $dnx_ctx)->[0]; - $ret->{$state}->{note} = get_purged_notes($xp, $dnx_ctx)->[0]; - $ret->{$state}->{date} = get_purged_dates($xp, $dnx_ctx)->[0]; - $ret->{$state}->{authorized_by} = get_purged_authorized_by($xp, $dnx_ctx)->[0]; - if ($state eq "purged") {last;} - } + my $latest_ctx = ( + sort { + my $adate = get_anydelete_date($xp, $a); + my $bdate = get_anydelete_date($xp, $b); + $bdate cmp $adate + } $xp->findnodes($xpath_if_anydelete_event_expr, $amdsec_ie) + )[0]; # first element of list + my $is_deleted = has_anydelete_entries($xp, $latest_ctx); + if ($is_deleted) { + my $state = get_anydelete_state($xp, $latest_ctx); + $ret->{$state}->{state} = $state; + $ret->{$state}->{reason} = get_anydelete_reason($xp, $latest_ctx); + $ret->{$state}->{note} = get_anydelete_note($xp, $latest_ctx); + $ret->{$state}->{date} = get_anydelete_date($xp, $latest_ctx); + $ret->{$state}->{authorized_by} = get_anydelete_authorized_by($xp, $latest_ctx); } return $is_deleted; }