[rt-users] Timeworked modification and sending mail
Walker, John A
jawalk00 at uky.edu
Tue Oct 2 10:31:00 EDT 2007
OK ... I'm at wits end on this issue. We have a group that we provide change management service for that wants to also keep track of time worked on specific tickets. The first thing that I discovered was that the value of of $self->TicketObj->TimeWorked is cumulative. This was going to cause a problem because what this user wants to do is send email to the work order desk to report the time worked on a ticket as it is entered (not the total when resolved). So this meant that everytime I generated an email the work order folks were going to enter a running total each time work was performed which of course would not reflect the total time worked but far more than that.
So ... since we don't really use time worked for anything else, I decided to mess with the Ticket_Overlay.pm. I changed the pm to do the following:
sub _UpdateTimeTaken {
my $self = shift;
my $Minutes = shift;
my ($Total);
$Total = $self->SUPER::_Value("TimeWorked");
#$Total = ( $Total || 0 ) + ( $Minutes || 0 );
#### The original line is remarked out above.
#### The following line added.
$Total = ( 0 ) + ( $Minutes || 0 );
$self->SUPER::_Set(
Field => "TimeWorked",
Value => $Total
);
return ($Total);
}
Basically this change just keeps the last value entered and stores that as time worked. So great ... now I can report the time worked to the work order desk right? Well not exactly. I wanted to do a check to see what the status of time worked was to determine if I should send email to the work order desk. If $timeworked is 0 then I don't send to the work order desk and if it isn't 0 then I send the email. Here is what I was trying to do:
Condition: User Defined
Action: Notify Other Recipients
Template: ukcommwo - test2 (This is a custom template I made to send to this certain group of folks.)
Stage: TransactionBatch
##################################
#SCRIP TO PROCESS FOR TIME WORKED#
##################################
$RT::Logger->debug("*********** Starting time entry scrip ************\n\n");
###############
## Set Variables
#################
###############
## Ticket Variables
###################
my $timeworked = $self->TicketObj->TimeWorked;
if ($timeworked == 0) {
$RT::Logger->debug("No time worked. Move on to next script.");
return 0;
} else {
$RT::Logger->debug("Time worked: $timeworked");
return 1;
}
In my innocence I thought for sure that this would be all I needed but I ran into a 'gotcha'. So on ticket X I want to enter a comment and some time worked. I click on comment and then I add my time and leave a comment. It works great. It detects that $timeworked isn't 0 and generates the email. So the next time I want to comment ... I click on comment and immediately an email gets generated because the value of Timeworked is not zero. Mind you this is BEFORE I even put in a comment or add time ... this is just upon clicking on comment on the web interface to begin leaving a comment. So ... I had an idea that I would run another scrip that would then reset the value back 0 after generating the email to the work order desk. That works but what I get is an entry on the ticket for every comment that shows the value of timeworked getting reset to 0. Cosmetically annoying and something I would like to avoid.
Does anyone have any ideas on how I can check the value of $timeworked but not generate the email when I just click on Comment to start leaving a comment? Any other tips or suggestions on how to do this would be greatly appreciated. I hoping that I've made this clear but since I'm typing this in a hurry and since I'm so entrenched in the problem I'm bet it is like mud to all of you. I hope not though.
- John
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.bestpractical.com/pipermail/rt-users/attachments/20071002/6c272689/attachment.htm>
More information about the rt-users
mailing list