record support time on ticket create transactions, #20743
[freeside.git] / rt / lib / RT / Action / Accumulate.pm
index 14675b8..03ac8e4 100644 (file)
@@ -23,20 +23,38 @@ the same name, and should be single-valued fields.
 sub Prepare {
     my $self = shift;
     my $cfname = $self->Argument or return 0;
-    $self->{'inc_by'} = $self->TransactionObj->FirstCustomFieldValue($cfname) 
-                        || '';
-    return ( $self->{'inc_by'} =~ /^(\d+)$/ );
+    RT::Logger->info('Accumulate::Prepare called on transaction '.
+                       $self->TransactionObj->Id." field $cfname");
+    my $TransObj = $self->TransactionObj;
+    my $TicketObj = $self->TicketObj;
+    if ( $TransObj->Type eq 'Create' and
+         !defined($TransObj->FirstCustomFieldValue($cfname)) ) {
+        # special case: we're creating a new ticket, and the initial value
+        # may have been set on the ticket instead of the transaction, so
+        # update the transaction to match
+        $self->{'obj'} = $TransObj;
+        $self->{'inc_by'} = $TicketObj->FirstCustomFieldValue($cfname);
+    } else {
+        # the usual case when updating an existing ticket
+        $self->{'obj'} = $TicketObj;
+        $self->{'inc_by'} = $TransObj->FirstCustomFieldValue($cfname) 
+                            || '';
+    }
+    return ( $self->{'inc_by'} =~ /^(\d+)$/ ); # else it's empty
 }
 
 sub Commit {
     my $self = shift;
     my $cfname = $self->Argument;
+    my $obj = $self->{'obj'};
     my $newval = $self->{'inc_by'} + 
-      ($self->TicketObj->FirstCustomFieldValue($cfname) || 0);
-    my ($val) = $self->TicketObj->AddCustomFieldValue(
-      Field => 'Support time',
-      Value => $newval,
-      RecordTransaction => 0,
+      ($obj->FirstCustomFieldValue($cfname) || 0);
+    RT::Logger->info('Accumulate::Commit called on '.ref($obj).' '.
+                       $obj->Id." field $cfname");
+    my ($val) = $obj->AddCustomFieldValue(
+        Field => $cfname,
+        Value => $newval,
+        RecordTransaction => 0,
     );
     return $val;
 }