# -*- Perl -*- # Copyright © 2018, Bradley M. Kuhn # License: AGPL-3.0-or-later use strict; use warnings; use autodie qw(:all); our $RT_CMD; our $VERBOSE; ############################################################################### sub Outreachy_FindUniqueTicket($@) { my($round, @searchTerms) = @_; open(my $rtLsFH, "-|", "$RT_CMD", "ls", "-i", 'Queue = outreachy-interns ' . "AND Subject LIKE '" . $round . "' AND" . join(" AND ", @searchTerms)); my $ticketSpec; while (my $lsLine = <$rtLsFH>) { chomp $lsLine; if ($lsLine =~ /ticket/) { if (defined $ticketSpec) { $ticketSpec = undef; last; } $ticketSpec = $lsLine; } } close $rtLsFH; return $ticketSpec; } ############################################################################### sub Outreachy_FindMainTicketsInRound($) { my($round) = @_; open(my $rtLsFH, "-|", $RT_CMD, "ls", "-i", 'Queue = outreachy-interns ' . "AND Subject LIKE '" . $round . "'"); my @ticketSpecs; while (my $lsLine = <$rtLsFH>) { chomp $lsLine; if ($lsLine =~ /ticket/) { push(@ticketSpecs, $lsLine); } } close $rtLsFH; return @ticketSpecs; } ############################################################################### sub GetLinksForTicket($) { my($ticketSpec) = @_; my %linked; open(my $rtLinksFH, "-|", "$RT_CMD", "show", $ticketSpec . '/links'); my $type = 'NONE'; while (my $linksLine = <$rtLinksFH>) { print STDERR "rt-helper: GetLinksForTicket: processing line: $linksLine\n" if ($VERBOSE > 9); if ($linksLine =~ m%^([^:\s]+)\s*:%) { $type = $1; print STDERR "rt-helper: GetLinksForTicket: type is now $type\n" if ($VERBOSE > 7); } if ($type !~ /(NONE|id)/i and $linksLine =~ m%rt.*(ticket/\d+)\s*,?\s*$%) { my $val = $1; push(@{$linked{$type}}, $val); print STDERR "rt-helper: GetLinksForTicket: add link of $val for $type\n" if ($VERBOSE > 7); } } close $rtLinksFH; return %linked; } ############################################################################### sub PaymentDateByTicket($$) { my($ticketSpec, $paymentNumber) = @_; open(my $rtPayFH, "-|", "$RT_CMD", "show", "-f", 'CF.{payment-' . $paymentNumber . '-sent}', $ticketSpec); my $date; while (my $payLine = <$rtPayFH>) { chomp $payLine; if ($payLine =~ /^\s*CF\s*.\s*{payment-$paymentNumber-sent}\s*:\s*[\d\-]+\s*$/) { $date = $payLine; last; } } close $rtPayFH; return $date; } ############################################################################### sub GetStatusFromTicket($) { my($ticketSpec) = @_; my $status; open(my $statusFH, "-|", "$RT_CMD", "show", "-f", 'Status', $ticketSpec); while (my $statusLine = <$statusFH>) { if ($statusLine =~ /\s*Status\s*:\s*(\S+)\s*$/) { $status = $1; last; } } close $statusFH; return $status; } ############################################################################### sub GetCustomFieldForTicket($$) { my($ticketSpec, $customField) = @_; open(my $rtCustomFH, "-|", "$RT_CMD", "show", "-f", 'CF.{' . $customField .'}', $ticketSpec); my $val; while (my $customFieldLine = <$rtCustomFH>) { chomp $customFieldLine; if ($customFieldLine =~ /^\s*CF\s*.\s*{$customField}\s*:\s*(\S+)\s*$/) { $val = $1; last; } } close $rtCustomFH; return $val; } ############################################################################### sub FindReimbursementTicketFromList($@) { my($round, @ticketList) = @_; my $reimbursementTicket; foreach my $ticket (@ticketList) { $ticket =~ s%\s*ticket/?\s*(\d+)\s*%$1%; open(my $rtReimburseFH, "-|", "$RT_CMD", "ls", "-i", 'Queue = accounts-payable AND ' . "AND Subject LIKE '" . $round . "' AND (Subject LIKE 'reimbursement' OR Subject LIKE 'travel') and id = " . $ticket); while (my $reimburseLine = <$rtReimburseFH>) { if ($reimburseLine =~ m%\s*ticket\s*/?\s*(\d+)\s*$%) { my $tt = $1; if ($tt == $ticket) { $reimbursementTicket = $ticket; last; } } } close $rtReimburseFH; last if defined $reimbursementTicket; } return $reimbursementTicket; } ############################################################################### 1; ############################################################################### # # Local variables: # compile-command: "perl -c rt-helper.pl" # perl-indent-level: 2 # End: