[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