<%INIT>
use 5.010;
use strict;
use warnings;
use Date::Manip;
## MySQL date time format:
my $format = '%Y-%m-%d %T';
## Destinated default time to start is (simply) now:
my $now = 'now';
## Client data
my $ARGSRef = $ARGS{'ARGSRef'};
## Determine priority field:
my $cfPriority = RT->Config->Get('PriorityField');
my $cf = RT::CustomField->new($RT::SystemUser);
$cf->LoadByNameAndQueue(Name => $cfPriority, Queue => '0');
my $priorityField = 'Object-RT::Ticket--CustomField-' . $cf->id . '-Values';
unless($cf->id) {
$$skip_create = 1;
push @{$results}, loc('Custom field "[_1]" does not exist.', $cfPriority);
}
## Check priority:
## TODO Doesn't work properly...
if (!$$ARGSRef{$priorityField} || $$ARGSRef{$priorityField} =~ /^[ \t]*$/) {
# Set default priority:
$$ARGSRef{$priorityField} = RT->Config->Get('DefaultPriority');
}
## Call only after POSTing formular:
if (!exists $$ARGSRef{'AddMoreAttach'} && defined($$ARGSRef{'id'}) &&
$$ARGSRef{'id'} eq 'new') {
## Create new date:
my $date = new Date::Manip::Date;
## Set start date:
if (!$$ARGSRef{'Starts'} || $$ARGSRef{'Starts'} =~ /^[ \t]*$/) {
$date->parse($now);
my $start = $date->printf($format);
$$ARGSRef{'Starts'} = $start;
}
## Set due date:
if (!$$ARGSRef{'Due'} || $$ARGSRef{'Due'} =~ /^[ \t]*$/) {
my $priority = $$ARGSRef{$priorityField};
## Fetch when ticket should be escalated by priority:
my %priorities = RT->Config->Get('EscalateTicketsByPriority');
if (!exists $priorities{$priority}) {
$$skip_create = 1;
push @{$results}, loc('Unconfigured priority');
} else {
my $deltaStr = $priorities{$priority};
## Configure Date::Manip:
my %dateConfig = RT->Config->Get('DateManipConfig');
$date->config(%dateConfig);
## Compute date delta and format result:
my $delta = $date->new_delta();
my $startDate = $$ARGSRef{'Starts'};
$date->parse($startDate);
$delta->parse($deltaStr);
my $calc = $date->calc($delta);
my $due = $calc->printf($format);
$$ARGSRef{'Due'} = $due;
}
}
}
</%INIT>
<%ARGS>
$skip_create => undef
$results => undef
$QueueObj => undef
</%ARGS>