UpdateTimeLeft
Jump to navigation
Jump to search
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:
- Create ticket with Time Left = 200 minutes
- Work 100 minutes, half way through, enter Ticket Update interface
- Notice how Time Left field contains value 200
- Now enter the Time Worked: 100
- Move the keyboard focus away from the Time Worked entry (click on another field, use Tab...)
- Notice how Time Left is updated to new value: 100 minutes
- Jot down a message, Update Ticket
How to install
- Read the /Modifying Mason components/ -section in CleanlyCustomizeRT
- Copy stock
share/html/Ticket/Update.html
tolocal/html/Ticket/Update.html
- Apply the patch below (see
man patch
for more information) - 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) {