UpdateTimeLeft

From Request Tracker Wiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

What this is

The patch below provides two distinct improvements to the default RT interface (3.4.1):

  • Ticket Update interface (/reply, comment/) now contains both Time Worked and Time Left fields, instead of just Time Worked field. This makes it easier to keep Time Left field up to date.
  • The above interface is augmented with a javascript event handler that automatically calculates the new value for Time Left when Time Worked is updated. If Time Worked -field is manually changed, the event handler is disabled.

These changes facilitate the following use case:

  1. Create ticket with Time Left = 200 minutes
  2. Work 100 minutes, half way through, enter Ticket Update interface
    1. Notice how Time Left field contains value 200
    2. Now enter the Time Worked: 100
    3. Move the keyboard focus away from the Time Worked entry (click on another field, use Tab...)
    4. Notice how Time Left is updated to new value: 100 minutes
    5. Jot down a message, Update Ticket

How to install

  1. Read the /Modifying Mason components/ -section in CleanlyCustomizeRT
  2. Copy stock share/html/Ticket/Update.html to local/html/Ticket/Update.html
  3. Apply the patch below (see man patch for more information)
  4. Restart Apache

Patch against stock RT 3.4.1 Ticket/Update.html

--- /opt/rt3/share/html/Ticket/Update.html      2005-02-01 16:20:40.000000000 +0200
+++ /opt/rt3/local/html/Ticket/Update.html      2005-12-02 08:54:09.029946568 +0200
@@ -48,6 +48,25 @@
    Ticket => $TicketObj,
    Title=> $title &>

+<script language="JavaScript">
+var originalTimeLeft = parseInt( "<% $TicketObj->TimeLeft %>" )
+var TimeLeftLocked = false
+function updateTimeLeft() {
+       if( TimeLeftLocked == false ) {
+               var newTimeLeft =  originalTimeLeft - document.TicketUpdate.UpdateTimeWorked.value
+               if( newTimeLeft < 0 ) {
+                       document.TicketUpdate.TimeLeft.value = 0
+               }
+               else {
+                       document.TicketUpdate.TimeLeft.value = newTimeLeft
+               }
+       }
+}
+function lockTimeLeft() {
+       TimeLeftLocked = true
+}
+</script>
+
 <FORM ACTION="Update.html" NAME="TicketUpdate"
       METHOD=POST enctype="multipart/form-data">
<input type="hidden" name="QuoteTransaction" value="<% $ARGS{QuoteTransaction} %>">
@@ -61,7 +80,7 @@
<& /Elements/SelectStatus, Name=>"Status", DefaultLabel => loc("[_1] (Unchanged)", loc($TicketObj->Status)), Default => $ARGS{'Status'} || ($TicketObj->Status eq $DefaultStatus ? undef : $DefaultStatus)&>
<&|/l&>Owner</&>:
<& /Elements/SelectOwner, Name=>"Owner", DefaultLabel => loc("[_1] (Unchanged)", $TicketObj->OwnerObj->Name()), QueueObj => $TicketObj->QueueObj, TicketObj => $TicketObj, Default => $ARGS{'Owner'} &>
-<&|/l&>Worked</&>: <input size=4 name="UpdateTimeWorked" value="<% $ARGS{UpdateTimeWorked}%>"> <&|/l&>minutes</&></td></tr>
+<&|/l&>Worked</&>, Left: <input size=4 name="UpdateTimeWorked" value="<% $ARGS{UpdateTimeWorked}%>" onblur="updateTimeLeft()"> <input size=4 name="TimeLeft" value="<% $TicketObj->TimeLeft %>" onchange="lockTimeLeft()"><&|/l&>minutes</&></td></tr>
% my $skip;
<& /Elements/Callback, _CallbackName => 'BeforeUpdateType', skip => \$skip, %ARGS &>
% if (!$skip) {