[freeside-commits] branch FREESIDE_4_BRANCH updated. b8ef252dd1dd11fb151d75d18e47528851efc2a5

Mark Wells mark at 420.am
Mon Jun 13 13:32:07 PDT 2016


The branch, FREESIDE_4_BRANCH has been updated
       via  b8ef252dd1dd11fb151d75d18e47528851efc2a5 (commit)
       via  3930c1746e7743bf4e9e9ae2f103b6275b0fb728 (commit)
       via  c3217834a42fa68de630a2d6d518742f94714aed (commit)
       via  f136b7059017863e2ff4819376c42fe5869b2042 (commit)
       via  603701ab0bbee8dd44b1a27cd7f527e8e8be8c6e (commit)
      from  ca55bb70ef502d50c088201fc6ded73907e5d5e1 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit b8ef252dd1dd11fb151d75d18e47528851efc2a5
Merge: 3930c17 ca55bb7
Author: Mark Wells <mark at freeside.biz>
Date:   Mon Jun 13 13:31:34 2016 -0700

    Merge branch 'FREESIDE_4_BRANCH' of git.freeside.biz:/home/git/freeside into 4.x


commit 3930c1746e7743bf4e9e9ae2f103b6275b0fb728
Author: Mark Wells <mark at freeside.biz>
Date:   Sat Jun 11 23:19:11 2016 -0700

    show unreplied ticket marker in queue summary, #41670

