basic customer view tabs, RT#5586
authorivan <ivan>
Tue, 16 Jun 2009 03:29:26 +0000 (03:29 +0000)
committerivan <ivan>
Tue, 16 Jun 2009 03:29:26 +0000 (03:29 +0000)
httemplate/elements/menubar.html
httemplate/pref/pref-process.html
httemplate/pref/pref.html
httemplate/view/cust_main.cgi
httemplate/view/cust_main/packages.html
httemplate/view/cust_main/payment_history.html
httemplate/view/cust_main/tickets.html

index ec6c13f..4d2700c 100644 (file)
-%
-%  my($item, $url, @html);
-%  while (@_) {
-%    ($item, $url) = splice(@_,0,2);
-%    next if $item =~ /^\s*Main\s+Menu\s*$/i;
-%    push @html, qq!<A HREF="$url">$item</A>!;
-%  }
-%
-
-<% join(' | ', @html) %>
+<%doc>
+
+Example:
+
+  include( '/elements/menubar.html',
+           
+           #options hashref (optional)
+           { 'newstyle' => 1, #may become the default at some point
+           },
+
+           #menubar entries (required)
+           'label'  => $url,
+           'label2' => $url2,
+           #etc.
+
+         );
+
+</%doc>
+%if ( $opt->{'newstyle'} ) {
+
+%  #false laziness w/header.html... shouldn't these just go in freeside.css?
+
+   <style type="text/css">
+   a.fsblackbutton {
+            background-color:#333333;
+            color: #ffffff;
+            border:1px solid;
+            border-top-color:#cccccc;
+            border-left-color:#cccccc;
+            border-right-color:#aaaaaa;
+            border-bottom-color:#aaaaaa;
+            /*font-weight:bold;*/
+            /*padding-left:12px;
+            padding-right:12px;*/
+            padding-left:4px;
+            padding-right:4px;
+            text-decoration:none;
+            overflow:visible;
+            filter:progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr='#ff333333',EndColorStr='#ff666666')
+   }
+   
+   a.fsblackbuttonselected {
+            background-color:#7e0079;
+            color: #ffffff;
+            border:1px solid;
+            border-top-color:#cccccc;
+            border-left-color:#cccccc;
+            border-right-color:#aaaaaa;
+            border-bottom-color:#aaaaaa;
+            /*font-weight:bold;*/
+            /*padding-left:12px;
+            padding-right:12px;*/
+            padding-left:4px;
+            padding-right:4px;
+            text-decoration:none;
+            overflow:visible;
+            filter:progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr='#ff330033',EndColorStr='#ff7e0079')
+   }
+   </style>
+
+   <TABLE BGCOLOR="#000000" BORDER=0 CELLSPACING=0 CELLPADDING=4>
+     <TR>
+       <TD STYLE="background-image:url(<%$fsurl%>images/gray-black-side.png); background-repeat:repeat-y;padding-left:0px">
+         &nbsp;&nbsp;
+       </TD>
+       <TD>
+         <% join(' ', @html ) %>
+       </TD>
+       <TD STYLE="background-image:url(<%$fsurl%>images/black-gray-side.png); background-repeat:repeat-y;padding-right:0px">
+         &nbsp;&nbsp;
+       </TD>
+     </TR>
+   </TABLE>
+
+%} else {
+
+   <% join(' | ', @html) %>
+
+%}
+<%init>
+
+my $opt = ref($_[0]) ? shift : {};
+
+my $url_base = $opt->{'url_base'};
+
+my @html;
+while (@_) {
+
+  my ($item, $url) = splice(@_,0,2);
+  next if $item =~ /^\s*Main\s+Menu\s*$/i;
+
+  my $style = '';
+  if ( $opt->{'newstyle'} ) {
+
+    my $dclass = $item eq $opt->{'selected'}
+                   ? 'fsblackbuttonselected'
+                   : 'fsblackbutton';
+
+    $style =
+      qq( CLASS="$dclass" ).
+      qq( onMouseOver="this.className='fsblackbuttonselected'; return true;" ).
+      qq( onMouseOut="this.className='$dclass'; return true;" );
+  }
+
+  push @html, qq!<A HREF="$url_base$url" $style>$item</A>!;
+
+}
+
+</%init>
index 368d84f..378164e 100644 (file)
@@ -43,7 +43,7 @@ unless ( $error ) { # if ($access_user) {
   my %param = $access_user->options;
 
   #XXX autogen
-  my @paramlist = qw( menu_position
+  my @paramlist = qw( menu_position default_customer_view
                       email_address
                       vonage-fromnumber vonage-username vonage-password
                       show_pkgnum show_db_profile save_db_profile
index 1f4edf2..81800bf 100644 (file)
@@ -31,7 +31,7 @@ Interface
 <% ntable("#cccccc",2) %>
 
   <TR>
-    <TH>Menu location: </TH>
+    <TH ALIGN="right">Menu location: </TH>
     <TD>
       <INPUT TYPE="radio" NAME="menu_position" VALUE="left" onClick="document.images['menu_example'].src='../images/menu-left-example.png';" <% $menu_position eq 'left' ? ' CHECKED' : ''%>> Left<BR>
       <INPUT TYPE="radio" NAME="menu_position" VALUE="top"onClick="document.images['menu_example'].src='../images/menu-top-example.png';" <% $menu_position eq 'top' ? ' CHECKED' : ''%>> Top <BR>
@@ -39,6 +39,21 @@ Interface
     <TD><IMG NAME="menu_example" SRC="../images/menu-<% $menu_position %>-example.png"></TD>
   </TR>
 
+  <TR>
+    <TH ALIGN="right">Default customer view: </TD>
+    <TD COLSPAN=2>
+      <SELECT NAME="default_customer_view">
+%       foreach my $view ( keys %customer_views ) {
+%         my $selected =
+%           $customer_views{$view} eq $curuser->option('default_customer_view')
+%             ? 'SELECTED'
+%             : '';
+          <OPTION VALUE="<%$customer_views{$view}%>" <%$selected%>><%$view%></OPTION>
+%       }
+      </SELECT>
+    </TD>
+  </TR>
+
 </TABLE>
 <BR>
 
@@ -109,6 +124,21 @@ Vonage integration (see <a href="https://secure.click2callu.com/">Click2Call</a>
 <INPUT TYPE="submit" VALUE="Update preferences">
 
 <% include('/elements/footer.html') %>
+<%once>
+
+  #false laziness w/view/cust_main.cgi
+
+  tie my %customer_views, 'Tie::IxHash',
+    'Basics'          => 'basics',
+    'Notes'           => 'notes', #notes and files?
+    'Tickets'         => 'tickets',
+    'Packages'        => 'packages',
+    'Payment History' => 'payment_history',
+    #'Change History'  => '',
+    'Jumbo'           => 'jumbo',
+  ;
+
+</%once>
 <%init>
 
 my $curuser = $FS::CurrentUser::CurrentUser;
index 2231d41..00856a0 100755 (executable)
@@ -1,8 +1,19 @@
-<% include("/elements/header.html","Customer View: ". $cust_main->name ) %>
+<% include('/elements/header.html', {
+             'title' => "Customer View: ". $cust_main->name,
+             'nobr'  => 1,
+          })
+%>
+<BR>
 
-% if ( $curuser->access_right('Edit customer') ) { 
-  <A HREF="<% $p %>edit/cust_main.cgi?<% $custnum %>">Edit this customer</A> | 
-% } 
+<% include('/elements/menubar.html',
+             { 'newstyle' => 1,
+               'selected' => $viewname{$view},
+               'url_base' => $cgi->url. "?custnum=$custnum;show=",
+             },
+             %views,
+          )
+%>
+<BR>
 
 <% include('/elements/init_overlib.html') %>
 
@@ -13,6 +24,12 @@ function areyousure(href, message) {
 }
 </SCRIPT>
 
+% if ( $view eq 'basics' || $view eq 'jumbo' ) {
+
+% if ( $curuser->access_right('Edit customer') ) { 
+  <A HREF="<% $p %>edit/cust_main.cgi?<% $custnum %>">Edit this customer</A> | 
+% } 
+
 % if ( $curuser->access_right('Cancel customer')
 %        && $cust_main->ncancelled_pkgs
 %      ) {
@@ -74,10 +91,12 @@ function areyousure(href, message) {
   </TD>
 </TR>
 </TABLE>
-%
-%if ( $cust_main->comments =~ /[^\s\n\r]/ ) {
-%
 
+% }
+
+% if ( $view eq 'notes' || $view eq 'jumbo' ) {
+
+%if ( $cust_main->comments =~ /[^\s\n\r]/ ) {
 <BR>
 Comments
 <% ntable("#cccccc") %><TR><TD><% ntable("#cccccc",2) %>
@@ -87,12 +106,16 @@ Comments
   </TD>
 </TR>
 </TABLE></TABLE>
-% } 
 <BR><BR>
+% }
+
 % my $notecount = scalar($cust_main->notes());
 % if ( ! $conf->exists('cust_main-disable_notes') || $notecount) {
 
-<A NAME="cust_main_note"><FONT SIZE="+2">Notes</FONT></A><BR>
+%   unless ( $view eq 'notes' && $cust_main->comments !~ /[^\s\n\r]/ ) {
+      <A NAME="cust_main_note"><FONT SIZE="+2">Notes</FONT></A><BR>
+%   }
+
 %   if ( $curuser->access_right('Add customer note') &&
 %        ! $conf->exists('cust_main-disable_notes')
 %      ) {
@@ -115,24 +138,47 @@ Comments
 
 % }
 
+% }
 
-% if ( $conf->config('ticket_system') ) { 
+% if ( $view eq 'jumbo' ) {
+    <BR><BR>
+    <A NAME="tickets"><FONT SIZE="+2">Tickets</FONT></A><BR>
+% }
 
-  <BR><BR>
+% if ( $view eq 'tickets' || $view eq 'jumbo' ) {
+
+% if ( $conf->config('ticket_system') ) { 
   <% include('cust_main/tickets.html', $cust_main ) %>
 % } 
+  <BR><BR>
 
+% }
 
-<BR><BR>
+% if ( $view eq 'jumbo' ) { #XXX enable me && $curuser->access_right('View customer packages') { 
+
+  <A NAME="cust_pkg"><FONT SIZE="+2">Packages</FONT></A><BR>
+% }
+
+% if ( $view eq 'packages' || $view eq 'jumbo' ) {
 
 % #XXX enable me# if ( $curuser->access_right('View customer packages') { 
 <% include('cust_main/packages.html', $cust_main ) %>
 % #}
 
+% }
+
+% if ( $view eq 'jumbo' ) {
+    <BR><BR>
+    <A NAME="history"><FONT SIZE="+2">Payment History</FONT></A><BR>
+% }
+
+% if ( $view eq 'payment_history' || $view eq 'jumbo' ) {
+
 % if ( $conf->config('payby-default') ne 'HIDE' ) { 
   <% include('cust_main/payment_history.html', $cust_main ) %>
 % } 
 
+% }
 
 <% include('/elements/footer.html') %>
 <%init>
@@ -144,10 +190,16 @@ die "access denied"
 
 my $conf = new FS::Conf;
 
-die "No customer specified (bad URL)!" unless $cgi->keywords;
-my($query) = $cgi->keywords; # needs parens with my, ->keywords returns array
-$query =~ /^(\d+)$/;
-my $custnum = $1;
+my $custnum;
+if ( $cgi->param('custnum') =~ /^(\d+)$/ ) {
+  $custnum = $1;
+} else {
+  die "No customer specified (bad URL)!" unless $cgi->keywords;
+  my($query) = $cgi->keywords; # needs parens with my, ->keywords returns array
+  $query =~ /^(\d+)$/;
+  $custnum = $1;
+}
+
 my $cust_main = qsearchs( {
   'table'     => 'cust_main',
   'hashref'   => { 'custnum' => $custnum },
@@ -155,4 +207,24 @@ my $cust_main = qsearchs( {
 });
 die "Customer not found!" unless $cust_main;
 
+#false laziness w/pref/pref.html
+tie my %views, 'Tie::IxHash',
+       'Basics'           => 'basics',
+       'Notes'            => 'notes', #notes and files?
+;
+$views{'Tickets'}         =  'tickets'
+                               if $conf->config('ticket_system');
+$views{'Packages'}        =  'packages';
+$views{'Payment History'} =  'payment_history'
+                               unless $conf->config('payby-default' eq 'HIDE');
+#$views{'Change History'}  =  '';
+$views{'Jumbo'}           =  'jumbo';
+
+my %viewname = reverse %views;
+
+
+my $view =  $cgi->param('show')
+         || $curuser->option('default_customer_view')
+         || 'jumbo'; #'Basics' in 1.9.1?
+
 </%init>
index 0c0526d..428794b 100755 (executable)
@@ -1,5 +1,3 @@
-<A NAME="cust_pkg"><FONT SIZE="+2">Packages</FONT></A><BR>
-
 % my $s = 0;
 % if ( $curuser->access_right('Order customer package') ) { 
   <% $s++ ? ' | ' : '' %>
index 335ce24..f2abe0e 100644 (file)
@@ -1,5 +1,3 @@
-<BR><BR><A NAME="history"><FONT SIZE="+2">Payment History</FONT></A><BR>
-
 %# payment links
 
 % my $s = 0;
index b5d581d..167849c 100644 (file)
@@ -1,6 +1,3 @@
-<A NAME="tickets"><FONT SIZE="+2">Tickets</FONT></A>
-<BR>
-
 (<A HREF="<% $open_link %>">View <% $openlabel %> tickets for this customer</A>)
 (<A HREF="<% $res_link  %>">View resolved tickets for this customer</A>)
 <BR>