72901: OFM Freeside Note Classes [additional v3 tweaks]
[freeside.git] / httemplate / view / cust_main / notes / notes.html
old mode 100755 (executable)
new mode 100644 (file)
index 6a7a06a..1da0b3c
@@ -1,51 +1,66 @@
 % if ( scalar(@notes) ) {
-
+<SCRIPT SRC="<% $fsurl %>elements/jquery.js"></SCRIPT>
 <SCRIPT TYPE="text/javascript">
 
-    function display_notes_classnum(classnum){
-       document.getElementById('notes_'+classnum).style.display = 'block';
-       document.getElementById('notes_tablink_'+classnum).style.fontWeight = 'bold';
-
-       var divs = document.getElementsByTagName("div");
-       var i;
-       for(i=0; i < divs.length; i++){
-           var d = divs[i];
-           if(d.id.length > 6 && d.id.substring(0,6) == 'notes_') {
-               if(divs[i].id != 'notes_'+classnum) {
-                   divs[i].style.display = 'none';
-               }
-           }
-       }
-       
-       var as = document.getElementsByTagName("a");
-       for(i=0; i < as.length; i++){
-           var a = as[i];
-           if(a.id.length > 14 && a.id.substring(0,14) == 'notes_tablink_') {
-               if(as[i].id != 'notes_tablink_'+classnum) {
-                   as[i].style.fontWeight = 'normal';
-               }
-           }
-       }
-    }
-
+function display_notes_classnum (classnum) {
+  // hide/show
+  var $custnote = $('.custnote');
+  if (classnum >= 0) {
+    $custnote.hide();
+    $('tr[data-classnum=' + classnum + ']').show();
+  } else {
+    $custnote.show();
+  }
+  // restripe
+  var $shownote = $custnote.filter(':visible');
+  var $shownote_even = $shownote.filter(':even');
+  var $shownote_odd = $shownote.filter(':odd');
+  $shownote_even.css('background-color','#eeeeee');
+  $shownote_even.filter('.stickynote').css('background-color','#ffff66');
+  $shownote_odd.css('background-color','#ffffff');
+  $shownote_odd.filter('.stickynote').css('background-color','#ffffb8');
+%   if ($use_class_tabs) {
+  // update links
+  var $tablink = $('.notes_tablink');
+  $tablink.css('font-weight','normal');
+  $tablink.filter('a[data-classnum=' + classnum + ']').css('font-weight','bold');
+%   }
+}
 </SCRIPT>
 
   <& /elements/init_overlib.html &>
 
-% my $bgcolor1 = '#eeeeee';
-% my $bgcolor2 = '#ffffff';
-% my $bgcolor = '';
-% my $last_classnum = -1;
-% my $skipheader = 0;
-% my %classes = ();
-%
-% foreach my $note (@notes) {
-%
-%   if ( $bgcolor eq $bgcolor1 ) {
-%     $bgcolor = $bgcolor2;
-%   } else {
-%     $bgcolor = $bgcolor1;
+%   if ( $use_class_tabs ) {
+<% mt('Show notes of class:') |h %> &nbsp; 
+%   # list unclassified last
+%        foreach my $classnum ( (grep { $_ != 0} sort { $a <=> $b } (keys %classes)), '0' ) {
+           <A CLASS="notes_tablink"
+        data-classnum="<% $classnum %>"
+               HREF="javascript:display_notes_classnum(<% $classnum %>)"
+           ><% $classes{$classnum} %></A>
+%        }
+    <BR>
+%   }
+
+<& /elements/table-grid.html &>
+  <TR>
+    <TH CLASS="grid" BGCOLOR="#cccccc" STYLE="padding: 0 1em"><% mt('Date') |h %></TH>
+%   if ( $conf->exists('cust_main_note-display_times') ) {
+    <TH CLASS="grid" BGCOLOR="#cccccc" STYLE="padding: 0 1em"><% mt('Time') |h %></TH>
+%   }
+    <TH CLASS="grid" BGCOLOR="#cccccc" STYLE="padding: 0 1em"><% mt('Person') |h %></TH>
+%   if ($use_classes) {
+    <TH CLASS="grid" BGCOLOR="#cccccc" STYLE="padding: 0 1em"><% mt('Class') |h %></TH>
 %   }
+    <TH CLASS="grid" BGCOLOR="#cccccc" STYLE="padding: 0 1em"><% mt('Note') |h %></TH>
+%   if ($curuser->access_right('Edit customer note') ) {
+    <TH CLASS="grid" BGCOLOR="#cccccc" STYLE="padding: 0 1em">&nbsp;</TH>
+%   }
+  </TR>
+
+% } # end if @notes
+
+% foreach my $note (@notes) {
 %
 %   my $pop = popurl(3);
 %   my $notenum = $note->notenum;
@@ -56,7 +71,7 @@
 %                                             ";notenum=$notenum",
 %                            'actionlabel' => emt('Edit customer note'),
 %                            'width'       => 616,
-%                            'height'      => 538, #575
+%                            'height'      => 575,
 %                            'frame'       => 'top',
 %                        );
 %   my $clickjs = qq!onclick="$onclick"!;
 %             '('.emt('delete').')</A>';
 %   }
 %
-% if ( $last_classnum != $note->classnum && !$skipheader ) {
-% my $tmp_classnum = $note->classnum ? $note->classnum : 0;
-% $classes{$tmp_classnum} = $note->classname ne '' ? $note->classname 
-%                                                   : emt('Other');
-% if ( $last_classnum != -1 ) {
-    </TABLE>
-  </DIV>
-% }
-% my $display = ($tmp_classnum == 0 || !$conf->exists('note-classes') 
-%                                  || $conf->config('note-classes') < 2) 
-%                                                          ? 'block' : 'none';
-       <DIV    id="notes_<% $tmp_classnum %>"
-               style="display:<% $display %>"
-       >
-       <& /elements/table-grid.html &>
-       <TR>
-           <TH CLASS="grid" BGCOLOR="#cccccc"><% mt('Date') |h %></TH>
-%   if ( $conf->exists('cust_main_note-display_times') ) {
-           <TH CLASS="grid" BGCOLOR="#cccccc"><% mt('Time') |h %></TH>
-%   }
-           <TH CLASS="grid" BGCOLOR="#cccccc"><% mt('Person') |h %></TH>
-%   if ($conf->exists('note-classes') && $conf->config('note-classes') == 1) {
-           <TH CLASS="grid" BGCOLOR="#cccccc"><% mt('Class') |h %></TH>
-%   }
-           <TH CLASS="grid" BGCOLOR="#cccccc"><% mt('Note') |h %></TH>
-%   if ($curuser->access_right('Edit customer note') ) {
-           <TH CLASS="grid" BGCOLOR="#cccccc">&nbsp;</TH>
-%   }
-       </TR>
-% $skipheader = (!$conf->exists('note-classes') || $conf->config('note-classes') < 2);
-% $last_classnum = $note->classnum;
-% }
+    <TR CLASS="grid custnote<% $note->sticky ? ' stickynote' : '' %>"
+        <% $use_class_tabs ? ' data-classnum="'.($note->classnum || 0).'"' : '' %>>
 
-    <TR>
-      <% note_datestr($note,$conf,$bgcolor) %>
-      <TD CLASS="grid" BGCOLOR="<% $bgcolor %>">
+      <% note_datestr($note,$conf) %>
+      <TD CLASS="grid">
         &nbsp;<% $note->usernum ? $note->access_user->name : $note->otaker %>
       </TD>
-% if ($conf->exists('note-classes') && $conf->config('note-classes') == 1) {
-      <TD CLASS="grid" BGCOLOR="<% $bgcolor %>">
+%   if ($use_classes) {
+      <TD CLASS="grid">
        <% $note->classname %>   
       </TD>
-% }
-      <TD CLASS="grid" BGCOLOR="<% $bgcolor %>">
+%   }
+      <TD CLASS="grid">
         <% $note->comments | defang %>
       </TD>
-% if($edit) {
-      <TD CLASS="grid" BGCOLOR="<% $bgcolor %>"><% $edit %></TD>
-% }
+%   if ($edit) {
+      <TD CLASS="grid"><% $edit %></TD>
+%   }
     </TR>
+% } #end foreach note
 
