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'.
This commit is contained in:
Bradley M. Kuhn 2023-09-08 12:05:46 -07:00
parent 7d24d42788
commit 131966162a

View file

@ -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; }
}