[Rt-commit] rt branch, 4.2/consistent-time-taken, created. rt-4.0.5-253-gfaea2fc
Ruslan Zakirov
ruz at bestpractical.com
Fri Feb 10 07:16:06 EST 2012
The branch, 4.2/consistent-time-taken has been created
at faea2fca97c588ffacf7f285b2e2a222d1ce713a (commit)
- Log -----------------------------------------------------------------
commit 13bab5b5c821ebb9e3f8e3acd45874fa11bbc78a
Author: Thomas Sibley <trs at bestpractical.com>
Date: Wed Feb 8 14:20:48 2012 -0500
Let a few display callbacks access the found transactions and attachments
Callbacks now don't have to do their own searching, which duplicated a
one of the slowest and heaviest queries on the page.
diff --git a/share/html/Ticket/Display.html b/share/html/Ticket/Display.html
index b55aafb..f5224e7 100755
--- a/share/html/Ticket/Display.html
+++ b/share/html/Ticket/Display.html
@@ -55,7 +55,7 @@
<& /Elements/ListActions, actions => \@Actions &>
<& Elements/ShowUpdateStatus, Ticket => $TicketObj &>
-% $m->callback( %ARGS, Ticket => $TicketObj, CallbackName => 'BeforeShowSummary' );
+% $m->callback( %ARGS, Ticket => $TicketObj, Transactions => $transactions, Attachments => $attachments, CallbackName => 'BeforeShowSummary' );
<div class="summary">
<&| /Widgets/TitleBox, title => loc('Ticket metadata') &>
<& /Ticket/Elements/ShowSummary, Ticket => $TicketObj, Attachments => $attachments &>
@@ -63,7 +63,7 @@
</div>
<br />
-% $m->callback( Ticket => $TicketObj, %ARGS, CallbackName => 'BeforeShowHistory' );
+% $m->callback( Ticket => $TicketObj, %ARGS, Transactions => $transactions, Attachments => $attachments, CallbackName => 'BeforeShowHistory' );
% if (not $ForceShowHistory and RT->Config->Get( 'DeferTransactionLoading', $session{'CurrentUser'} )) {
<& /Ticket/Elements/ClickToShowHistory,
@@ -83,6 +83,8 @@
% $m->callback( %ARGS,
% Ticket => $TicketObj,
+% Transactions => $transactions,
+% Attachments => $attachments,
% CallbackName => 'AfterShowHistory',
% );
commit d31682dbb426de549f7e44ae10368191812798ac
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 when we can do the same in this class
diff --git a/lib/RT/Ticket.pm b/lib/RT/Ticket.pm
index 1cd3c7d..6810253 100644
--- a/lib/RT/Ticket.pm
+++ b/lib/RT/Ticket.pm
@@ -3495,13 +3495,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 a75bd247a06597e7c0e7e91345a0f17798bfc63c
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
diff --git a/lib/RT/Record.pm b/lib/RT/Record.pm
index 92bd634..bd2c622 100644
--- a/lib/RT/Record.pm
+++ b/lib/RT/Record.pm
@@ -1479,7 +1479,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 6810253..95d622e 100644
--- a/lib/RT/Ticket.pm
+++ b/lib/RT/Ticket.pm
@@ -3184,7 +3184,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
@@ -3495,6 +3506,11 @@ only be called from _NewTransaction
sub _UpdateTimeTaken {
my $self = shift;
my $Minutes = shift;
+ my %rest = @_;
+
+ if ( my $txn = $rest{'Transaction'} ) {
+ return if $txn->Type eq 'Set' && $txn->Field eq 'TimeWorked';
+ }
my $Total = $self->__Value("TimeWorked");
$Total = ( $Total || 0 ) + ( $Minutes || 0 );
commit 5485ccbb7041bdcdff0c46d8ecb4c5b5842aa634
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 faea2fca97c588ffacf7f285b2e2a222d1ce713a
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.0/schema.Oracle b/etc/upgrade/4.1.0/schema.Oracle
new file mode 100644
index 0000000..8d6680d
--- /dev/null
+++ b/etc/upgrade/4.1.0/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.0/schema.Pg b/etc/upgrade/4.1.0/schema.Pg
new file mode 100644
index 0000000..bef3e25
--- /dev/null
+++ b/etc/upgrade/4.1.0/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.0/schema.SQLite b/etc/upgrade/4.1.0/schema.SQLite
new file mode 100644
index 0000000..8d6680d
--- /dev/null
+++ b/etc/upgrade/4.1.0/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.0/schema.mysql b/etc/upgrade/4.1.0/schema.mysql
new file mode 100644
index 0000000..8d6680d
--- /dev/null
+++ b/etc/upgrade/4.1.0/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