<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://rt-wiki.bestpractical.com/index.php?action=history&amp;feed=atom&amp;title=UpdateTimeLeft</id>
	<title>UpdateTimeLeft - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://rt-wiki.bestpractical.com/index.php?action=history&amp;feed=atom&amp;title=UpdateTimeLeft"/>
	<link rel="alternate" type="text/html" href="https://rt-wiki.bestpractical.com/index.php?title=UpdateTimeLeft&amp;action=history"/>
	<updated>2026-08-23T18:25:47Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.41.1</generator>
	<entry>
		<id>https://rt-wiki.bestpractical.com/index.php?title=UpdateTimeLeft&amp;diff=4062&amp;oldid=prev</id>
		<title>Admin: 2 revisions imported</title>
		<link rel="alternate" type="text/html" href="https://rt-wiki.bestpractical.com/index.php?title=UpdateTimeLeft&amp;diff=4062&amp;oldid=prev"/>
		<updated>2016-04-06T20:39:38Z</updated>

		<summary type="html">&lt;p&gt;2 revisions imported&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= What this is =&lt;br /&gt;
&lt;br /&gt;
The patch below provides two distinct improvements to the default RT interface (3.4.1):&lt;br /&gt;
&lt;br /&gt;
* 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.&lt;br /&gt;
* 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.&lt;br /&gt;
&lt;br /&gt;
These changes facilitate the following use case:&lt;br /&gt;
&lt;br /&gt;
# Create ticket with Time Left = 200 minutes&lt;br /&gt;
# Work 100 minutes, half way through, enter Ticket Update interface&lt;br /&gt;
## Notice how Time Left field contains value 200&lt;br /&gt;
## Now enter the Time Worked: 100&lt;br /&gt;
## Move the keyboard focus away from the Time Worked entry (click on another field, use Tab...)&lt;br /&gt;
## Notice how Time Left is updated to new value: 100 minutes&lt;br /&gt;
## Jot down a message, Update Ticket&lt;br /&gt;
&lt;br /&gt;
== How to install ==&lt;br /&gt;
&lt;br /&gt;
# Read the /Modifying Mason components/ -section in [[CleanlyCustomizeRT]]&lt;br /&gt;
# Copy stock &amp;lt;code&amp;gt;share/html/Ticket/Update.html&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;local/html/Ticket/Update.html&amp;lt;/code&amp;gt;&lt;br /&gt;
# Apply the patch below (see &amp;lt;code&amp;gt;man patch&amp;lt;/code&amp;gt; for more information)&lt;br /&gt;
# Restart Apache&lt;br /&gt;
&lt;br /&gt;
== Patch against stock RT 3.4.1 Ticket/Update.html ==&lt;br /&gt;
&lt;br /&gt;
 --- /opt/rt3/share/html/Ticket/Update.html      2005-02-01 16:20:40.000000000 +0200&lt;br /&gt;
 +++ /opt/rt3/local/html/Ticket/Update.html      2005-12-02 08:54:09.029946568 +0200&lt;br /&gt;
 @@ -48,6 +48,25 @@&lt;br /&gt;
     Ticket =&amp;amp;gt; $TicketObj,&lt;br /&gt;
     Title=&amp;amp;gt; $title &amp;amp;amp;&amp;amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 +&amp;amp;lt;script language=&amp;quot;JavaScript&amp;quot;&amp;amp;gt;&lt;br /&gt;
 +var originalTimeLeft = parseInt( &amp;quot;&amp;amp;lt;% $TicketObj-&amp;amp;gt;TimeLeft %&amp;amp;gt;&amp;quot; )&lt;br /&gt;
 +var TimeLeftLocked = false&lt;br /&gt;
 +function updateTimeLeft() {&lt;br /&gt;
 +       if( TimeLeftLocked == false ) {&lt;br /&gt;
 +               var newTimeLeft =  originalTimeLeft - document.TicketUpdate.UpdateTimeWorked.value&lt;br /&gt;
 +               if( newTimeLeft &amp;amp;lt; 0 ) {&lt;br /&gt;
 +                       document.TicketUpdate.TimeLeft.value = 0&lt;br /&gt;
 +               }&lt;br /&gt;
 +               else {&lt;br /&gt;
 +                       document.TicketUpdate.TimeLeft.value = newTimeLeft&lt;br /&gt;
 +               }&lt;br /&gt;
 +       }&lt;br /&gt;
 +}&lt;br /&gt;
 +function lockTimeLeft() {&lt;br /&gt;
 +       TimeLeftLocked = true&lt;br /&gt;
 +}&lt;br /&gt;
 +&amp;amp;lt;/script&amp;amp;gt;&lt;br /&gt;
 +&lt;br /&gt;
  &amp;amp;lt;FORM ACTION=&amp;quot;Update.html&amp;quot; NAME=&amp;quot;TicketUpdate&amp;quot;&lt;br /&gt;
        METHOD=POST enctype=&amp;quot;multipart/form-data&amp;quot;&amp;amp;gt;&lt;br /&gt;
 &amp;amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;QuoteTransaction&amp;quot; value=&amp;quot;&amp;amp;lt;% $ARGS{QuoteTransaction} %&amp;amp;gt;&amp;quot;&amp;amp;gt;&lt;br /&gt;
 @@ -61,7 +80,7 @@&lt;br /&gt;
 &amp;amp;lt;&amp;amp;amp; /Elements/SelectStatus, Name=&amp;amp;gt;&amp;quot;Status&amp;quot;, DefaultLabel =&amp;amp;gt; loc(&amp;quot;[_1] (Unchanged)&amp;quot;, loc($TicketObj-&amp;amp;gt;Status)), Default =&amp;amp;gt; $ARGS{&amp;#039;Status&amp;#039;} || ($TicketObj-&amp;amp;gt;Status eq $DefaultStatus ? undef : $DefaultStatus)&amp;amp;amp;&amp;amp;gt;&lt;br /&gt;
 &amp;amp;lt;&amp;amp;amp;|/l&amp;amp;amp;&amp;amp;gt;Owner&amp;amp;lt;/&amp;amp;amp;&amp;amp;gt;:&lt;br /&gt;
 &amp;amp;lt;&amp;amp;amp; /Elements/SelectOwner, Name=&amp;amp;gt;&amp;quot;Owner&amp;quot;, DefaultLabel =&amp;amp;gt; loc(&amp;quot;[_1] (Unchanged)&amp;quot;, $TicketObj-&amp;amp;gt;OwnerObj-&amp;amp;gt;Name()), QueueObj =&amp;amp;gt; $TicketObj-&amp;amp;gt;QueueObj, TicketObj =&amp;amp;gt; $TicketObj, Default =&amp;amp;gt; $ARGS{&amp;#039;Owner&amp;#039;} &amp;amp;amp;&amp;amp;gt;&lt;br /&gt;
 -&amp;amp;lt;&amp;amp;amp;|/l&amp;amp;amp;&amp;amp;gt;Worked&amp;amp;lt;/&amp;amp;amp;&amp;amp;gt;: &amp;amp;lt;input size=4 name=&amp;quot;UpdateTimeWorked&amp;quot; value=&amp;quot;&amp;amp;lt;% $ARGS{UpdateTimeWorked}%&amp;amp;gt;&amp;quot;&amp;amp;gt; &amp;amp;lt;&amp;amp;amp;|/l&amp;amp;amp;&amp;amp;gt;minutes&amp;amp;lt;/&amp;amp;amp;&amp;amp;gt;&amp;amp;lt;/td&amp;amp;gt;&amp;amp;lt;/tr&amp;amp;gt;&lt;br /&gt;
 +&amp;amp;lt;&amp;amp;amp;|/l&amp;amp;amp;&amp;amp;gt;Worked&amp;amp;lt;/&amp;amp;amp;&amp;amp;gt;, Left: &amp;amp;lt;input size=4 name=&amp;quot;UpdateTimeWorked&amp;quot; value=&amp;quot;&amp;amp;lt;% $ARGS{UpdateTimeWorked}%&amp;amp;gt;&amp;quot; onblur=&amp;quot;updateTimeLeft()&amp;quot;&amp;amp;gt; &amp;amp;lt;input size=4 name=&amp;quot;TimeLeft&amp;quot; value=&amp;quot;&amp;amp;lt;% $TicketObj-&amp;amp;gt;TimeLeft %&amp;amp;gt;&amp;quot; onchange=&amp;quot;lockTimeLeft()&amp;quot;&amp;amp;gt;&amp;amp;lt;&amp;amp;amp;|/l&amp;amp;amp;&amp;amp;gt;minutes&amp;amp;lt;/&amp;amp;amp;&amp;amp;gt;&amp;amp;lt;/td&amp;amp;gt;&amp;amp;lt;/tr&amp;amp;gt;&lt;br /&gt;
 % my $skip;&lt;br /&gt;
 &amp;amp;lt;&amp;amp;amp; /Elements/Callback, _CallbackName =&amp;amp;gt; &amp;#039;BeforeUpdateType&amp;#039;, skip =&amp;amp;gt; \$skip, %ARGS &amp;amp;amp;&amp;amp;gt;&lt;br /&gt;
 % if (!$skip) {&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
</feed>