usability: customer tags with checkboxes instead of a select-multiple
authorIvan Kohler <ivan@freeside.biz>
Thu, 25 Aug 2016 22:06:45 +0000 (15:06 -0700)
committerIvan Kohler <ivan@freeside.biz>
Thu, 25 Aug 2016 22:06:45 +0000 (15:06 -0700)
httemplate/edit/cust_main.cgi
httemplate/edit/cust_main/basics.html
httemplate/edit/process/cust_main.cgi
httemplate/elements/checkboxes-table.html
httemplate/elements/select-cust_tag.html
httemplate/elements/tr-select-cust_tag.html

index b314d2d..3ba1e85 100755 (executable)
@@ -303,8 +303,6 @@ if ( $cgi->param('error') ) {
   $ss = '';
   $stateid = '';
 
-  $cgi->param('tagnum', FS::part_tag->default_tags);
-
   if ( $cgi->param('qualnum') =~ /^(\d+)$/ ) {
     my $qualnum = $1;
     my $qual = qsearchs('qual', { 'qualnum' => $qualnum } )
index c3768ac..a30d7f8 100644 (file)
 %# tags
 <& /elements/tr-select-cust_tag.html,
              'custnum' => $custnum,
+             'default' => { map { $_=>1 } FS::part_tag->default_tags },
              'cgi'     => $cgi,
 &>
 
index 74f8f23..2cb1648 100755 (executable)
@@ -109,7 +109,12 @@ if ( $cgi->param('no_credit_limit') ) {
   $new->setfield('credit_limit', '');
 }
 
-$new->tagnum( [ $cgi->param('tagnum') ] );
+#$new->tagnum( [ $cgi->param('tagnum') ] );
+my $params = $cgi->Vars;
+$new->tagnum( [
+  map { /^tagnum(\d+)/ && $1 }
+    grep { /^tagnum(\d+)/ && $cgi->param($_) } keys %$params
+] );
 
 $error ||= $new->set_national_id_from_cgi( $cgi );
 
index 671cd1f..d3bbab4 100644 (file)
@@ -69,6 +69,7 @@
 %               'select'    => $opt{'target_table'}. '.*',
 %               'addl_from' => "LEFT JOIN $opt{'link_table'} USING ( $target_pkey )",
 %               'extra_sql' => $extra_sql,
+%               'order_by'  => $opt{'order_by'},
 %            })
 %   ) {
 %
 %
 %     } elsif ( !$sourcenum ) { # newly created object, has no links yet
 %
-%       $checked = $opt{'default'} ? 'CHECKED' : ''
+%       if ( ref($opt{'default'}) ) {
+%         $checked = $opt{'default'}->{$targetnum} ? 'CHECKED' : '';
+%       } else {
+%         $checked = $opt{'default'}               ? 'CHECKED' : ''
+%       }
 %
 %     } else {
 %
 %
 %
 
-
-  <INPUT TYPE="checkbox" NAME="<% $target_pkey. $targetnum %>" <% $checked %> VALUE="ON">
+% my $color_col = $opt{'color_col'};
+  <INPUT TYPE="checkbox" NAME="<% $target_pkey. $targetnum %>" <% $checked %> VALUE="ON"><DIV STYLE="display:inline; background-color: #<% $color_col ? $target_obj->$color_col : '' %>">
 % if ( $opt{'target_link'} ) { 
-
-
     <A HREF="<% $opt{'target_link'} %><% $targetnum %>">
-%
-%
 %  }
 %  
-<% $targetnum %>: 
 % if ( $opt{'name_callback'} ) { 
 
 
 %  
 
 
-    <% $target_obj->$name_col() %><% $opt{'target_link'} ? '</A>' : '' %>
+    <% $target_obj->$name_col() %></DIV><% $opt{'target_link'} ? '</A>' : '' %>
 % } 
 % if ( $opt{'disable-able'} ) { 
 
index 61d4dca..02f8498 100644 (file)
@@ -1,11 +1,12 @@
-<% include( '/elements/select-table.html',
-                 'table'         => 'part_tag',
+<% include( '/elements/checkboxes-table.html',
+                 'target_table'  => 'part_tag',
+                 'link_table'    => 'cust_tag',
                  'name_col'      => 'tagname', #tagname - tagdesc??
-                 'multiple'      => 1,
-                 #'value'         => $agentnum || '',
-                 #'agent_virt'    => 1,
-                 'hashref'       => { 'disabled' => '' },
+                 'color_col'     => 'tagcolor',
+                 'disable-able'  => 1,
                  'order_by'      => ' ORDER BY tagname',
+                 'source_table'  => 'cust_main',
+                 'sourcenum'     => $opt{'custnum'},
                  %opt,
              )
 %>
index b133dcc..711408e 100644 (file)
@@ -4,8 +4,6 @@
     <TH ALIGN="right"><% $opt{'label'} || 'Tags' %></TD>
     <TD>
       <% include( '/elements/select-cust_tag.html',
-                     'curr_value' => \@curr_tagnum,
-                     'part_tag'   => \@part_tag,
                      %opt,
                  )
       %>
@@ -38,6 +36,8 @@ if ( $cgi && $cgi->param('tagnum') ) {
 my $extra_sql = "WHERE disabled IS NULL OR disabled = '' ";
 $extra_sql .= ' OR tagnum IN ('. join(',', @curr_tagnum). ')' if @curr_tagnum;
 
+#now kind of inefficient (we only want to know if there are any), but since
+# its an edit control its not significant
 my @part_tag = qsearch({
   'table'     => 'part_tag',
   'hashref'   => {},