display N most recent emails in customer view, #30164
authorMark Wells <mark@freeside.biz>
Wed, 6 May 2015 23:43:45 +0000 (16:43 -0700)
committerMark Wells <mark@freeside.biz>
Wed, 6 May 2015 23:57:43 +0000 (16:57 -0700)
httemplate/pref/pref-process.html
httemplate/pref/pref.html
httemplate/search/cust_msg.html
httemplate/search/elements/search.html
httemplate/view/cust_main/notes.html
httemplate/view/cust_main/notes/email.html [new file with mode: 0644]

index cd400ee..68f0f6e 100644 (file)
@@ -55,6 +55,7 @@ unless ( $error ) { # if ($access_user) {
                       enable_fuzzy_on_exact
                       disable_html_editor disable_enter_submit_onetimecharge
                       enable_mask_clipboard_hack dashboard_customers
+                      customer_view_emails
                       email_address
                       snom-ip snom-username snom-password
                       vonage-fromnumber vonage-username vonage-password
index 5e722b0..ffc90fd 100644 (file)
@@ -151,6 +151,15 @@ Interface
     </TD>
   </TR>
 
+  <TR>
+    <TH ALIGN="right">How many recent outbound emails to show in customer view</TH>
+    <TD ALIGN="left" COLSPAN=2>
+      <INPUT TYPE="text" NAME="customer_view_emails" VALUE="<% $curuser->option('customer_view_emails') %>"></TD>
+    </TD>
+  </TR>
+
+
+
 </TABLE>
 <BR>
 
index d5b865c..401f52e 100644 (file)
@@ -47,7 +47,7 @@
                           ],
        'html_init'     => $html_init,
        'really_disable_download' => 1,
-       @_ #why?
+       'order_by'      => '_date DESC',
 &>
 <%init>
 #hmm...
index 62a0e47..64f3a66 100644 (file)
@@ -386,10 +386,7 @@ unless ( $type =~ /^(csv|xml|\w*.xls)$/) {
 }
 
 #order by override
-my $order_by = '';
-#if ( $cgi->param('order_by') =~ /^([\w\, ]+)$/ ) {
-#  $order_by = $1;
-#}
+my $order_by = $opt{order_by} || '';
 $order_by = $cgi->param('order_by') if $cgi->param('order_by');
 
 # run the query
@@ -415,6 +412,8 @@ if ( ref($opt{query}) ) {
       }
     }
 
+    $opt{query}->{'order_by'} .= " $limit";
+
   } elsif (ref($opt{query}) eq 'ARRAY') {
     @query = @{ $opt{query} };
   } else {
@@ -434,7 +433,7 @@ if ( ref($opt{query}) ) {
                            }
                        @query
                      ],
