summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Wells <mark@freeside.biz>2014-04-07 16:19:09 -0700
committerMark Wells <mark@freeside.biz>2014-04-07 16:19:09 -0700
commit2ea729e55651a288bbf3826c888f430806aab04c (patch)
treed51e0afe42ca79397b1e5feb1d1bbb1280111b24
parenta172aa2d549f2c62978fa1f6b6851a68ae0f2a4e (diff)
avoid creating Set TimeWorked transactions where new value is empty, #28459
-rw-r--r--FS/FS/TicketSystem.pm10
-rw-r--r--rt/lib/RT/Interface/Web_Vendor.pm8
2 files changed, 18 insertions, 0 deletions
diff --git a/FS/FS/TicketSystem.pm b/FS/FS/TicketSystem.pm
index fa54e0b..3c972d0 100644
--- a/FS/FS/TicketSystem.pm
+++ b/FS/FS/TicketSystem.pm
@@ -357,6 +357,16 @@ sub _upgrade_data {
warn "Removed $rows dangling ticket-$table links\n" if $rows > 0;
}
+ # Fix ticket transactions on the Time* fields where the NewValue (or
+ # OldValue, though this is not known to happen) is an empty string
+ foreach (qw(newvalue oldvalue)) {
+ my $rows = $dbh->do(
+ "UPDATE transactions SET $_ = '0' WHERE objecttype='RT::Ticket' AND ".
+ "field IN ('TimeWorked', 'TimeEstimated', 'TimeLeft') AND $_ = ''"
+ ) or die $dbh->errstr;
+ warn "Fixed $rows transactions with empty time values\n" if $rows > 0;
+ }
+
return;
}
diff --git a/rt/lib/RT/Interface/Web_Vendor.pm b/rt/lib/RT/Interface/Web_Vendor.pm
index e9c6346..245df12 100644
--- a/rt/lib/RT/Interface/Web_Vendor.pm
+++ b/rt/lib/RT/Interface/Web_Vendor.pm
@@ -284,6 +284,14 @@ sub ProcessTicketBasics {
}
}
+ # RT core _will_ allow Set transactions that change these
+ # fields to empty strings, but internally change the values
+ # to zero. This is sloppy and causes some problems.
+ foreach my $field (qw(TimeWorked TimeEstimated TimeLeft)) {
+ $ARGSRef->{$field} =~ s/\s//g;
+ $ARGSRef->{$field} ||= 0;
+ }
+
my @results = UpdateRecordObject(
AttributesRef => \@attribs,
Object => $TicketObj,