[Rt-commit] rt branch, 4.2/consistent-time-taken, created. rt-4.1.6-347-gd2cb8b8
Ruslan Zakirov
ruz at bestpractical.com
Tue Mar 12 17:15:04 EDT 2013
The branch, 4.2/consistent-time-taken has been created
at d2cb8b88dfdc95be569391876a55e5906c52447f (commit)
- Log -----------------------------------------------------------------
commit 37ab91b4bac969b2cf279d910e7a7c96e4019228
Author: Ruslan Zakirov <ruz at bestpractical.com>
Date: Fri Feb 10 15:43:46 2012 +0400
call local methods instead of SUPER
it was hard to understand code when it was calling
SUPER functions. Use "local" methods, just avoid
things we don't need - acl checks and a new transaction.
diff --git a/lib/RT/Ticket.pm b/lib/RT/Ticket.pm
index b5eff48..b834890 100644
--- a/lib/RT/Ticket.pm
+++ b/lib/RT/Ticket.pm
@@ -2711,13 +2711,14 @@ only be called from _NewTransaction
sub _UpdateTimeTaken {
my $self = shift;
my $Minutes = shift;
- my ($Total);
- $Total = $self->SUPER::_Value("TimeWorked");
+ my $Total = $self->__Value("TimeWorked");
$Total = ( $Total || 0 ) + ( $Minutes || 0 );
- $self->SUPER::_Set(
+ $self->_Set(
Field => "TimeWorked",
- Value => $Total
+ Value => $Total,
+ RecordTransaction => 0,
+ CheckACL => 0,
);
return ($Total);
commit 0b352597c58bea5a94c6c5e447ff5d2d4c8ceeb5
Author: Ruslan Zakirov <ruz at bestpractical.com>
Date: Fri Feb 10 15:57:17 2012 +0400
set TimeTaken on txn when TimeWorked changed on Ticket
to make it easier to build stats and for consistency
use __Value to avoid ACL checks as User may not have rights
to see newly created tickets.
diff --git a/lib/RT/Record.pm b/lib/RT/Record.pm
index b124c0c..4109d7d 100644
--- a/lib/RT/Record.pm
+++ b/lib/RT/Record.pm
@@ -1631,7 +1631,7 @@ sub _NewTransaction {
$self->_SetLastUpdated;
if ( defined $args{'TimeTaken'} and $self->can('_UpdateTimeTaken')) {
- $self->_UpdateTimeTaken( $args{'TimeTaken'} );
+ $self->_UpdateTimeTaken( $args{'TimeTaken'}, Transaction => $trans );
}
if ( RT->Config->Get('UseTransactionBatch') and $transaction ) {
push @{$self->{_TransactionBatch}}, $trans if $args{'CommitScrips'};
diff --git a/lib/RT/Ticket.pm b/lib/RT/Ticket.pm
index b834890..dca2e24 100644
--- a/lib/RT/Ticket.pm
+++ b/lib/RT/Ticket.pm
@@ -2303,7 +2303,18 @@ sub _SetStatus {
return ($val, $msg);
}
+sub SetTimeWorked {
+ my $self = shift;
+ my $value = shift;
+ my $taken = ($value||0) - ($self->__Value('TimeWorked')||0);
+
+ return $self->_Set(
+ Field => 'TimeWorked',
+ Value => $value,
+ TimeTaken => $taken,
+ );
+}
=head2 Delete
@@ -2711,6 +2722,11 @@ only be called from _NewTransaction
sub _UpdateTimeTaken {
my $self = shift;
my $Minutes = shift;
+ my %rest = @_;
+
+ if ( my $txn = $rest{'Transaction'} ) {
+ return if $txn->__Value('Type') eq 'Set' && $txn->__Value('Field') eq 'TimeWorked';
+ }
my $Total = $self->__Value("TimeWorked");
$Total = ( $Total || 0 ) + ( $Minutes || 0 );
commit 036042c5ec9cc410cca5204b7588a34f2167223e
Author: Ruslan Zakirov <ruz at bestpractical.com>
Date: Fri Feb 10 15:58:29 2012 +0400
test TimeWorked changes and TimeTaken on txns
diff --git a/t/ticket/time-worked.t b/t/ticket/time-worked.t
new file mode 100644
index 0000000..3e87242
--- /dev/null
+++ b/t/ticket/time-worked.t
@@ -0,0 +1,80 @@
+use strict;
+use warnings;
+
+use RT::Test tests => 27;
+
+my $queue = RT::Test->load_or_create_queue( Name => 'General' );
+ok $queue && $queue->id, "loaded or created a queue";
+
+note 'set on Create';
+{
+ my $ticket = RT::Test->create_ticket(
+ Queue => $queue->id, TimeWorked => 10,
+ );
+ is $ticket->TimeWorked, 10, 'correct value';
+
+ my $txn = RT::Transaction->new( RT->SystemUser );
+ $txn->LoadByCols(
+ ObjectType => 'RT::Ticket', ObjectId => $ticket->id,
+ Type => 'Create',
+ );
+ ok $txn->id, 'found transaction';
+ is $txn->TimeTaken, 10, 'correct value';
+}
+
+note 'set on Comment';
+{
+ my $ticket = RT::Test->create_ticket( Queue => $queue->id );
+ ok !$ticket->TimeWorked, 'correct value';
+ $ticket->Comment( Content => 'test', TimeTaken => 10 );
+ is $ticket->TimeWorked, 10, 'correct value';
+
+ my $txn = RT::Transaction->new( RT->SystemUser );
+ $txn->LoadByCols(
+ ObjectType => 'RT::Ticket', ObjectId => $ticket->id,
+ Type => 'Comment',
+ );
+ ok $txn->id, 'found transaction';
+ is $txn->TimeTaken, 10, 'correct value';
+}
+
+note 'update';
+{
+ my $ticket = RT::Test->create_ticket( Queue => $queue->id );
+ ok !$ticket->TimeWorked, 'correct value';
+ $ticket->SetTimeWorked( 10 );
+ is $ticket->TimeWorked, 10, 'correct value';
+
+ my $txn = RT::Transaction->new( RT->SystemUser );
+ $txn->LoadByCols(
+ ObjectType => 'RT::Ticket', ObjectId => $ticket->id,
+ Type => 'Set', Field => 'TimeWorked',
+ );
+ ok $txn->id, 'found transaction';
+ is $txn->TimeTaken, 10, 'correct value';
+}
+
+note 'on Merge';
+{
+ my $ticket = RT::Test->create_ticket(
+ Queue => $queue->id, TimeWorked => 7,
+ );
+ {
+ my $tmp = RT::Test->create_ticket(
+ Queue => $queue->id, TimeWorked => 13,
+ );
+ my ($status, $msg) = $tmp->MergeInto( $ticket->id );
+ ok $status, "merged tickets";
+ }
+ $ticket->Load( $ticket->id );
+ is $ticket->TimeWorked, 20, 'correct value';
+}
+
+sub dump_txns {
+ my $ticket = shift;
+ my $txns = $ticket->Transactions;
+ while ( my $txn = $txns->Next ) {
+ diag sprintf "#%d\t%s\t%s\t%d", map $txn->$_() // '', qw(id Type Field TimeTaken);
+ }
+}
+
commit d2cb8b88dfdc95be569391876a55e5906c52447f
Author: Ruslan Zakirov <ruz at bestpractical.com>
Date: Fri Feb 10 16:08:03 2012 +0400
on upgrade set TimeTaken on (Set, TimeWorked) txns
diff --git a/etc/upgrade/4.1.9/schema.Oracle b/etc/upgrade/4.1.9/schema.Oracle
new file mode 100644
index 0000000..8d6680d
--- /dev/null
+++ b/etc/upgrade/4.1.9/schema.Oracle
@@ -0,0 +1,2 @@
+UPDATE Transactions SET TimeTaken = NewValue - OldValue
+WHERE ObjectType = 'RT::Ticket' AND Type = 'Set' AND Field = 'TimeWorked';
\ No newline at end of file
diff --git a/etc/upgrade/4.1.9/schema.Pg b/etc/upgrade/4.1.9/schema.Pg
new file mode 100644
index 0000000..bef3e25
--- /dev/null
+++ b/etc/upgrade/4.1.9/schema.Pg
@@ -0,0 +1,2 @@
+UPDATE Transactions SET TimeTaken = NewValue::integer - OldValue::integer
+WHERE ObjectType = 'RT::Ticket' AND Type = 'Set' AND Field = 'TimeWorked';
\ No newline at end of file
diff --git a/etc/upgrade/4.1.9/schema.SQLite b/etc/upgrade/4.1.9/schema.SQLite
new file mode 100644
index 0000000..8d6680d
--- /dev/null
+++ b/etc/upgrade/4.1.9/schema.SQLite
@@ -0,0 +1,2 @@
+UPDATE Transactions SET TimeTaken = NewValue - OldValue
+WHERE ObjectType = 'RT::Ticket' AND Type = 'Set' AND Field = 'TimeWorked';
\ No newline at end of file
diff --git a/etc/upgrade/4.1.9/schema.mysql b/etc/upgrade/4.1.9/schema.mysql
new file mode 100644
index 0000000..8d6680d
--- /dev/null
+++ b/etc/upgrade/4.1.9/schema.mysql
@@ -0,0 +1,2 @@
+UPDATE Transactions SET TimeTaken = NewValue - OldValue
+WHERE ObjectType = 'RT::Ticket' AND Type = 'Set' AND Field = 'TimeWorked';
\ No newline at end of file
-----------------------------------------------------------------------
More information about the Rt-commit
mailing list