handle missing customer records without erroring out
[freeside.git] / httemplate / browse / part_svc.cgi
index cf0f040..ef0de13 100755 (executable)
@@ -8,14 +8,47 @@ if ( $cgi->param('showdisabled') ) {
   %search = ( 'disabled' => '' );
 }
 
-my @part_svc = qsearch('part_svc', \%search );
+my @part_svc =
+  sort { $a->getfield('svcpart') <=> $b->getfield('svcpart') }
+    qsearch('part_svc', \%search );
 my $total = scalar(@part_svc);
 
+my %num_active_cust_svc = ();
+if ( $cgi->param('active') ) {
+  my $active_sth = dbh->prepare(
+    'SELECT COUNT(*) FROM cust_svc WHERE svcpart = ?'
+  ) or die dbh->errstr;
+  foreach my $part_svc ( @part_svc ) {
+    $active_sth->execute($part_svc->svcpart) or die $active_sth->errstr;
+    $num_active_cust_svc{$part_svc->svcpart} =
+      $active_sth->fetchrow_arrayref->[0];
+  }
+  @part_svc = sort { $num_active_cust_svc{$b->svcpart} <=>
+                     $num_active_cust_svc{$a->svcpart}     } @part_svc;
+}
+
 %>
 <%= header('Service Definition Listing', menubar( 'Main Menu' => $p) ) %>
 
-    Services are items you offer to your customers.<BR><BR>
-<%= $total %> services
+<SCRIPT>
+function part_export_areyousure(href) {
+  if (confirm("Are you sure you want to delete this export?") == true)
+    window.location.href = href;
+}
+</SCRIPT>
+
+    Service definitions are the templates for items you offer to your customers.<BR><BR>
+
+<FORM METHOD="POST" ACTION="<%= $p %>edit/part_svc.cgi">
+<A HREF="<%= $p %>edit/part_svc.cgi"><I>Add a new service definition</I></A><% if ( @part_svc ) { %>&nbsp;or&nbsp;<SELECT NAME="clone"><OPTION></OPTION>
+<% foreach my $part_svc ( @part_svc ) { %>
+  <OPTION VALUE="<%= $part_svc->svcpart %>"><%= $part_svc->svc %></OPTION>
+<% } %>
+</SELECT><INPUT TYPE="submit" VALUE="Clone existing service">
+<% } %>
+</FORM><BR>
+
+<%= $total %> service definitions
 <%= $cgi->param('showdisabled')
       ? do { $cgi->param('showdisabled', 0);
              '( <a href="'. $cgi->self_url. '">hide disabled services</a> )'; }
@@ -26,21 +59,25 @@ my $total = scalar(@part_svc);
   <TR>
     <TH COLSPAN=<%= $cgi->param('showdisabled') ? 2 : 3 %>>Service</TH>
     <TH>Table</TH>
+<% if ( $cgi->param('active') ) { %>
+    <TH><FONT SIZE=-1>Customer<BR>Services</FONT></TH>
+<% } %>
     <TH>Export</TH>
     <TH>Field</TH>
     <TH COLSPAN=2>Modifier</TH>
   </TR>
 
