correct last_bill problems with $0 invoice (non-existant) edge cases
[freeside.git] / httemplate / view / cust_main.cgi
index c49efa6..9b7b5d0 100755 (executable)
@@ -280,14 +280,14 @@ print '<BR>'.
   qq!<INPUT TYPE="hidden" NAME="custnum" VALUE="$custnum">!.
   '<SELECT NAME="pkgpart"><OPTION> ';
 
-foreach my $type_pkgs ( qsearch('type_pkgs',{'typenum'=> $agent->typenum }) ) {
-  my $pkgpart = $type_pkgs->pkgpart;
-#  my $part_pkg = qsearchs('part_pkg', { 'pkgpart' => $pkgpart } )
-#    or do { warn "unknown type_pkgs.pkgpart $pkgpart"; next; };
-  my $part_pkg =
-    qsearchs('part_pkg', { 'pkgpart' => $pkgpart, 'disabled' => '' } )
-    or next;
-  print qq!<OPTION VALUE="$pkgpart">!. $part_pkg->pkg. ' - '.
+foreach my $part_pkg (
+  qsearch( 'part_pkg', { 'disabled' => '' }, '',
+           ' AND 0 < ( SELECT COUNT(*) FROM type_pkgs '.
+           '             WHERE typenum = '. $agent->typenum.
+           '             AND type_pkgs.pkgpart = part_pkg.pkgpart )'
+         )
+) {
+  print '<OPTION VALUE="'. $part_pkg->pkgpart. '">'. $part_pkg->pkg. ' - '.
         $part_pkg->comment;
 }
 
@@ -342,17 +342,6 @@ print qq!<BR><A NAME="cust_pkg">Packages</A> !,
 
 #display packages
 
-#formatting
-print qq!!, &table(), "\n",
-      qq!<TR><TH COLSPAN=2 ROWSPAN=2>Package</TH><TH COLSPAN=5>!,
-      qq!Dates</TH><TH COLSPAN=2 ROWSPAN=2>Services</TH></TR>\n!,
-      qq!<TR><TH><FONT SIZE=-1>Setup</FONT></TH><TH>!,
-      qq!<FONT SIZE=-1>Next bill</FONT>!,
-      qq!</TH><TH><FONT SIZE=-1>Susp.</FONT></TH><TH><FONT SIZE=-1>Expire!,
-      qq!</FONT></TH>!,
-      qq!<TH><FONT SIZE=-1>Cancel</FONT></TH>!,
-      qq!</TR>\n!;
-
 #get package info
 my @packages;
 if ( $conf->exists('hidecancelledpackages') ) {
@@ -361,6 +350,23 @@ if ( $conf->exists('hidecancelledpackages') ) {
   @packages = sort { $a->pkgnum <=> $b->pkgnum } ($cust_main->all_pkgs);
 }
 
+if ( @packages ) {
+  #formatting
+  print &table(), "\n",
+        qq!<TR><TH COLSPAN=2 ROWSPAN=2>Package</TH><TH COLSPAN=5>!,
+        qq!Dates</TH><TH COLSPAN=2 ROWSPAN=2>Services</TH></TR>\n<TR>!,
+        qq!<TH><FONT SIZE=-1>Setup</FONT></TH>!;
+
+  print qq!<TH><FONT SIZE=-1>Last bill</FONT></TH>!
+    if $packages[0]->dbdef_table->column('last_bill');
+
+  print qq!<TH><FONT SIZE=-1>Next bill</FONT></TH>!,
+        qq!<TH><FONT SIZE=-1>Susp.</FONT></TH>!,
+        qq!<TH><FONT SIZE=-1>Expire!</FONT></TH>!,
+        qq!<TH><FONT SIZE=-1>Cancel</FONT></TH>!,
+        qq!</TR>\n!;
+}
+
 my $n1 = '<TR>';
 foreach my $package (@packages) {
   my $pkgnum = $package->pkgnum;
@@ -399,11 +405,12 @@ foreach my $package (@packages) {
         qq!$pkg - $comment (&nbsp;<a href="$pkgview">Details</a>&nbsp;)!;
        # | !;
 
-  print qq! (&nbsp;<A HREF="${p}misc/change_pkg.cgi?$pkgnum">!.
-        'Change&nbsp;package</A>&nbsp;)';
-
   #false laziness with view/cust_pkg.cgi, but i'm trying to make that go away so
   unless ( $package->getfield('cancel') ) {
+
+    print qq! (&nbsp;<A HREF="${p}misc/change_pkg.cgi?$pkgnum">!.
+          'Change&nbsp;package</A>&nbsp;)';
+
     print ' (&nbsp;';
     if ( $package->getfield('susp') ) {
       print qq!<A HREF="${p}misc/unsusp_pkg.cgi?$pkgnum">Unsuspend</A>!;
@@ -423,7 +430,11 @@ foreach my $package (@packages) {
   }
   print '</FONT></TD>';
 
-  for ( qw( setup bill susp expire cancel ) ) {
+  my @fields = qw( setup );
+  push @fields, qw( last_bill ) if $package->dbdef_table->column('last_bill');
+  push @fields, qw( bill susp expire cancel);
+
+  for ( @fields ) {
     print "<TD ROWSPAN=$rowspan><FONT SIZE=-1>", ( $package->getfield($_)
             ? time2str("%D</FONT><BR><FONT SIZE=-3>%l:%M:%S%P&nbsp;%z</FONT>",
               $package->getfield($_) )
@@ -470,6 +481,7 @@ print "</TR>";
 #formatting
 print "</TABLE>";
 
+
 print <<END;
 <SCRIPT>
 function cust_pay_areyousure(href) {