add svc_external
authorivan <ivan>
Tue, 23 Dec 2003 02:36:38 +0000 (02:36 +0000)
committerivan <ivan>
Tue, 23 Dec 2003 02:36:38 +0000 (02:36 +0000)
FS/FS/part_export.pm
FS/MANIFEST
FS/t/svc_broadband.t [new file with mode: 0644]
FS/t/svc_external.t [new file with mode: 0644]
htetc/global.asa
htetc/handler.pl
httemplate/edit/part_svc.cgi
httemplate/edit/process/svc_external.cgi [new file with mode: 0755]
httemplate/edit/svc_external.cgi [new file with mode: 0644]
httemplate/view/svc_external.cgi [new file with mode: 0644]

index 17e5cf9..1b46841 100644 (file)
@@ -1076,6 +1076,10 @@ tie my %forward_shellcommands_options, 'Tie::IxHash',
       'notes' => '',
     },
   },
+
+  'svc_external' => {
+  },
+
 );
 
 =back
index 877f3ce..3cbf0e9 100644 (file)
@@ -102,6 +102,7 @@ FS/svc_acct.pm
 FS/svc_acct_pop.pm
 FS/svc_broadband.pm
 FS/svc_domain.pm
+FS/svc_external.pm
 FS/router.pm
 FS/type_pkgs.pm
 FS/nas.pm
@@ -184,8 +185,10 @@ t/radius_usergroup.t
 t/session.t
 t/svc_acct.t
 t/svc_acct_pop.t
+t/svc_broadband.t
 t/svc_Common.t
 t/svc_domain.t
+t/svc_external.t
 t/svc_forward.t
 t/svc_www.t
 t/type_pkgs.t
diff --git a/FS/t/svc_broadband.t b/FS/t/svc_broadband.t
new file mode 100644 (file)
index 0000000..02dc112
--- /dev/null
@@ -0,0 +1,5 @@
+BEGIN { $| = 1; print "1..1\n" }
+END {print "not ok 1\n" unless $loaded;}
+use FS::svc_broadband;
+$loaded=1;
+print "ok 1\n";
diff --git a/FS/t/svc_external.t b/FS/t/svc_external.t
new file mode 100644 (file)
index 0000000..20a6767
--- /dev/null
@@ -0,0 +1,5 @@
+BEGIN { $| = 1; print "1..1\n" }
+END {print "not ok 1\n" unless $loaded;}
+use FS::svc_external;
+$loaded=1;
+print "ok 1\n";
index 2e31be3..f550560 100644 (file)
@@ -56,6 +56,7 @@ use FS::svc_www;
 use FS::router;
 use FS::addr_block;
 use FS::svc_broadband;
+use FS::svc_external;
 use FS::type_pkgs;
 use FS::part_export;
 use FS::part_export_option;
index ba73bcf..c5f685f 100644 (file)
@@ -114,6 +114,7 @@ sub handler
       use FS::router;
       use FS::addr_block;
       use FS::svc_broadband;
+      use FS::svc_external;
       use FS::type_pkgs;
       use FS::part_export;
       use FS::part_export_option;
index 18319b3..10e8928 100755 (executable)
@@ -53,6 +53,7 @@ Services are items you offer to your customers.
     <LI>svc_forward - mail forwarding
     <LI>svc_www - Virtual domain website
     <LI>svc_broadband - Broadband/High-speed Internet service
+    <LI>svc_external - Externally-tracked service
 <!--   <LI>svc_charge - One-time charges (Partially unimplemented)
        <LI>svc_wo - Work orders (Partially unimplemented)
 -->
@@ -129,6 +130,10 @@ my %defs = (
     'ip_addr' => 'IP address.  Leave blank for automatic assignment.',
     'blocknum' => 'Address block.',
   },
