<br><br><div class="gmail_quote">On Sat, Jun 9, 2012 at 10:17 PM, Scotto Alberto <span dir="ltr"><<a href="mailto:al.scotto@reply.it" target="_blank">al.scotto@reply.it</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">





<div>
<div style="direction:ltr;font-size:10pt;font-family:Tahoma">Much better, following KISS rule: we could simply use hidden CFs to store temporary values!<br>
This way it's much cleaner, isn't it?<br></div></div></blockquote><div><br></div><div>Have you seen Attributes class/table in RT. It's designed for such things. Store anything developer like tied to any RT object. </div>
<div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div style="direction:ltr;font-size:10pt;font-family:Tahoma">
The only pain is that I would have to reconfigure ACL, since I used to give Everyone the
<span>SeeCustomField </span>right.<br>
BTW ACL is not much featured at all... In this case it would be great if I could *deny* the
<span>SeeCustomField </span>right for just one specific CF, instead of having to *grant* the right selectively.<br>
<br>
Anyway, IMHO disallowing the update of some of the tickets' attributes is still useful (e.g. to avoid that malicious AdminCCs set Due date forward) and still I'd like some help about it.<br>
<br>
Thank you,<br>
have a nice week end<br>
<br>
<br>
<div style="font-size:16px;font-family:Times New Roman"><div class="im"><br>
<br>
<div align="left">
<p style="font-family:Calibri,Sans-Serif;font-size:10pt"><span style="font-weight:bold">Alberto Scotto</span>
<span style="color:#808080"></span><br>
<br>
<span style><img border="0" alt="Blue" src="cid:b05988b5633e4d5e8e5a9f7c543725ae" style="margin:0px">
</span><br>
<span style="color:#808080">Via Cardinal Massaia, 83<br>
10147 - Torino - ITALY <br>
phone: +39 011 29100 <br>
<a href="http://al.scotto@reply.it" style="color:blue;text-decoration:underline" target="_blank">al.scotto@reply.it</a>
<br>
<a title="" href="http://www.reply.it" style="color:blue;text-decoration:underline" target="_blank">www.reply.it</a>
</span><br>
 </p>
</div>
<hr>
</div><div style="direction:ltr"><font color="#000000" face="Tahoma"><b>Inizio:</b> Scotto Alberto<br>
<b>Inviato:</b> sabato 9 giugno 2012 19.38<br>
<b>Fine:</b> Ruslan Zakirov<br>
<b>Cc:</b> <a href="mailto:rt-users@lists.bestpractical.com" target="_blank">rt-users@lists.bestpractical.com</a><br>
<b>Oggetto:</b> R: [rt-users] [SLA] Custom (and very imperfect) solution for parking stalled tickets<br>
</font><br>
</div><div><div class="h5">
<div></div>
<div>
<div style="direction:ltr;font-size:10pt;font-family:Tahoma">Yep, I think it would be cool.<br>
But you should also help me dealing with assumption #2: I'd like to disallow the modification of the tickets' attributes involved. Maybe not to everyone; maybe we could work with ACEs, splitting the ModifyTicket right in ModifyTicket and ModifyDates, or something
 like that.<br>
What do you think?<br>
<br>
<br>
<div style="font-size:16px;font-family:Times New Roman"><br>
<br>
<div align="left">
<p style="font-family:Calibri,Sans-Serif;font-size:10pt"><span style="font-weight:bold">Alberto Scotto</span>
<span style="color:#808080"></span><br>
<br>
<span style><img alt="Blue" src="cid:939659c70fa14cd191771cdfa735ba23" border="0" style="margin:0px">
</span><br>
<span style="color:#808080">Via Cardinal Massaia, 83<br>
10147 - Torino - ITALY <br>
phone: +39 011 29100 <br>
<a href="http://UrlBlockedError.aspx" style="color:blue;text-decoration:underline" target="_blank">al.scotto@reply.it</a>
<br>
<a title="" href="http://UrlBlockedError.aspx" style="color:blue;text-decoration:underline" target="_blank">www.reply.it</a>
</span><br>
 </p>
