summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Prykop <jonathan@freeside.biz>2016-10-14 20:49:38 -0500
committerJonathan Prykop <jonathan@freeside.biz>2016-10-24 22:56:05 -0500
commit47625b00ce71ca8d0e8b3e18458864c9d6ae9006 (patch)
treeb52a7c40c7addb8efa16e9271446e8df06557152
parentf7a89831184a190064628668183c04250b43dd97 (diff)
72901: OFM Freeside Note Classes
-rw-r--r--FS/FS/Conf.pm6
-rw-r--r--FS/FS/Upgrade.pm8
-rw-r--r--FS/FS/cust_main_note.pm8
-rwxr-xr-xhttemplate/edit/cust_main_note.cgi7
-rw-r--r--httemplate/elements/menu.html2
-rw-r--r--httemplate/view/cust_main/notes/notes.html196
6 files changed, 113 insertions, 114 deletions
diff --git a/FS/FS/Conf.pm b/FS/FS/Conf.pm
index ab16a99..8794bfd 100644
--- a/FS/FS/Conf.pm
+++ b/FS/FS/Conf.pm
@@ -5455,11 +5455,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 5a1ac2b..05ff8fc 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 &nbsp;
<% 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 38509c6..023d25f 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 %> &nbsp;
+% # 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">&nbsp;</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">&nbsp;</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">
&nbsp;<% $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 %> &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>
-% }
<%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&nbsp;%o,&nbsp;%Y</TD>";
$format .= "$td%l:%M%P</TD>"
if $conf->exists('cust_main_note-display_times');