Here’s the scrip we’ve got on our production server that sets both
priority and due dates on a ticket based on our ‘Urgency’ custom field.
It also uses the Business::Hours perl library to ensure that our
shorter-term tickets come due when we’re actually here.
Custom condition:
if (($self->TransactionObj->Type eq “CustomField”) and
($self->TransactionObj->Field eq “13”)) {
return(1);
} else {
return(undef);
}
Custom action cleanup:
my $ticket = $self->TicketObj;
my $CFName = ‘Urgency’;
my $QueueObj = $self->TicketObj->QueueObj;
my $CFObj = RT::CustomField->new ($QueueObj->CurrentUser);
my $duedate = RT::Date->new($RT::SystemUser);
my $bus_hours_duetime = time;
use Business::Hours;
my $hours = Business::Hours->new();
my $now = time;
$CFObj->LoadByNameAndQueue(Name=>$CFName, Queue=>$QueueObj->id);
unless ($CFObj->id) {
$RT::Logger->warning ("$CFName doesn’t exist in Queue " .
$QueueObj->Name);
return undef;
}
my $urgencyvalue = $self->TicketObj->FirstCustomFieldValue($CFObj->id);
if ($urgencyvalue eq ‘Emergency’) {
$self->TicketObj->SetPriority(‘100’);
$self->TicketObj->SetFinalPriority(‘100’);
$bus_hours_duetime = $hours->add_seconds ($now, 14400);
$duedate->Set(Format=>‘unix’, Value=>$bus_hours_duetime);
$self->TicketObj->SetDue($duedate->ISO);
} elsif ($urgencyvalue eq ‘Urgent’) {
$self->TicketObj->SetPriority(‘90’);
$self->TicketObj->SetFinalPriority(‘99’);
$bus_hours_duetime = $hours->add_seconds ($now, 32400);
$duedate->Set(Format=>‘unix’, Value=>$bus_hours_duetime);
$self->TicketObj->SetDue($duedate->ISO);
} elsif ($urgencyvalue eq ‘Time-Sensitive’) {
$self->TicketObj->SetPriority(‘89’);
$self->TicketObj->SetFinalPriority(‘89’);
$bus_hours_duetime = $hours->add_seconds ($now, 97200);
$duedate->Set(Format=>‘unix’, Value=>$bus_hours_duetime);
$self->TicketObj->SetDue($duedate->ISO);
} elsif ($urgencyvalue eq ‘High’) {
$self->TicketObj->SetPriority(‘75’);
$self->TicketObj->SetFinalPriority(‘88’);
$duedate->Set(Format=>‘unknown’, Value=>‘15 days’);
$self->TicketObj->SetDue($duedate->ISO);
} elsif ($urgencyvalue eq ‘Medium’) {
$self->TicketObj->SetPriority(‘50’);
$self->TicketObj->SetFinalPriority(‘74’);
$duedate->Set(Format=>‘unknown’, Value=>‘3 months’);
$self->TicketObj->SetDue($duedate->ISO);
} elsif ($urgencyvalue eq ‘Low’) {
$self->TicketObj->SetPriority(‘25’);
$self->TicketObj->SetFinalPriority(‘49’);
$duedate->Set(Format=>‘unknown’, Value=>‘6 months’);
$self->TicketObj->SetDue($duedate->ISO);
} elsif ($urgencyvalue eq ‘Very Low’) {
$self->TicketObj->SetPriority(‘1’);
$self->TicketObj->SetFinalPriority(‘24’);
$duedate->Set(Format=>‘unknown’, Value=>‘1 year’);
$self->TicketObj->SetDue($duedate->ISO);
} else {
}
return(1);
Mark Roedel
Web Programmer / Analyst
LeTourneau University-----Original Message-----
From: rt-users-bounces@lists.bestpractical.com
[mailto:rt-users-bounces@lists.bestpractical.com] On Behalf Of Matt
Nichols
Sent: Friday, December 16, 2005 1:37 PM
To: rt-users@lists.bestpractical.com
Subject: [rt-users] automatically set due date and priority based on
customfield
Hello,
I’d like to automatically set the due date and priority of new tickets
based on a users selection of the custom field ‘severity’. The creation
of
the custom field ‘severity’ was the easy part. My understanding is that
the automatic setting of due date and priority based on this custom
field
can be accomplished with a scrip. Has anyone done anything similar to
this?