</div>
<hr>
<div style="direction:ltr"><font color="#000000" face="Tahoma"><b>Inizio:</b> Ruslan Zakirov [<a href="mailto:ruslan.zakirov@gmail.com" target="_blank">ruslan.zakirov@gmail.com</a>]<br>
<b>Inviato:</b> sabato 9 giugno 2012 13.21<br>
<b>Fine:</b> Scotto Alberto<br>
<b>Cc:</b> <a href="mailto:rt-users@lists.bestpractical.com" target="_blank">rt-users@lists.bestpractical.com</a><br>
<b>Oggetto:</b> Re: [rt-users] [SLA] Custom (and very imperfect) solution for parking stalled tickets<br>
</font><br>
</div>
<div></div>
<div>
<p>I'm glad if it works for you. Would like to see functionality in extension. Your solution needs refactoring to be merged. If you like I can guide you and help put it into shape for merge.<br>
</p>
<p>Ruslan from phone.</p>
<div class="gmail_quote">08.06.2012 2:24 пользователь "Scotto Alberto" <<a href="mailto:al.scotto@reply.it" target="_blank">al.scotto@reply.it</a>> написал:<br type="attribution">
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div>
<div style="direction:ltr;font-size:10pt;font-family:Tahoma">Working with the SLA Extension, I came across the problem of stalled tickets: by default, there is no way to stop the "timer" for the due date when a ticket becomes stalled, as stated by the author
 in<br>
<a href="http://www.gossamer-threads.com/lists/rt/users/105845#105845" target="_blank">http://www.gossamer-threads.com/lists/rt/users/105845#105845</a>
<br>
<br>
So I've just implemented a small customization (very imperfect indeed) and I want to share it with all of you. Feel free to contribute, and please share your improvements.<br>
<br>
First of all, a few assumptions (aka limitations):<br>
- in $RT::ServiceBusinessHours we defined only 'Default' ServiceBusinessHours<br>
- users will not modify the date fields we set, otherwise everything would screw up<br>
<br>
The idea is to move the due date forward as soon as the ticket exits the stalled status. To compute the new due date we need to know when the tickets became stalled. So, we first have to save somewhere the time when it became stalled: we temporarly save it
 in the Resolved attribute (very dirty, I know..!), which shouldn't be used while stalled.<br>
<br>
This solution includes two actions, two conditions, and two scrips which put everything together.<br>
<br>
Conditions, which you can easily build thanks to sbin/rt-setup-database and the ExecModule StatusChange:<br>
- on stalled<br>
- on un-stall<br>
<br>
Actions (the code is below):<br>
- Set resolved temporarly <br>
- Update due date on un-stall <br>
<br>
Scrips:<br>
- On stalled Set resolved temporarly<br>
- On un-stall Update due date<br>
<br>
<br>
I think the most important improvement would be to avoid the use of the Resolved attribute as temporary. Instead, it would be better to define a new private attribute in Ticket.pm; consequently, a new column in the DB, etc.<br>