-<% foreach my $part_svc ( sort {
-     $a->getfield('svcpart') <=> $b->getfield('svcpart')
-   } @part_svc ) {
-     my($hashref)=$part_svc->hashref;
-     my($svcdb)=$hashref->{svcdb};
+<% foreach my $part_svc ( @part_svc ) {
+     my $hashref = $part_svc->hashref;
+     my $svcdb = $hashref->{svcdb};
+     my $svc_x = "FS::$svcdb"->new( { svcpart => $part_svc->svcpart } );
+     my @dfields = $svc_x->fields;
+     push @dfields, 'usergroup' if $svcdb eq 'svc_acct'; #kludge
      my @fields =
-       grep { $_ ne 'svcnum' && $part_svc->part_svc_column($_)->columnflag }
-            fields($svcdb);
-
-     my($rowspan)=scalar(@fields) || 1;
+       grep { $svc_x->pvf($_)
+           or $_ ne 'svcnum' && $part_svc->part_svc_column($_)->columnflag }
+            @dfields ;
+     my $rowspan = scalar(@fields) || 1;
      my $url = "${p}edit/part_svc.cgi?$hashref->{svcpart}";
 %>
 
@@ -55,29 +92,23 @@ my $total = scalar(@part_svc);
       <%= $hashref->{svc} %></A></TD>
     <TD ROWSPAN=<%= $rowspan %>>
       <%= $hashref->{svcdb} %></TD>
+<% if ( $cgi->param('active') ) { %>
+    <TD ROWSPAN=<%= $rowspan %>>
+      <FONT COLOR="#00CC00"><B><%= $num_active_cust_svc{$hashref->{svcpart}} %></B></FONT>&nbsp;<A HREF="<%=$p%>search/<%= $hashref->{svcdb} %>.cgi?svcpart=<%= $hashref->{svcpart} %>">active</A>
+    </TD>
+<% } %>
     <TD ROWSPAN=<%= $rowspan %>><%= itable() %>
 <%
-  my @part_export = qsearch('part_export', { svcpart => $part_svc->svcpart } );
-  foreach my $part_export ( @part_export ) {
+#  my @part_export =
+map { qsearchs('part_export', { exportnum => $_->exportnum } ) } qsearch('export_svc', { svcpart => $part_svc->svcpart } ) ;
+  foreach my $part_export (
+    map { qsearchs('part_export', { exportnum => $_->exportnum } ) } 
+      qsearch('export_svc', { svcpart => $part_svc->svcpart } )
+  ) {
 %>
       <TR>
-        <TD><%= $part_export->exporttype %> to <%= $part_export->machine %></TD>
-        <TD>(options)</TD>
+        <TD><A HREF="<%= $p %>edit/part_export.cgi?<%= $part_export->exportnum %>"><%= $part_export->exportnum %>:&nbsp;<%= $part_export->exporttype %>&nbsp;to&nbsp;<%= $part_export->machine %></A></TD></TR>
 <%  } %>
-      </TR><TR><TD COLSPAN=2><A HREF="<%= $p %>edit/part_export.cgi?new_with_svcpart=<%= $part_svc->svcpart %>"><I>Add a new export</I><A></TD></TR>
-<% if (@part_export) { %>
-      <TR><TD COLSPAN=2>
-        <FORM METHOD="POST" ACTION="<%= $p %>edit/part_export.cgi">
-        <INPUT TYPE="hidden" NAME="svcpart" VALUE="<%= $part_svc->svcpart %>">
-        <SELECT NAME="clone"><OPTION></OPTION>
-<%   foreach my $part_export ( @part_export ) { %>
-          <OPTION VALUE="<%= $part_export->exportnum %>">
-            <%= $part_export->exporttype %> to <%= $part_export->machine %>
-          </OPTION>
-<%   } %>
-        <INPUT TYPE="submit" VALUE="clone existing export">
-        </FORM></TD></TR>
-<% } %>
       </TABLE></TD>
 
 <%   my($n1)='';
@@ -88,6 +119,7 @@ my $total = scalar(@part_svc);
 
 <%     if ( $flag eq "D" ) { print "Default"; }
          elsif ( $flag eq "F" ) { print "Fixed"; }
+         elsif ( not $flag ) { }
          else { print "(Unknown!)"; }
 %>
        </TD><TD><%= $part_svc->part_svc_column($field)->columnvalue%></TD>
@@ -96,10 +128,6 @@ my $total = scalar(@part_svc);
 %>
   </TR>
 <% } %>
-
-  <TR>
-    <TD COLSPAN=<%= $cgi->param('showdisabled') ? 7 : 8 %>><A HREF="<%= $p %>edit/part_svc.cgi"><I>Add a new service definition</I></A></TD>
-  </TR>
 </TABLE>
 </BODY>
 </HTML>