avoid cloning TimeWorked and related fields on linked tickets, #20543
authorMark Wells <mark@freeside.biz>
Sat, 19 Jan 2013 01:42:01 +0000 (17:42 -0800)
committerMark Wells <mark@freeside.biz>
Sat, 19 Jan 2013 01:42:01 +0000 (17:42 -0800)
rt/FREESIDE_MODIFIED
rt/lib/RT/CustomField.pm
rt/share/html/Admin/CustomFields/Modify.html
rt/share/html/Ticket/Create.html

index 315d6b2..ace0d49 100644 (file)
@@ -160,3 +160,8 @@ share/html/Ticket/Elements/ShowDates
 share/html/Elements/CustomerFields
 share/html/Search/Elements/ConditionRow # bugfix for select options list
 share/html/Search/Elements/PickBasics
+
+#avoid cloning TimeWorked and related fields
+lib/RT/CustomField.pm
+share/html/Admin/CustomFields/Modify.html
+share/html/Ticket/Create.html
index 7ba24b8..8d16c1f 100644 (file)
@@ -410,6 +410,10 @@ sub Create {
             $self->SetUILocation( $args{'UILocation'} );
         }
 
+        if ( exists $args{'NoClone'} ) {
+            $self->SetNoClone( $args{'NoClone'} );
+        }
+
         return ($rv, $msg) unless exists $args{'Queue'};
 
         # Compat code -- create a new ObjectCustomField mapping
@@ -1822,9 +1826,20 @@ sub SetUILocation {
     }
 }
 
+sub NoClone {
+    my $self = shift;
+    $self->FirstAttribute('NoClone') ? 1 : '';
+}
 
-
-
+sub SetNoClone {
+    my $self = shift;
+    my $value = shift;
+    if ( $value ) {
+        return $self->SetAttribute( Name => 'NoClone', Content => 1 );
+    } else {
+        return $self->DeleteAttribute('NoClone');
+    }
+}
 
 
 =head2 id
index 4ed86b6..358dcfd 100644 (file)
 </td></tr>
 
 <tr><td class="label">&nbsp;</td><td>
+<input type="checkbox" class="checkbox" name="YesClone" value="1" <% $YesCloneChecked |n%> />
+<&|/l&>Copy this field to new tickets</&>
+</td></tr>
+
+<tr><td class="label">&nbsp;</td><td>
 <input type="hidden" class="hidden" name="SetEnabled" value="1" />
 <input type="checkbox" class="checkbox" name="Enabled" value="1" <% $EnabledChecked |n%> />
 <&|/l&>Enabled (Unchecking this box disables this custom field)</&>
@@ -187,6 +192,7 @@ else {
             IncludeContentForValue => $IncludeContentForValue,
             BasedOn       => $BasedOn,
             Disabled      => !$Enabled,
+            NoClone       => !$YesClone,
         );
         if (!$val) {
             push @results, loc("Could not create CustomField: [_1]", $msg);
@@ -207,10 +213,12 @@ else {
 if ( $ARGS{'Update'} && $id ne 'new' ) {
     #we're asking about enabled on the web page but really care about disabled.
     $ARGS{'Disabled'} = $Enabled? 0 : 1;
+    #  likewise
+    $ARGS{'NoClone'} = $YesClone ? 0 : 1;
    
     $ARGS{'Required'} ||= 0;
 
-    my @attribs = qw(Disabled Required Pattern Name TypeComposite LookupType Description LinkValueTo IncludeContentForValue);
+    my @attribs = qw(Disabled Required Pattern Name TypeComposite LookupType Description LinkValueTo IncludeContentForValue NoClone);
     push @results, UpdateRecordObject(
         AttributesRef => \@attribs,
         Object        => $CustomFieldObj,
@@ -313,6 +321,10 @@ $EnabledChecked = '' if $CustomFieldObj->Disabled;
 my $RequiredChecked = '';
 $RequiredChecked = qq[checked="checked"] if $CustomFieldObj->Required;
 
+my $YesCloneChecked = qq[checked="checked"];
+$YesCloneChecked = '' if $CustomFieldObj->NoClone;
+
+
 my @CFvalidations = (
     '(?#Mandatory).',
     '(?#Digits)^[\d.]+$',
@@ -339,4 +351,5 @@ $LinkValueTo => undef
 $IncludeContentForValue => undef
 $BasedOn => undef
 $UILocation => undef
+$YesClone => undef
 </%ARGS>
index 0419126..8c6a58a 100755 (executable)
@@ -293,8 +293,8 @@ if ($CloneTicket) {
     };
 
     $clone->{$_} = $CloneTicketObj->$_()
-        for qw/Owner Subject FinalPriority TimeEstimated TimeWorked
-        Status TimeLeft/;
+        for qw/Owner Subject FinalPriority Status/;
+        # not TimeWorked, TimeEstimated, or TimeLeft
 
     $clone->{$_} = $CloneTicketObj->$_->AsString
         for grep { $CloneTicketObj->$_->Unix }
@@ -330,6 +330,7 @@ if ($CloneTicket) {
 
     my $cfs = $CloneTicketObj->QueueObj->TicketCustomFields();
     while ( my $cf = $cfs->Next ) {
+        next if $cf->FirstAttribute('NoClone');
         my $cf_id     = $cf->id;
         my $cf_values = $CloneTicketObj->CustomFieldValues( $cf->id );
         my @cf_values;