<br>
Of course, I will appreciate any suggestions, comments, etc.<br>
<br>
Thanks<br>
<br>
AS<br>
<br>
<br>
======== Action1. Set resolved temporarly =====<br>
my $tkt = $self->TicketObj;<br>
my $id = $tkt->Id;<br>
my $stalled_date = RT::Date->new( $RT::SystemUser );<br>
$stalled_date->SetToNow;<br>
my ($status, $msg) = $tkt->_Set(<br>
       Field => 'Resolved',<br>
       Value => $stalled_date->ISO,<br>
       RecordTransaction => 0<br>
);<br>
unless ( $status ) {<br>
    $RT::Logger->error("Unable to set Resolved date to ticket #$id: $msg");<br>
    return 0;<br>
}<br>
$RT::Logger->debug("Set Resolved date of ticket #". $id . " to ". $stalled_date->ISO);<br>
return 1;<br>
===================================<br>
<br>
======== Action2. Update due date on un-stall =====<br>
my $t = $self->TicketObj;<br>
my $id = $t->Id;<br>
use Business::Hours;<br>
<br>
my $now = RT::Date->new( $RT::SystemUser );<br>
$now->SetToNow;<br>
my $bhours = Business::Hours->new();<br>
$bhours->business_hours( %{ $RT::ServiceBusinessHours{ 'Default' } } );<br>
my $delta = $bhours->between($t->ResolvedObj->Unix, $now->Unix);<br>
my $new_due = $bhours->add_seconds($t->DueObj->Unix, $delta);<br>
<br>
my $due_date = RT::Date->new( $RT::SystemUser );<br>
$due_date->Set(Format => 'unix', Value => $new_due );<br>
# finally set new due date<br>
my ($status, $msg) = $t->_Set(<br>
       Field => 'Due',<br>
       Value => $due_date->ISO,<br>
       RecordTransaction => 0<br>
);<br>
# if the two transitions (*->stalled and stalled->*) take place out of hours,<br>
# in the same interval, then $delta will be 0<br>
if( !($t->DueObj->Diff($due_date)) ) {<br>
    $RT::Logger->debug("Unable to set Due date to ticket #$id: new_due_date = old_due_date " . $due_date->ISO);<br>
}<br>
elsif ( !($status) )  {<br>
    $RT::Logger->error("Unable to set Due date to ticket #$id: $msg");<br>
    return 0;<br>
}<br>
# reset Resolved date<br>
($status, $msg) = $t->_Set(<br>
       Field => 'Resolved',<br>
       Value => 0,<br>
       RecordTransaction => 0<br>
);<br>
unless ( $status ) {<br>
    $RT::Logger->error("Unable to reset Resolved date to ticket #$id: $msg");<br>
}<br>
$RT::Logger->debug("Due date updated after un-stalling ticket #". $id );<br>
return 1;<br>
==============================</div>
<br>
<br>
<div align="left">
<p style="font-family:Calibri,Sans-Serif;font-size:10pt"><span style="font-weight:bold">Alberto Scotto</span>
<span style="color:#808080"></span><br>
<br>
<span><img alt="Blue" src="cid:bfeb0dedcce94e11bf9e9d043f8677dc" border="0" style="margin:0px">
</span><br>
<span style="color:#808080">Via Cardinal Massaia, 83<br>
10147 - Torino - ITALY <br>
phone: +39 011 29100 <br>
<a href="http://al.scotto@reply.it" style="color:blue;text-decoration:underline" target="_blank">al.scotto@reply.it</a>
<br>
<a title="" href="http://www.reply.it" style="color:blue;text-decoration:underline" target="_blank">www.reply.it</a>
</span><br>
 </p>
</div>
<br>
<hr>
<font color="Gray" face="Arial" size="1"><br>
--<br>
The information transmitted is intended for the person or entity to which it is addressed and may contain confidential and/or privileged material. Any review, retransmission, dissemination or other use of, or taking of any action in reliance upon, this information
 by persons or entities other than the intended recipient is prohibited. If you received this in error, please contact the sender and delete the material from any computer.<br>
</font></div>
</blockquote>
</div>
</div>
</div>
</div>
</div>
</div></div></div>
</div><div><div class="h5">
<br>
<hr>
<font face="Arial" color="Gray" size="1"><br>
--<br>
The information transmitted is intended for the person or entity to which it is addressed and may contain confidential and/or privileged material. Any review, retransmission, dissemination or other use of, or taking of any action in reliance upon, this information
 by persons or entities other than the intended recipient is prohibited. If you received this in error, please contact the sender and delete the material from any computer.<br>
</font>
</div></div></div>

</blockquote></div><br><br clear="all"><div><br></div>-- <br>Best regards, Ruslan.<br>