[freeside-commits] branch master updated. 43f8c4ca0668a417b86e1ef8d1c15b25097bc8a4

Ivan ivan at 420.am
Sat May 9 15:16:14 PDT 2015


The branch, master has been updated
       via  43f8c4ca0668a417b86e1ef8d1c15b25097bc8a4 (commit)
      from  5cfa294b20d7b7d96e9b8665ab51c3a897dab424 (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 43f8c4ca0668a417b86e1ef8d1c15b25097bc8a4
Author: Ivan Kohler <ivan at freeside.biz>
Date:   Sat May 9 15:16:02 2015 -0700

    add packages to small_custview, RT#34237

diff --git a/FS/FS/UI/Web/small_custview.pm b/FS/FS/UI/Web/small_custview.pm
index d7cede6..72af03e 100644
--- a/FS/FS/UI/Web/small_custview.pm
+++ b/FS/FS/UI/Web/small_custview.pm
@@ -11,32 +11,97 @@ use FS::cust_main;
 @ISA = qw(Exporter);
 @EXPORT_OK = qw( small_custview );
 
+=head1 NAME
+
+FS::UI::Web::small_custview
+
+=head1 SYNOPSIS
+
+  use FS::UI::Web::small_custview qw( small_custview );
+  
+  #new-style
+  $html = small_custview(
+    { 'cust_main'      => $cust_main, #or 'custnum' => $custnum,
+      'countrydefault' => 'US',
+      'nobalance'      => 1,
+      'url'            => 'http://freeside.machine/freeside/view/cust_main.cgi',
+      'nopkg'          => 1,
+    }
+  );
+
+  #old-style (deprecated)
+  $html = small_custview( $cust_main, $countrydefault, $nobalance, $url );
+
+=head1 DESCRIPTION
+
+A subroutine for displaying customer information.
+
+=head1 SUBROUTINES
+
+=over 4
+
+=item small_custview HASHREF
+
+New-style interface.  Keys are:
+
+=over 4
+
+=item cust_main
+
+Customer (as a FS::cust_main object)
+
+=item custnum
+
+Customer number (if cust_main is not provided).
+
+=item countrydefault
+
+=item nobalance
+
+=item url
+
+=back
+
 =item small_custview CUSTNUM || CUST_MAIN_OBJECT, COUNTRYDEFAULT, NOBALANCE_FLAG, URL
 
-Sheesh. I did switch to mason, but this is still hanging around.  Figure out
-some better way to sling mason components to self-service & RT.
+Old-style (deprecated) interface.
 
 =cut
 
 sub small_custview {
-
-  my $arg = shift;
-  my $countrydefault = shift || 'US';
-  my $nobalance = shift;
-  my $url = shift;
-
-  my $cust_main = ref($arg) ? $arg
-                  : qsearchs('cust_main', { 'custnum' => $arg } )
-    or die "unknown custnum $arg";
+  my( $cust_main, $countrydefault, $nobalance, $url, $nopkg );
+  if ( ref($_[0]) eq 'HASH' ) {
+    my $opt = shift;
+    $cust_main =  $opt->{cust_main}
+               || qsearchs('cust_main', { 'custnum' => $opt->{custnum} } );
+    $countrydefault = $opt->{countrydefault} || 'US';
+    $nobalance = $opt->{nobalance};
+    $url = $opt->{url};
+    $nopkg = $opt->{nopkg};
+  } else {
+    my $arg = shift;
+    $countrydefault = shift || 'US';
+    $nobalance = shift;
+    $url = shift;
+    $nopkg = 0;
+
+    $cust_main = ref($arg) ? $arg
+                           : qsearchs('cust_main', { 'custnum' => $arg } )
+      or die "unknown custnum $arg";
+  }
 
   my $html = '<DIV ID="fs_small_custview" CLASS="small_custview">';
   
   $html = qq!<A HREF="$url?! . $cust_main->custnum . '">'
     if $url;
 
-  $html .= 'Customer #<B>'. $cust_main->display_custnum. '</B></A>'.
-    ' - <B><FONT COLOR="#'. $cust_main->statuscolor. '">'.
-    $cust_main->status_label. '</FONT></B>';
+  $html .= 'Customer #<B>'. $cust_main->display_custnum.
+           ': '. encode_entities($cust_main->name). '</B></A>';
+           ' - <B><FONT COLOR="#'. $cust_main->statuscolor. '">'.
+           $cust_main->status_label. '</FONT></B>';
+
+  $html .= ' (Balance: <B>$'. $cust_main->balance. '</B>)'
+    unless $nobalance;
 
   my @part_tag = $cust_main->part_tag;
   if ( @part_tag ) {
@@ -57,11 +122,7 @@ sub small_custview {
 
   $html .=
     ntable('#e8e8e8'). '<TR><TD VALIGN="top">'. ntable("#cccccc",2).
-    '<TR><TD ALIGN="right" VALIGN="top">Billing<BR>Address</TD><TD BGCOLOR="#ffffff">'.
-    encode_entities($cust_main->getfield('last')). ', '.
-    encode_entities($cust_main->first). '<BR>';
-
-  $html .= encode_entities($cust_main->company). '<BR>' if $cust_main->company;
+    '<TR><TD ALIGN="right" VALIGN="top">Billing<BR>Address</TD><TD BGCOLOR="#ffffff">';
 
   if ( $cust_main->bill_locationnum ) {
 
@@ -98,8 +159,7 @@ sub small_custview {
       '<TR><TD ALIGN="right" VALIGN="top">Service<BR>Address</TD><TD BGCOLOR="#ffffff">';
     $html .= join('<BR>', 
       map encode_entities($_), grep $_,
-        $cust_main->contact,
-        $cust_main->company,
+        $cust_main->ship_company,
         $ship->address1,
         $ship->address2,
         ($ship->city . ', ' . $ship->state . '  ' . $ship->zip),
@@ -112,10 +172,25 @@ sub small_custview {
 
   }
 
-  $html .= '</TR></TABLE>';
+  $html .= '</TR>';
 
-  $html .= '<BR>Balance: <B>$'. $cust_main->balance. '</B><BR>'
-    unless $nobalance;
+  #would be better to use ncancelled_active_pkgs, but that doesn't have an
+  # optimization to just count them yet, so it would be a perf problem on 
+  # tons-of-package customers
+  if ( !$nopkg && scalar($cust_main->ncancelled_pkgs) < 20 ) {
+
+    foreach my $cust_pkg ( $cust_main->ncancelled_active_pkgs ) {
+
+      $html .= '<TR><TD COLSPAN="2">'.
+               '<B><FONT COLOR="#'. $cust_pkg->statuscolor. '">'.
+               ucfirst($cust_pkg->status). '</FONT></B> - '.
+               encode_entities($cust_pkg->part_pkg->pkg_comment_only(nopkgpart=>1)).
+               '</TD></TR>';
+    }
+
+  }
+
+  $html .= '</TABLE>';
 
   # last payment might be good here too?
 
@@ -137,5 +212,22 @@ sub ntable {
 
 }
 
+=back
+
+=head1 BUGS
+
+Sheesh. I did switch to mason, but this is still hanging around.  Figure out
+some better way to sling mason components to self-service & RT.
+
+(Or, is it useful to have this without depending on the regular back-office UI
+and Mason stuff to be in place?  So we have something suitable for displaying
+customer information in other external systems, not just RT?)
+
+=head1 SEE ALSO
+
+L<FS::UI::Web>
+
+=cut
+
 1;
 
diff --git a/FS/FS/cust_main/Packages.pm b/FS/FS/cust_main/Packages.pm
index d7a1e92..c147e55 100644
--- a/FS/FS/cust_main/Packages.pm
+++ b/FS/FS/cust_main/Packages.pm
@@ -574,6 +574,21 @@ sub active_pkgs {
        $self->unsuspended_pkgs;
 }
 
+=item ncancelled_active_pkgs
+
+Returns all non-cancelled packages (see L<FS::cust_pkg>) for this customer that
+are active (recurring).
+
+=cut
+
+sub ncancelled_active_pkgs {
+  my $self = shift; 
+  grep { my $part_pkg = $_->part_pkg;
+         $part_pkg->freq ne '' && $part_pkg->freq ne '0';
+       }
+       $self->ncancelled_pkgs;
+}
+
 =item billing_pkgs
 
 Returns active packages, and also any suspended packages which are set to
diff --git a/rt/share/html/NoAuth/css/freeside3/freeside.css b/rt/share/html/NoAuth/css/freeside3/freeside.css
new file mode 100644
index 0000000..1c0befb
--- /dev/null
+++ b/rt/share/html/NoAuth/css/freeside3/freeside.css
@@ -0,0 +1,7 @@
+div.small_custview {
+  border: 1px solid #cccccc;
+  padding: 3px;
+	 -moz-border-radius: 4px;
+	 -webkit-border-radius: 4px;
+	 border-radius: 4px;
+}
diff --git a/rt/share/html/NoAuth/css/freeside3/main.css b/rt/share/html/NoAuth/css/freeside3/main.css
index 4839e87..e30706c 100644
--- a/rt/share/html/NoAuth/css/freeside3/main.css
+++ b/rt/share/html/NoAuth/css/freeside3/main.css
@@ -59,5 +59,6 @@
 @import "ticket-search.css";
 @import "ticket.css";
 @import "misc.css";
+ at import "freeside.css";
 
 % $m->callback(CallbackName => 'End');

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

Summary of changes:
 FS/FS/UI/Web/small_custview.pm                  |  140 +++++++++++++++++++----
 FS/FS/cust_main/Packages.pm                     |   15 +++
 rt/share/html/NoAuth/css/freeside3/freeside.css |    7 ++
 rt/share/html/NoAuth/css/freeside3/main.css     |    1 +
 4 files changed, 139 insertions(+), 24 deletions(-)
 create mode 100644 rt/share/html/NoAuth/css/freeside3/freeside.css




More information about the freeside-commits mailing list