[freeside-commits] branch master updated. d4114381c5d95e8acd0d0fc2bbc2b3528bde2ecf

Jonathan Prykop jonathan at 420.am
Fri Oct 14 18:51:20 PDT 2016


The branch, master has been updated
       via  d4114381c5d95e8acd0d0fc2bbc2b3528bde2ecf (commit)
      from  c5a2d3613acdc3b9ab6f32eaf5316c2834071417 (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 d4114381c5d95e8acd0d0fc2bbc2b3528bde2ecf
Author: Jonathan Prykop <jonathan at freeside.biz>
Date:   Fri Oct 14 20:49:38 2016 -0500

    72901: OFM Freeside Note Classes

diff --git a/FS/FS/Conf.pm b/FS/FS/Conf.pm
index f4f7d26..a48125d 100644
--- a/FS/FS/Conf.pm
+++ b/FS/FS/Conf.pm
@@ -5419,11 +5419,7 @@ and customer address. Include units.',
     'section'     => 'customer_fields',
     'description' => 'Use customer note classes',
     'type'        => 'select',
-    'select_hash' => [
-                       0 => 'Disabled',
-		       1 => 'Enabled',
-		       2 => 'Enabled, with tabs',
-		     ],
+    'select_enum' => [ '', 'Enabled', 'Required' ],
   },
 
   {
diff --git a/FS/FS/Upgrade.pm b/FS/FS/Upgrade.pm
index c959ba9..1c1095e 100644
--- a/FS/FS/Upgrade.pm
+++ b/FS/FS/Upgrade.pm
@@ -178,6 +178,14 @@ If you need to continue using the old Form 477 report, turn on the
     $conf->set('cust-fields',$cust_fields);
   }
 
+  #repurposed
+  $conf->set('note-classes','Enabled')
+    if $conf->exists('note-classes')
+      and grep {$_ eq $conf->config('note-classes')} ('1','2');
+  $conf->set('note-classes','')
+    if $conf->exists('note-classes')
+      and '0' eq $conf->config('note-classes');
+
   enable_banned_pay_pad() unless length($conf->config('banned_pay-pad'));
 
   # if translate-auto-insert is enabled for a locale, ensure that invoice
diff --git a/FS/FS/cust_main_note.pm b/FS/FS/cust_main_note.pm
index ee63883..4c48eb6 100644
--- a/FS/FS/cust_main_note.pm
+++ b/FS/FS/cust_main_note.pm
@@ -4,6 +4,7 @@ use base qw( FS::otaker_Mixin FS::Record );
 use strict;
 use Carp;
 use FS::Record qw( qsearchs ); #qw( qsearch qsearchs );
+use FS::Conf;
 
 =head1 NAME
 
@@ -116,6 +117,13 @@ sub check {
   ;
   return $error if $error;
 
+  if (!$self->classnum) {
+    my $conf = new FS::Conf;
+    return 'Note class is required'
+      if $conf->exists('note-classes')
+        and $conf->config('note-classes') eq 'Required';
+  }
+
   $self->SUPER::check;
 }
 
diff --git a/httemplate/edit/cust_main_note.cgi b/httemplate/edit/cust_main_note.cgi
index c295e0d..cc93f24 100755
--- a/httemplate/edit/cust_main_note.cgi
+++ b/httemplate/edit/cust_main_note.cgi
@@ -6,14 +6,17 @@
 <INPUT TYPE="hidden" NAME="custnum" VALUE="<% $custnum %>">
 <INPUT TYPE="hidden" NAME="notenum" VALUE="<% $notenum %>">
 