+  'svc_external' => {
+    #'id' => '',
+    #'title' => '',
+  },
 );
 
   foreach my $svcdb (grep dbdef->table($_), keys %defs ) {
@@ -151,7 +156,7 @@ my %defs = (
   
   my @dbs = $hashref->{svcdb}
              ? ( $hashref->{svcdb} )
-             : qw( svc_acct svc_domain svc_forward svc_www svc_broadband );
+             : qw( svc_acct svc_domain svc_forward svc_www svc_broadband svc_external );
 
   tie my %svcdb, 'Tie::IxHash', map { $_=>$_ } grep dbdef->table($_), @dbs;
   my $widget = new HTML::Widgets::SelectLayers(
diff --git a/httemplate/edit/process/svc_external.cgi b/httemplate/edit/process/svc_external.cgi
new file mode 100755 (executable)
index 0000000..728cd21
--- /dev/null
@@ -0,0 +1,29 @@
+<%
+
+$cgi->param('svcnum') =~ /^(\d*)$/ or die "Illegal svcnum!";
+my $svcnum =$1;
+
+my $old = qsearchs('svc_external',{'svcnum'=>$svcnum}) if $svcnum;
+
+my $new = new FS::svc_external ( {
+  map {
+    ($_, scalar($cgi->param($_)));
+  } ( fields('svc_external'), qw( pkgnum svcpart ) )
+} );
+
+my $error = '';
+if ( $svcnum ) {
+  $error = $new->replace($old);
+} else {
+  $error = $new->insert;
+  $svcnum = $new->getfield('svcnum');
+} 
+
+if ($error) {
+  $cgi->param('error', $error);
+  print $cgi->redirect(popurl(2). "svc_external.cgi?". $cgi->query_string );
+} else {
+  print $cgi->redirect(popurl(3). "view/svc_external.cgi?$svcnum");
+}
+
+%>
diff --git a/httemplate/edit/svc_external.cgi b/httemplate/edit/svc_external.cgi
new file mode 100644 (file)
index 0000000..bcfc85e
--- /dev/null
@@ -0,0 +1,105 @@
+<!-- mason kludge -->
+<%
+
+my( $svcnum,  $pkgnum, $svcpart, $part_svc, $svc_external );
+if ( $cgi->param('error') ) {
+  $svc_external = new FS::svc_external ( {
+    map { $_, scalar($cgi->param($_)) } fields('svc_external')
+  } );
+  $svcnum = $svc_external->svcnum;
+  $pkgnum = $cgi->param('pkgnum');
+  $svcpart = $cgi->param('svcpart');
+  $part_svc=qsearchs('part_svc',{'svcpart'=>$svcpart});
+  die "No part_svc entry!" unless $part_svc;
+} else {
+  my($query) = $cgi->keywords;
+  if ( $query =~ /^(\d+)$/ ) { #editing
+    $svcnum=$1;
+    $svc_external=qsearchs('svc_external',{'svcnum'=>$svcnum})
+      or die "Unknown (svc_external) svcnum!";
+
+    my($cust_svc)=qsearchs('cust_svc',{'svcnum'=>$svcnum})
+      or die "Unknown (cust_svc) svcnum!";
+
+    $pkgnum=$cust_svc->pkgnum;
+    $svcpart=$cust_svc->svcpart;
+  
+    $part_svc=qsearchs('part_svc',{'svcpart'=>$svcpart});
+    die "No part_svc entry!" unless $part_svc;
+
+  } else { #adding
+
+    foreach $_ (split(/-/,$query)) { #get & untaint pkgnum & svcpart
+      $pkgnum=$1 if /^pkgnum(\d+)$/;
+      $svcpart=$1 if /^svcpart(\d+)$/;
+    }
+    $svc_external = new FS::svc_external { svcpart => $svcpart };
+
+    $part_svc=qsearchs('part_svc',{'svcpart'=>$svcpart});
+    die "No part_svc entry!" unless $part_svc;
+
+    $svcnum='';
+
+    #set fixed and default fields from part_svc
+    foreach my $part_svc_column (
+      grep { $_->columnflag } $part_svc->all_part_svc_column
+    ) {
+      $svc_external->setfield( $part_svc_column->columnname,
+                               $part_svc_column->columnvalue,
+                             );
+    }
+
+  }
+}
+my $action = $svc_external->svcnum ? 'Edit' : 'Add';
+
+my $p1 = popurl(1);
+print header("External service $action", '');
+
+print qq!<FONT SIZE="+1" COLOR="#ff0000">Error: !, $cgi->param('error'),
+      "</FONT>"
+  if $cgi->param('error');
+
+print qq!<FORM ACTION="${p1}process/svc_external.cgi" METHOD=POST>!;
+
+#display
+
+#svcnum
+print qq!<INPUT TYPE="hidden" NAME="svcnum" VALUE="$svcnum">!;
+print qq!Service #<B>!, $svcnum ? $svcnum : "(NEW)", "</B><BR><BR>";
+
+#pkgnum
+print qq!<INPUT TYPE="hidden" NAME="pkgnum" VALUE="$pkgnum">!;
+#svcpart
+print qq!<INPUT TYPE="hidden" NAME="svcpart" VALUE="$svcpart">!;
+
+my($id,$title)=(
+  $svc_external->id,
+  $svc_external->title,
+);
+
+print &ntable("#cccccc",2),
+      '<TR><TD ALIGN="right">External ID</TD><TD>'.
+      qq!<INPUT TYPE="text" NAME="id" VALUE="$id">!.
+      '</TD></TR>'.
+      '<TR><TD ALIGN="right">Title</TD><TD>'.
+      qq!<INPUT TYPE="text" NAME="title" VALUE="$title">!.
+      '</TD></TR>';
+
+foreach my $field ($svc_external->virtual_fields) {
+  if ( $part_svc->part_svc_column($field)->columnflag ne 'F' ) {
+    # If the flag is X, it won't even show up in $svc_acct->virtual_fields.
+    print $svc_external->pvf($field)->widget('HTML', 'edit', 
+        $svc_external->getfield($field));
+  }
+}
+
+%>
+
+</TABLE><BR><INPUT TYPE="submit" VALUE="Submit">
+    </FORM>
+  </BODY>
+</HTML>
+
diff --git a/httemplate/view/svc_external.cgi b/httemplate/view/svc_external.cgi
new file mode 100644 (file)
index 0000000..e5c977f
--- /dev/null
@@ -0,0 +1,52 @@
+<!-- mason kludge -->
+<%
+
+my($query) = $cgi->keywords;
+$query =~ /^(\d+)$/;
+my $svcnum = $1;
+my $svc_external = qsearchs( 'svc_external', { 'svcnum' => $svcnum } )
+  or die "svc_external: Unknown svcnum $svcnum";
+
+#false laziness w/all svc_*.cgi
+my $cust_svc = qsearchs( 'cust_svc', { 'svcnum' => $svcnum } );
+my $pkgnum = $cust_svc->getfield('pkgnum');
+my($cust_pkg, $custnum);
+if ($pkgnum) {
+  $cust_pkg = qsearchs( 'cust_pkg', { 'pkgnum' => $pkgnum } );
+  $custnum = $cust_pkg->custnum;
+} else {
+  $cust_pkg = '';
+  $custnum = '';
+}
+#eofalse
+
+%>
+
+<%= header('External Service View', menubar(
+  ( ( $custnum )
+    ? ( "View this package (#$pkgnum)" => "${p}view/cust_pkg.cgi?$pkgnum",
+        "View this customer (#$custnum)" => "${p}view/cust_main.cgi?$custnum",
+      )                                                                       
+    : ( "Cancel this (unaudited) external service" =>
+          "${p}misc/cancel-unaudited.cgi?$svcnum" )
+  ),
+  "Main menu" => $p,
+)) %>
+
+<A HREF="<%=$p%>edit/svc_external.cgi?<%=$svcnum%>">Edit this information</A><BR>
+<%= ntable("#cccccc") %><TR><TD><%= ntable("#cccccc",2) %>
+
+<TR><TD ALIGN="right">Service number</TD>
+  <TD BGCOLOR="#ffffff"><%= $svcnum %></TD></TR>
+<TR><TD ALIGN="right">External ID</TD>
+  <TD BGCOLOR="#ffffff"><%= $svc_external->id %></TD></TR>
+<TR><TD ALIGN="right">Title</TD>
+  <TD BGCOLOR="#ffffff"><%= $svc_external->title %></TD></TR>
+
+<% foreach (sort { $a cmp $b } $svc_external->virtual_fields) { %>
+  <%= $svc_external->pvf($_)->widget('HTML', 'view', $svc_external->getfield($_)) %>
+<% } %>
+
+</TABLE></TD></TR></TABLE>
+<BR><%= joblisting({'svcnum'=>$svcnum}, 1) %>
+</BODY></HTML>