diff --git a/rt/lib/RT/Search/UnrepliedTickets.pm b/rt/lib/RT/Search/UnrepliedTickets.pm
index 4bb59d9..12d847a 100644
--- a/rt/lib/RT/Search/UnrepliedTickets.pm
+++ b/rt/lib/RT/Search/UnrepliedTickets.pm
@@ -30,10 +30,14 @@ sub Prepare  {
   my $self = shift;
 
   my $TicketsObj = $self->TicketsObj;
-  $TicketsObj->Limit(
-    FIELD => 'Owner',
-    VALUE => $TicketsObj->CurrentUser->id
-  );
+  # if SystemUser does this search (as in QueueSummaryByLifecycle), they
+  # should get all tickets regardless of ownership
+  if ($TicketsObj->CurrentUser->id != RT->SystemUser->id) {
+    $TicketsObj->Limit(
+      FIELD => 'Owner',
+      VALUE => $TicketsObj->CurrentUser->id
+    );
+  }
   $TicketsObj->Limit(
     FIELD => 'Status',
     OPERATOR => '!=',
diff --git a/rt/share/html/Elements/QueueSummaryByLifecycle b/rt/share/html/Elements/QueueSummaryByLifecycle
index f21cb20..d6ed1e6 100644
--- a/rt/share/html/Elements/QueueSummaryByLifecycle
+++ b/rt/share/html/Elements/QueueSummaryByLifecycle
@@ -66,9 +66,13 @@ for my $queue (@queues) {
     next if lc($queue->{Lifecycle} || '') ne lc $lifecycle->Name;
 
     $i++;
+
+    my $classes = $i%2 ? 'oddline' : 'evenline';
+    $classes .= ' unreplied-ticket' if $queue->{Unreplied} > 0;
 </%PERL>
-<tr class="<% $i%2 ? 'oddline' : 'evenline'%>" >
+<tr class="<% $classes %>">
 
+<td></td>
 <td>
     <a href="<% $link_all->($queue, \@cur_statuses) %>" title="<% $queue->{Description} %>"><% $queue->{Name} %></a>
 </td>
@@ -134,6 +138,24 @@ for my $queue (@queues) {
     $lifecycle{ lc $cycle->Name } = $cycle;
 }
 
+use RT::Search::UnrepliedTickets;
+my $Tickets = RT::Tickets->new( RT->SystemUser );
+my $Search = RT::Search::UnrepliedTickets->new( TicketsObj => $Tickets );
+$Search->Prepare;
+
+for my $queue (@queues) {
+    my $cycle = RT::Lifecycle->Load( Name => $queue->{'Lifecycle'} );
+    $lifecycle{ lc $cycle->Name } = $cycle;
+
+    # show whether there are unreplied tickets
+    # somewhat inefficient but we only use the count query
+    my $tix = $Tickets->Clone;
+    $tix->Limit(FIELD => 'Queue',
+                OPERATOR => '=',
+                VALUE => $queue->{id});
+    $queue->{Unreplied} = $tix->Count;
+}
+
 unless (@statuses) {
     my %seen;
     foreach my $set ( 'initial', 'active' ) {
diff --git a/rt/share/static/css/freeside4/ticket-lists.css b/rt/share/static/css/freeside4/ticket-lists.css
index 42b343b..3d4706f 100644
--- a/rt/share/static/css/freeside4/ticket-lists.css
+++ b/rt/share/static/css/freeside4/ticket-lists.css
@@ -90,8 +90,7 @@ tr.unreplied-ticket > :first-child::before {
     width: 1ex;
     float: left;
     content: '';
-    margin-top: 0 auto;
-    margin-bottom: 0 auto;
+    margin-right: 1ex;
     background-color: green;
 }
 

commit c3217834a42fa68de630a2d6d518742f94714aed
Author: Mark Wells <mark at freeside.biz>
Date:   Sat Jun 11 12:24:59 2016 -0700

    show unreplied ticket marker in customer ticket lists, #41670

diff --git a/FS/FS/TicketSystem/RT_Internal.pm b/FS/FS/TicketSystem/RT_Internal.pm
index 1c4513e..ffee484 100644
--- a/FS/FS/TicketSystem/RT_Internal.pm
+++ b/FS/FS/TicketSystem/RT_Internal.pm
@@ -240,7 +240,8 @@ sub service_tickets  {
 sub _ticket_info {
   # Takes an RT::Ticket; returns a hashref of the ticket's fields, including 
   # custom fields.  Also returns custom and selfservice priority values as 
-  # _custom_priority and _selfservice_priority.
+  # _custom_priority and _selfservice_priority, and the IsUnreplied property
+  # as is_unreplied.
   my $t = shift;
 
   my $custom_priority = 
@@ -265,6 +266,7 @@ sub _ticket_info {
   if ( $ss_priority ) {
     $ticket_info{'_selfservice_priority'} = $ticket_info{"CF.{$ss_priority}"};
   }
+  $ticket_info{'is_unreplied'} = $t->IsUnreplied;
   my $svcnums = [ 
     map { $_->Target =~ /cust_svc\/(\d+)/; $1 } 
         @{ $t->Services->ItemsArrayRef }
diff --git a/httemplate/elements/freeside-menu.css b/httemplate/elements/freeside-menu.css
index a66ebc0..365b9d4 100644
--- a/httemplate/elements/freeside-menu.css
+++ b/httemplate/elements/freeside-menu.css
@@ -142,3 +142,13 @@ a:visited:hover.fsdarkbutton {
          overflow:visible;
 }
 
+
+/* elements/notify-tickets.html is in the menu area */
+.dot {
+  border-radius: 50%;
+  border: 1px solid black;
+  width: 1ex;
+  height: 1ex;
+  display: inline-block;
+  margin-top: 0.3ex;
+}
diff --git a/httemplate/elements/freeside.css b/httemplate/elements/freeside.css
index 7bf374c..fb5e7d9 100644
--- a/httemplate/elements/freeside.css
+++ b/httemplate/elements/freeside.css
@@ -341,3 +341,5 @@ div.package-marker-change_from {
   border-left: solid #bbffbb 30px;
   display: inline-block;
 }
+
+
diff --git a/httemplate/elements/notify-tickets.html b/httemplate/elements/notify-tickets.html
index faf998e..e661737 100644
--- a/httemplate/elements/notify-tickets.html
+++ b/httemplate/elements/notify-tickets.html
@@ -1,13 +1,4 @@
 % if ($enabled) {
-<style>
-.dot {
-  border-radius: 50%;
-  border: 1px solid black;
-  width: 1ex;
-  height: 1ex;
-  display: inline-block;
-}
-</style>
 <div style="font-weight: bold; vertical-align: bottom; text-align: left">
 %   if ( $UnrepliedTickets->Count > 0 ) {
   <a href="<% $fsurl %>rt/Search/UnrepliedTickets.html">
diff --git a/httemplate/elements/table-tickets.html b/httemplate/elements/table-tickets.html
index d722c9d..b322a5f 100644
--- a/httemplate/elements/table-tickets.html
+++ b/httemplate/elements/table-tickets.html
@@ -14,6 +14,7 @@ View
 
 <THEAD>
 <TR>
+  <TH CLASS="grid" BGCOLOR="#cccccc"></TH>
   <TH CLASS="grid" BGCOLOR="#cccccc"><% mt('#') |h %></TH>
   <TH CLASS="grid" BGCOLOR="#cccccc"><% mt('Subject') |h %></TH>
   <TH CLASS="grid" BGCOLOR="#cccccc"><% mt('Status') |h %></TH>
@@ -42,6 +43,16 @@ View
   <TR>
   
     <TD CLASS="grid" BGCOLOR="<% $bgcolor %>">
+%     if ( $ticket->{is_unreplied} ) {
+        <A CLASS="dot" STYLE="background-color: green" HREF=<%$href%>>
+%     } else {
+%       # placeholder
+        <A CLASS="dot" STYLE="visibility: hidden" HREF=<%$href%>>
+%     }
+      </A>
+    </TD>
+
+    <TD CLASS="grid" BGCOLOR="<% $bgcolor %>">
       <A HREF=<%$href%>><% $ticket->{id} %></A>
     </TD>
   

commit f136b7059017863e2ff4819376c42fe5869b2042
Author: Mark Wells <mark at freeside.biz>
Date:   Sat Jun 11 12:24:29 2016 -0700

    show unreplied marker in RT searches, #41670

diff --git a/rt/lib/RT/Ticket_Vendor.pm b/rt/lib/RT/Ticket_Vendor.pm
index a55bb7b..4a78838 100644
--- a/rt/lib/RT/Ticket_Vendor.pm
+++ b/rt/lib/RT/Ticket_Vendor.pm
@@ -92,5 +92,28 @@ sub WillResolveAsString {
   return $self->WillResolveObj->AsString();
 }
 
+=head2 IsUnreplied
+
+Returns true if there's a Correspond or Create transaction more recent than
+the Told date of this ticket (or the ticket has no Told date) and the ticket
+is not rejected or resolved.
+
+=cut
+
+sub IsUnreplied {
+  my $self = shift;
+  return 0 if $self->Status eq 'resolved'
+           or $self->Status eq 'rejected';
+
+  my $Told = $self->Told || '1970-01-01';
+  my $Txns = $self->Transactions;
+  $Txns->Limit(FIELD => 'Type',
+               OPERATOR => 'IN',
+               VALUE => [ 'Correspond', 'Create' ]);
+  $Txns->Limit(FIELD => 'Created',
+               OPERATOR => '>',
+               VALUE => $Told);
+  $Txns->Count ? 1 : 0;
+}
 
 1;
diff --git a/rt/share/html/Elements/CollectionAsTable/Row b/rt/share/html/Elements/CollectionAsTable/Row
index deaa312..4b2cfae 100644
--- a/rt/share/html/Elements/CollectionAsTable/Row
+++ b/rt/share/html/Elements/CollectionAsTable/Row
@@ -57,6 +57,11 @@ $Class     => 'RT__Ticket'
 $Classes => ''
 </%ARGS>
 <%init>
+# it's a hack, but it has to be applied in every ticket search regardless
+# of format, so...
+if ( $record and $record->isa('RT::Ticket') and $record->IsUnreplied ) {
+  $Classes .= ' unreplied-ticket';
+}
 $m->out(  '<tr class="' . $Classes . ' '
         . ( $Warning ? 'warnline' : $i % 2 ? 'oddline' : 'evenline' ) . '" >'
         . "\n" );
diff --git a/rt/share/static/css/freeside3/ticket-lists.css b/rt/share/static/css/freeside3/ticket-lists.css
index 84c9a92..257cf3b 100644
--- a/rt/share/static/css/freeside3/ticket-lists.css
+++ b/rt/share/static/css/freeside3/ticket-lists.css
@@ -99,8 +99,18 @@ tr.collection-as-table+tr.collection-as-table th {
 
 }
 
-
-
+tr.unreplied-ticket > :first-child::before {
+  /* green dot */
+    border: 1px solid black;
+    border-radius: 50%;
+    display: inline-block;
+    height: 1ex;
+    width: 1ex;
+    float: left;
+    content: '';
+    margin-top: 1ex;
+    background-color: green;
+}
 
 table.queue-summary td {
   background: #efefef;
diff --git a/rt/share/static/css/freeside4/ticket-lists.css b/rt/share/static/css/freeside4/ticket-lists.css
index cdf1019..42b343b 100644
--- a/rt/share/static/css/freeside4/ticket-lists.css
+++ b/rt/share/static/css/freeside4/ticket-lists.css
@@ -81,6 +81,20 @@ table.collection-as-table.chart th {
     border-bottom: 2px solid #ccc
 }
 
+tr.unreplied-ticket > :first-child::before {
+  /* green dot */
+    border: 1px solid black;
+    border-radius: 50%;
+    display: inline-block;
+    height: 1ex;
+    width: 1ex;
+    float: left;
+    content: '';
+    margin-top: 0 auto;
+    margin-bottom: 0 auto;
+    background-color: green;
+}
+
 table.queue-summary td {
     background: #efefef;
     border-bottom: 1px solid #ccc;

commit 603701ab0bbee8dd44b1a27cd7f527e8e8be8c6e
Author: Mark Wells <mark at freeside.biz>
Date:   Sat Jun 11 12:23:54 2016 -0700

    hide unreplied status for Rejected tickets, #41670

diff --git a/rt/lib/RT/Search/UnrepliedTickets.pm b/rt/lib/RT/Search/UnrepliedTickets.pm
index a996901..4bb59d9 100644
--- a/rt/lib/RT/Search/UnrepliedTickets.pm
+++ b/rt/lib/RT/Search/UnrepliedTickets.pm
@@ -6,9 +6,9 @@
 
 =head1 DESCRIPTION
 
-Find all unresolved tickets owned by the current user where the last correspondence
-from a requestor (or ticket creation) is more recent than the last
-correspondence from a non-requestor (if there is any).
+Find all unresolved tickets owned by the current user where the last
+correspondence from a requestor (or ticket creation) is more recent than the
+last correspondence from a non-requestor (if there is any).
 
 =head1 METHODS
 
@@ -39,6 +39,11 @@ sub Prepare  {
     OPERATOR => '!=',
     VALUE => 'resolved'
   );
+  $TicketsObj->Limit(
+    FIELD => 'Status',
+    OPERATOR => '!=',
+    VALUE => 'rejected',
+  );
   my $txn_alias = $TicketsObj->JoinTransactions;
   $TicketsObj->Limit(
     ALIAS => $txn_alias,

-----------------------------------------------------------------------

Summary of changes:
 FS/FS/TicketSystem/RT_Internal.pm              |    4 +++-
 httemplate/elements/freeside-menu.css          |   10 ++++++++++
 httemplate/elements/freeside.css               |    2 ++
 httemplate/elements/notify-tickets.html        |    9 ---------
 httemplate/elements/table-tickets.html         |   11 +++++++++++
 rt/lib/RT/Search/UnrepliedTickets.pm           |   21 +++++++++++++++------
 rt/lib/RT/Ticket_Vendor.pm                     |   23 +++++++++++++++++++++++
 rt/share/html/Elements/CollectionAsTable/Row   |    5 +++++
 rt/share/html/Elements/QueueSummaryByLifecycle |   24 +++++++++++++++++++++++-
 rt/share/static/css/freeside3/ticket-lists.css |   14 ++++++++++++--
 rt/share/static/css/freeside4/ticket-lists.css |   13 +++++++++++++
 11 files changed, 117 insertions(+), 19 deletions(-)




More information about the freeside-commits mailing list