-                     'order_by' => $opt{order_by}. " ". $limit,
+                     #'order_by' => $opt{order_by}. " ". $limit,
                    )
           ]; 
 } else {
index 1cd6e09..deba956 100755 (executable)
 % if ( $curuser->access_right('View email logs')
 %      and FS::cust_msg->count("custnum = $custnum")) {
 <BR>
-%   if (!$cgi->param('order_by')) {
-%     my $order_by = '_date';
-%     $order_by .= ' DESC' if $curuser->option('history_order') eq 'newest';
-%     $cgi->param('order_by', $order_by);
-%   }
-<& /search/cust_msg.html,
-  nohtmlheader  => 1,
-  html_init     => mt('Mail sent to this customer: '),
-&>
+<& notes/email.html, 'cust_main' => $cust_main &>
+<BR>
 % }
 <%init>
 
diff --git a/httemplate/view/cust_main/notes/email.html b/httemplate/view/cust_main/notes/email.html
new file mode 100644 (file)
index 0000000..da2c352
--- /dev/null
@@ -0,0 +1,106 @@
+% if ( scalar(@rows) ) {
+<STYLE type="text/css">
+#cust_msg td.grid a:link {text-decoration: none}
+#cust_msg td.grid a:visited {text-decoration: none}
+#cust_msg td.grid a:hover {text-decoration: underline}
+#cust_msg th {background-color: #cccccc}
+.row0 {background-color: #eeeeee}
+.row1 {background-color: #ffffff}
+</STYLE>
+<DIV id="cust_msg">
+<FONT SIZE="+1"> <% mt('Email sent to this customer') %> </FONT><BR>
+%   if ($maxrecords < $total) {
+<% mt('Showing [_1] most recent of [quant,_2,total message]', $maxrecords, $total) %>
+  <A HREF="<%$p%>search/cust_msg.html?custnum=<%$custnum%>">
+  <i>(<% mt('view all') %>)</i>
+  </A>
+%   } else {
+<% mt('[quant,_1,total message]', $total) %>
+%   }
+<BR>
+<& /elements/table-grid.html &>
+  <TR>
+    <TH CLASS="grid"><% mt('Date') %></TH>
+    <TH CLASS="grid"><% mt('Type') %></TH>
+    <TH CLASS="grid"><% mt('Destination') %></TH>
+    <TH CLASS="grid"><% mt('Subject') %></TH>
+    <TH CLASS="grid"></TH>
+  </TR>
+%   my $i = 0;
+%   foreach my $row (@rows) {
+%     my $onclick = $sub_popup_link->($row);
+%     my $link = qq!<A onclick="$onclick">!;
+  <TR CLASS="row<%$i%>">
+    <TD CLASS="grid"><% $link %>
+      <% $row->_date ? time2str('%Y-%m-%d %T', $row->_date) : '' %>
+    </A></TD>
+    <TD CLASS="grid" STYLE="color: <% $typecolor->($row) %>"><% $link %>
+      <% ucfirst($row->msgtype) || $row->msgname %>
+    </A></TD>
+    <TD CLASS="grid"><% $link %>
+      <% join('<BR>', split(/,\s*/, $row->env_to)) %>
+    </A></TD>
+    <TD CLASS="grid" STYLE="color: <% $statuscolor->($row) %>">
+      <% $row->status %>
+    </TD>
+    <TD CLASS="grid">
+      <% $row->error |h %>
+    </TD>
+  </TR>
+%     $i = 1 - $i;
+%   }
+</TABLE>
+</DIV>
+% }
+<%init>
+my %opt = @_;
+
+my $curuser = $FS::CurrentUser::CurrentUser;
+my $cust_main = $opt{'cust_main'}
+  or die "cust_main required";
+my $custnum = $cust_main->custnum;
+
+my $where = "WHERE cust_msg.custnum = $custnum";
+my $maxrecords = $curuser->option('customer_view_emails') || 10;
+
+my $order_by = '_date DESC';
+
+my $query = {
+  'table'     => 'cust_msg',
+  'select'    => join(', ',
+                   'cust_msg.*',
+                   'msg_template.msgname',
+                 ),
+  'addl_from' => ' LEFT JOIN msg_template USING ( msgnum ) ',
+  'hashref'   => {},
+  'extra_sql' => $where,
+  'order_by'  => "ORDER BY $order_by LIMIT $maxrecords",
+};
+my $count_query = "SELECT COUNT(*) FROM cust_msg $where";
+
+my @rows = qsearch($query);
+my $total = FS::Record->scalar_sql($count_query);
+
+my $sub_popup_link = sub {
+  my $custmsgnum = $_[0]->custmsgnum;
+  include('/elements/popup_link_onclick.html',
+    'action'      => $p. 'view/cust_msg.html?' . $custmsgnum,
+    'actionlabel' => 'Message detail',
+    'width'       => 680,
+    'height'      => 550,
+  );
+};
+
+my %color = (
+  'failed'   => '#FF0000',
+  'sent'     => '#000000',
+
+  'invoice'  => '#00CC00',
+  'receipt'  => '#0000CC',
+  'admin'    => '#CC0000',
+  ''         => '#000000',
+);
+my $statuscolor = sub { $color{$_[0]->status} };
+my $typecolor = sub { $color{$_[0]->msgtype} };
+
+</%init>