-% } #end display notes
-
+% if (@notes) {
 </TABLE>
-</DIV>
 
-% if ( $conf->exists('note-classes') && $conf->config('note-classes') == 2 ) {
-%      my($classnum,$classname);
-<% mt('Show notes of class:') |h %> &nbsp; 
-%      foreach my $classnum ( sort { $b <=> $a } (keys %classes) ) {
-           <A  id="notes_tablink_<% $classnum %>"
-               HREF="javascript:display_notes_classnum(<% $classnum %>)"
-               style="font-weight: <% $classnum == 0 ? 'bold' : 'normal' %>"
-           ><% $classes{$classnum} %></A>
-%      }
-    <BR>
+<SCRIPT>display_notes_classnum('-1')</SCRIPT>
+% } else {
+<P><I><% emt('No notes for this customer') %></I></P>
 % }
 
-% }
 <%init>
 
 use HTML::Defang;
@@ -151,13 +126,18 @@ my(%opt) = @_;
 my $cust_main = $opt{'cust_main'};
 my $custnum = $cust_main->custnum;
 
-my (@notes) = $cust_main->notes($conf->exists('note-classes') && $conf->config('note-classes') == 2);
+my (@notes) = $cust_main->notes();
+
+my %classes = map { ($_->classnum || 0) => ( $_->classname ne '' ? $_->classname : '('.emt('unclassified').')' ) } @notes;
+my $use_classes = grep { $_ > 0 } keys %classes;  # show class column
+my $use_class_tabs = (keys %classes > 1) ? 1 : 0; # use class tabs
+$classes{'-1'} = 'All';
 
 #subroutines
 
 sub note_datestr {
-  my($note, $conf, $bgcolor) = @_ or return '';
-  my $td = qq{<TD CLASS="grid" BGCOLOR="$bgcolor" ALIGN="right">};
+  my($note, $conf) = @_ or return '';
+  my $td = qq{<TD CLASS="grid" ALIGN="right">};
   my $format = "$td%b&nbsp;%o,&nbsp;%Y</TD>";
   $format .= "$td%l:%M%P</TD>"
     if $conf->exists('cust_main_note-display_times');