RT-Client-Tools/scripts/rt-bulk-prep-pay.plx

70 lines
2.3 KiB
Text
Raw Normal View History

#!/usr/bin/perl
# Copyright © 2018, Bradley M. Kuhn
# License: AGPL-3.0-or-later
use strict;
use warnings;
use autodie qw(:all);
use Getopt::Long;
use File::Spec;
use Date::Manip qw(ParseDate UnixDate);
my($VERBOSE, $INTERACTIVE, $RT_CMD, $SVN_CMD);
###############################################################################
sub TicketIDsReadyForPayment () {
my @ticketSpecs;
open(my $rtLsFH, "-|", "$RT_CMD", "ls", "-i", "Status = 'ready-for-payment'");
while (my $lsLine = <$rtLsFH>) {
chomp $lsLine;
push(@ticketSpecs, $lsLine);
}
close $rtLsFH;
return @ticketSpecs;
}
###############################################################################
sub FindMostRecentPaymentMethodForTicket ($) {
my($ticketSpec) = @_;
my $paymentMethod;
$ticketSpec =~ s%^\s*ticket\s*/\s*%%;
open(my $rtShowFH, "-|", "$RT_CMD", "show", $ticketSpec);
while (my $showLine = <$rtShowFH>) {
print STDERR "rt show line for $ticketSpec: $showLine" if ($VERBOSE >= 10);
2018-07-25 20:57:27 +00:00
$paymentMethod = lc($1)
2018-07-25 16:49:34 +00:00
if ($showLine =~ /^\s*PAYMENT\s+METHOD\s*:\s*(.*?)\s*$/);
# don't 'last' when found as we want the last one.
}
close $rtShowFH;
return $paymentMethod;
}
###############################################################################
GetOptions("verbose=i" => \$VERBOSE, "interactive" => \$INTERACTIVE,
"rtCommand=s" => \$RT_CMD, "svnCommand=s" => \$SVN_CMD);
$RT_CMD = '/usr/bin/rt' unless defined $RT_CMD;
$SVN_CMD = '/usr/bin/svn' unless defined $SVN_CMD;
$INTERACTIVE = 0 if not defined $INTERACTIVE;
my @ticketSpecs = TicketIDsReadyForPayment();
my %payments;
2018-07-25 16:44:14 +00:00
foreach my $ticketSpec (@ticketSpecs) {
my $paymentMethod = FindMostRecentPaymentMethodForTicket($ticketSpec);
die "Cannot find payment method for ticket, $ticketSpec" unless defined $paymentMethod;
push(@{$payments{$paymentMethod}}, $ticketSpec);
}
foreach my $paymentMethod (sort { $a cmp $b } keys %payments) {
print "$paymentMethod: Count: ", scalar(@{$payments{$paymentMethod}}), "\n";
print " Tickets: ", join(", ", map { s%^\s*ticket\s*/\s*%%; $_; } @{$payments{$paymentMethod}}), "\n";
}
###############################################################################
#
# Local variables:
# compile-command: "perl -c rt-bulk-prep-pay.plx"
# perl-indent-level: 2
# End: