diff options
author | Jonathan Prykop <jonathan@freeside.biz> | 2016-10-14 20:49:38 -0500 |
---|---|---|
committer | Jonathan Prykop <jonathan@freeside.biz> | 2016-10-24 23:20:51 -0500 |
commit | 932a41248987b59d271994a209545280ef38498e (patch) | |
tree | 175be42d68b1210a2e6e9b9d36f1c7d5554c4061 | |
parent | bec799dce8edac137ad9b124629132afa94ef07c (diff) |
72901: OFM Freeside Note Classes [v3 merge]
-rw-r--r-- | FS/FS/Conf.pm | 6 | ||||
-rw-r--r-- | FS/FS/cust_main_note.pm | 8 | ||||
-rwxr-xr-x | httemplate/edit/cust_main_note.cgi | 7 | ||||
-rw-r--r-- | httemplate/elements/menu.html | 2 | ||||
-rw-r--r-- | httemplate/view/cust_main/notes/notes.html | 194 |
5 files changed, 105 insertions, 112 deletions
diff --git a/FS/FS/Conf.pm b/FS/FS/Conf.pm index d3d437db4..8e07c72bb 100644 --- a/FS/FS/Conf.pm +++ b/FS/FS/Conf.pm @@ -5747,11 +5747,7 @@ and customer address. Include units.', 'section' => 'UI', '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/cust_main_note.pm b/FS/FS/cust_main_note.pm index 44d99d8c4..1723951d1 100644 --- a/FS/FS/cust_main_note.pm +++ b/FS/FS/cust_main_note.pm @@ -5,6 +5,7 @@ use base qw( FS::otaker_Mixin FS::Record ); use Carp; use FS::Record qw( qsearch qsearchs ); use FS::cust_note_class; +use FS::Conf; =head1 NAME @@ -117,6 +118,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 a089db2d1..4cf502480 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 621165de4..f8d727efd 100644 --- a/httemplate/elements/menu.html +++ b/httemplate/elements/menu.html @@ -660,7 +660,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 fa45a68f2..f36d7d878 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,77 +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 &> - <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"> </TH> -% } - </TR> -% $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; @@ -157,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'); |