From 131966162a9da0f8a07a4f75a65eef1cc5ab2214 Mon Sep 17 00:00:00 2001
From: "Bradley M. Kuhn" <bkuhn@ebb.org>
Date: Fri, 8 Sep 2023 12:05:46 -0700
Subject: [PATCH] Do not assume all tickets returned by query are
 'ready-for-payment'

Since this script allows the user to provide a query, that query may
or may not include tickets in it that are not in the
'ready-for-payment' state.  As such, add a check for that, and output
the status of any ticket in the detail list that is not actually
'ready-for-payment'.
---
 scripts/rt-bulk-prep-pay.plx | 22 ++++++++++++++++++++--
 1 file changed, 20 insertions(+), 2 deletions(-)

diff --git a/scripts/rt-bulk-prep-pay.plx b/scripts/rt-bulk-prep-pay.plx
index dc78c94..ae7d23d 100755
--- a/scripts/rt-bulk-prep-pay.plx
+++ b/scripts/rt-bulk-prep-pay.plx
@@ -69,6 +69,22 @@ sub FindMostRecentPaymentMethodForTicket ($) {
   return $value;
 }
 ###############################################################################
+sub GetStatusOfTicket ($) {
+  my($ticketSpec) = @_;
+  my $paymentMethod;
+  $ticketSpec =~ s%^\s*ticket\s*/\s*%%;
+  open(my $rtShowFH, "-|", "$RT_CMD", "show", '-t', 'ticket', '-f', 'status', $ticketSpec);
+  my($ticketDataAgain, $value) = <$rtShowFH>;
+  close $rtShowFH;
+  chomp $value; $value =~ s/^\s*Status\s*:\s+(.*)$/$1/i
+    or warn "$ticketSpec: Unknown value for Status of \"$value\"";
+
+  if (not defined $value or $value =~ /^\s*$/) {
+    $value = "MISSING-TICKET-STATUS";
+  }
+  return $value;
+}
+###############################################################################
 
 GetOptions("verbose=i" => \$VERBOSE, "interactive" => \$INTERACTIVE, 'showAmounts' => \$SHOW_AMOUNTS,
            'subTotals' => \$SUB_TOTALS,
@@ -112,7 +128,8 @@ foreach my $paymentMethod (sort { $a cmp $b } keys %payments) {
       $tix =~ s%^\s*ticket\s*/\s*%%;
       my($currency, $val) = ($AMOUNTS{$tix}{currency}, $AMOUNTS{$tix}{amount});
       $subTotals{$currency} = 0.00 unless defined $subTotals{$currency};
-      print sprintf("     %5d: %.2f %3.3s\n", $tix, $val, $currency);
+      my $status = GetStatusOfTicket($tix);
+      print sprintf("     %5d: %8.2f %3.3s", $tix, $val, $currency), ( ($status eq 'ready-for-payment') ? "\n" : " ($status)\n");
       if (defined $val and $val =~ /^[\d\.]+$/) { $subTotals{$currency} += $val;  } else { $subTotalOk = 0; }
     }
     if ($subTotalOk) {
@@ -132,7 +149,8 @@ if ($SHOW_AMOUNTS and not $SUB_TOTALS) {
   foreach my $tix (sort { $a <=> $b} (keys %AMOUNTS)) {
     foreach my $currency (keys %overallTotals) {
       my $val = $AMOUNTS{$tix}{$currency};
-      print sprintf("%5d: %.2f %3.3d\n", $tix, $val, $currency);
+      my $status = GetStatusOfTicket($tix);
+      print sprintf("     %5d: %8.2f %3.3s", $tix, $val, $currency), ( ($status eq 'ready-for-payment') ? "\n" : " ($status)\n");
       $overallTotals{$currency} = 0.00 unless defined $overallTotals{$currency};
       if ($val =~ /^[\d\.]+$/) { $overallTotals{$currency} += $val;  } else { $overallTotalOk = 0; }
     }