I have a script which places data 4 levels deep in a HoHoHoH.  It grabs tickets
in our ticket system using the systems API and places attributes about each
piece of activity into the hash. The has is called %tickets.  It looks like

$tickets{action_creator}{ticket_customer}{ticket_number}{ticket_subject}.

Each is self explanatory with the value under ticket_subject being the total
time the action creator spent on the whole ticket.  The actual code

# gather up all of the tickets, transactions, and time for each user and
successively place
# all data into a HoHoH working down from user to environment to ticket
# we go through each date in the range individually so we can make sure we only
get the transactions that
# have been added during the date range
foreach my $date (@searchDate) {
        while (my $ticket = $tix->Next) {
                $tikSubj{$ticket->id} = $ticket->Subject;
                my $env = $ticket->FirstCustomFieldValue('Environment');
                my $transactions = $ticket->Transactions;
                while (my $transaction  = $transactions->Next) {
                        my $creator     = $transaction->CreatorObj;

                        # we need to make sure the transaction is in the date
range requested
                        # it's set up like this so we can chop the timestamp off
of the Created string
                        (my $checkDate  = $transaction->Created) =~ s/\s.*$//;

                        # we only want transactions that are within the date
range, have TimeWorked
                        # set, and the creator of which is one of the actual
users and not someone
                        # that was created upon ticket submission or Cc addition
                        next unless (($checkDate eq $date) &&
($creator->Privileged) && ($transaction->TimeTaken));

                        # if all of the above stipulations are met add the time
worked to the hash

$tickets{$creator->Name}{$env}{$ticket->id}{$ticket->Subject} +=
$transaction->TimeTaken;
                }
        }
}

And the formatting

foreach my $user (keys %tickets) {
        open TIMESHEET,
">/work_reports/ticketlists/ticketlists_$endDate/ticketlist_$user" . "_" .
"$endDate.txt" or die "Can't open file: $!";
        print TIMESHEET "List of tickets worked on by $user during week ending
$endDate", "\n\n";

        foreach my $env (sort keys %{ $tickets{$user} }){

format TIMESHEET_TOP =
@<<<<<<<<<<<<<<<<<<<<
$env
 Ticket ID                      Subject                      hh:mm
------------------------------------------------------------------
.

                write TIMESHEET_TOP;

                foreach my $id (sort keys %{ $tickets{$user}{$env} }) {
                        foreach my $subject (keys %{ $tickets{$user}{$env}{$id} 
}) {
format TIMESHEET =
@#########  ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<  @>>>>
           $id, $tickets{$user}{$env}{$id},
$tickets{$user}{$env}{$id}{$subject}
~~          ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
            $tickets{$user}{$env}{$id}
.

                                write TIMESHEET;
                        }
                        print TIMESHEET "\n";
                }
        }
}

The problem didn't surface until I went from using the %tikSubj hash seen near
the top of the code snippet to a multi-level hash.  But then, using %tikSubj
presents its own bug for some reason.

Knowing that you don't know the intricacies of the system I'm working with, I
won't be sad if no one has any input ;).

Thanks
Mathew
-- 
Keep up with me and what I'm up to: http://theillien.blogspot.com

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/


Reply via email to