-% if ($conf->exists('note-classes') && $conf->config('note-classes') > 0) {
+% if ($conf->exists('note-classes') && $conf->config('note-classes')) {
+%   my %includeopts = $conf->config('note-classes') eq 'Enabled'
+%                   ? ('empty_label' => '(unclassified)')
+%                   : ('disable_empty' => 1); # eq 'Required'
     Class  
 	<% include( '/elements/select-table.html',
                  'table'       => 'cust_note_class',
                  'name_col'    => 'classname',
                  'curr_value'  => $classnum,
-                 'empty_label' => '(none)',
                  'hashref'     => { 'disabled' => '' },
+                 %includeopts,
          ) %>
     <BR>
 % }
diff --git a/httemplate/elements/menu.html b/httemplate/elements/menu.html
index d6ea068..eb34e49 100644
--- a/httemplate/elements/menu.html
+++ b/httemplate/elements/menu.html
@@ -685,7 +685,7 @@ tie my %config_cust, 'Tie::IxHash',
 ;
   
 $config_cust{'Note classes'} = [ $fsurl.'browse/cust_note_class.html', 'Note classes define groups of customer notes for reporting.' ]
-    if ($conf->exists('note-classes') && $conf->config('note-classes') > 0);
+    if ($conf->exists('note-classes') && $conf->config('note-classes'));
 
 tie my %config_agent, 'Tie::IxHash',
   'Agent types' => [ $fsurl.'browse/agent_type.cgi', 'Agent types define groups of package definitions that you can then assign to particular agents' ],
diff --git a/httemplate/view/cust_main/notes/notes.html b/httemplate/view/cust_main/notes/notes.html
index eb421eb..f36d7d8 100644
--- a/httemplate/view/cust_main/notes/notes.html
+++ b/httemplate/view/cust_main/notes/notes.html
@@ -1,55 +1,81 @@
 % if ( scalar(@notes) ) {
-
 <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) {
+
+  var bgcolor1 = '#eeeeee';
+  var bgcolor2 = '#ffffff';
+  var sticky_color = { '#eeeeee' : '#ffff66',
+                       '#ffffff' : '#ffffb8' };
+  var notes_bgcolor = '';
+
+  var trs = document.getElementsByTagName("TR");
+  for (var i=0; i < trs.length; i++) {
+    if (trs[i].id.length > 6 && trs[i].id.substring(0,6) == 'notes_') {
+      if (( classnum == '-1' ) || ( trs[i].getAttribute('data-classnum') == classnum )) {
+        trs[i].style.display = 'table-row';
+        if ( notes_bgcolor == bgcolor1 ) {
+          notes_bgcolor = bgcolor2;
+        } else {
+          notes_bgcolor = bgcolor1;
+        }
+        trs[i].style.backgroundColor = (trs[i].getAttribute('data-sticky') == '1') ? sticky_color[notes_bgcolor] : notes_bgcolor;
+      } else {
+        trs[i].style.display = 'none';
+      }
+    }
+  }
+%   if ($note_classes_conf) {
+
+  var as = document.getElementsByTagName("a");
+  for (var i=0; i < as.length; i++) {
+    if(as[i].id.length > 14 && as[i].id.substring(0,14) == 'notes_tablink_') {
+      if(as[i].id == 'notes_tablink_'+classnum) {
+        as[i].style.fontWeight = 'bold';
+      } else {
+        as[i].style.fontWeight = 'normal';
+      }
     }
+  }
+%   } # if note_classes_conf
+
+}
 
 </SCRIPT>
 
   <& /elements/init_overlib.html &>
 
-% my $bgcolor1 = '#eeeeee';
-% my $bgcolor2 = '#ffffff';
-% my %sticky_color = ( '#eeeeee' => '#ffff66',
-%                      '#ffffff' => '#ffffb8',
-%                    );
-%
-% 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 ( $note_classes_conf ) {
+<% mt('Show notes of class:') |h %>   
+%   # list unclassified last
+% 	foreach my $classnum ( (grep { $_ != 0} sort { $a <=> $b } (keys %classes)), '0' ) {
+	    <A	id="notes_tablink_<% $classnum %>"
+		HREF="javascript:display_notes_classnum(<% $classnum %>)"
+		style="font-weight: <% $classnum == -1 ? 'bold' : 'normal' %>"
+	    ><% $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('Employee') |h %></TH>
+%   if ($note_classes_conf) {
+    <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"> </TH>
+%   }
+  </TR>
+
+% } # end if @notes
+
+% foreach my $note (@notes) {
 %
 %   my $pop = popurl(3);
 %   my $notenum = $note->notenum;
@@ -74,79 +100,32 @@
 %             '('.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 &>
-        <THEAD>
-	<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('Employee') |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"> </TH>
-%   }
-	</TR>
-        </THEAD>
-% $skipheader = (!$conf->exists('note-classes') || $conf->config('note-classes') < 2);
-% $last_classnum = $note->classnum;
-% }
-
-% my $color = $note->sticky ? $sticky_color{$bgcolor} : $bgcolor;
+    <TR ID="notes_<% $note->notenum %>"
+        data-sticky="<% $note->sticky ? 1 : 0 %>"
+        <% $note_classes_conf ? ' data-classnum="'.($note->classnum || 0).'"' : '' %>>
 
-    <TR>
-      <% note_datestr($note,$conf,$color) %>
-      <TD CLASS="grid" BGCOLOR="<% $color %>">
+      <% note_datestr($note,$conf) %>
+      <TD CLASS="grid">
          <% $note->usernum ? $note->access_user->name : $note->otaker %>
       </TD>
-% if ($conf->exists('note-classes') && $conf->config('note-classes') == 1) {
-      <TD CLASS="grid" BGCOLOR="<% $color %>">
+%   if ($note_classes_conf) {
+      <TD CLASS="grid">
 	<% $note->classname %>   
       </TD>
-% }
-      <TD CLASS="grid" BGCOLOR="<% $color %>">
+%   }
+      <TD CLASS="grid">
         <% $note->comments | defang %>
       </TD>
-% if($edit) {
-      <TD CLASS="grid" BGCOLOR="<% $color %>"><% $edit %></TD>
-% }
+%   if ($edit) {
+      <TD CLASS="grid"><% $edit %></TD>
+%   }
     </TR>
-
-% } #end display notes
+% } #end foreach note
 
 </TABLE>
-</DIV>
 
-% if ( $conf->exists('note-classes') && $conf->config('note-classes') == 2 ) {
-% 	my($classnum,$classname);
-<% mt('Show notes of class:') |h %>   
-% 	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>
 
-% }
 <%init>
 
 use HTML::Defang;
@@ -159,13 +138,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 $note_classes_conf = $conf->exists('note-classes') ? $conf->config('note-classes') : '';
+
+my (@notes) = $cust_main->notes();
+
+my %classes = map { ($_->classnum || 0) => ( $_->classname ne '' ? $_->classname : '('.emt('unclassified').')' ) } @notes;
+$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 %o, %Y</TD>";
   $format .= "$td%l:%M%P</TD>"
     if $conf->exists('cust_main_note-display_times');

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

Summary of changes:
 FS/FS/Conf.pm                              |    6 +-
 FS/FS/Upgrade.pm                           |    8 ++
 FS/FS/cust_main_note.pm                    |    8 ++
 httemplate/edit/cust_main_note.cgi         |    7 +-
 httemplate/elements/menu.html              |    2 +-
 httemplate/view/cust_main/notes/notes.html |  196 +++++++++++++---------------
 6 files changed, 113 insertions(+), 114 deletions(-)




More information about the freeside-commits mailing list