The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
<%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>