[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