one-screen new customer entry (including package and service) for simple
authorivan <ivan>
Thu, 25 Mar 1999 13:55:10 +0000 (13:55 +0000)
committerivan <ivan>
Thu, 25 Mar 1999 13:55:10 +0000 (13:55 +0000)
packages with one svc_acct service

htdocs/edit/cust_main.cgi
htdocs/edit/process/cust_main.cgi

index 35b80fa..901923d 100755 (executable)
@@ -1,6 +1,6 @@
 #!/usr/bin/perl -Tw
 #
-# $Id: cust_main.cgi,v 1.10 1999-02-28 00:03:34 ivan Exp $
+# $Id: cust_main.cgi,v 1.11 1999-03-25 13:55:10 ivan Exp $
 #
 # Usage: cust_main.cgi custnum
 #        http://server.name/path/cust_main.cgi?custnum
 # fixed one missed day->daytime ivan@sisd.com 98-jul-13
 #
 # $Log: cust_main.cgi,v $
-# Revision 1.10  1999-02-28 00:03:34  ivan
+# Revision 1.11  1999-03-25 13:55:10  ivan
+# one-screen new customer entry (including package and service) for simple
+# packages with one svc_acct service
+#
+# Revision 1.10  1999/02/28 00:03:34  ivan
 # removed misleading comments
 #
 # Revision 1.9  1999/02/23 08:09:20  ivan
@@ -104,7 +108,9 @@ if ( $cgi->param('error') ) {
     map { $_, scalar($cgi->param($_)) } fields('cust_main')
   } );
   $custnum = $cust_main->custnum;
-  $pkgpart = $cgi->param('pkgpart');
+  $pkgpart = $cgi->param('pkgpart_svcpart');
+  $pkgpart =~ /^(\d+)_/;
+  $pkgpart = $1;
   $username = $cgi->param('username');
   $password = $cgi->param('_password');
   $popnum = $cgi->param('popnum');
@@ -343,27 +349,35 @@ unless ( $custnum ) {
   #foreach ( @pkg_svc ) {
   foreach ( qsearch( 'pkg_svc', {} ) ) {
     my $part_svc = qsearchs ( 'part_svc', { 'svcpart' => $_->svcpart } );
-    $pkgpart{ $_->pkgpart } = 9999 # never will == 1 below
+    $pkgpart{ $_->pkgpart } = -1 # never will == 1 below
       if ( $part_svc->svcdb ne 'svc_acct' );
-    $pkgpart{ $_->pkgpart }++;
+    if ( $pkgpart{ $_->pkgpart } ) {
+      $pkgpart{ $_->pkgpart } = '-1';
+    } else {
+      $pkgpart{ $_->pkgpart } = $_->svcpart;
+    }
   }
 
   my @part_pkg =
     #grep { $pkgpart{ $_->pkgpart } == 1 } qsearch( 'part_pkg', {} );
     grep {
-      ( $pkgpart{ $_->pkgpart } || 0 ) == 1
+      #( $pkgpart{ $_->pkgpart } || 0 ) == 1
+      $pkgpart{ $_->pkgpart } 
+      && $pkgpart{ $_->pkgpart } != -1
       && $part_pkg{ $_->pkgpart }
+      ;
     } qsearch( 'part_pkg', {} );
 
   if ( @part_pkg ) {
 
     print "<BR><BR>First package", itable("#c0c0c0"),
-          qq!<TR><TD COLSPAN=2><SELECT NAME="pkgpart">!;
+          qq!<TR><TD COLSPAN=2><SELECT NAME="pkgpart_svcpart">!;
 
     print qq!<OPTION VALUE="">(none)!;
 
     foreach my $part_pkg ( @part_pkg ) {
-      print qq!<OPTION VALUE="!, $part_pkg->pkgpart, '"',
+      print qq!<OPTION VALUE="!,
+              $part_pkg->pkgpart. "_". $pkgpart{ $part_pkg->pkgpart }, '"',
             " SELECTED"x($part_pkg->pkgpart == $pkgpart),
             ">", $part_pkg->pkg, " - ", $part_pkg->comment;
     }
@@ -383,7 +397,8 @@ END
     print qq!<TR><TD ALIGN="right">POP</TD><TD><SELECT NAME="popnum" SIZE=1><OPTION> !;
     my($svc_acct_pop);
     foreach $svc_acct_pop ( qsearch ('svc_acct_pop',{} ) ) {
-    print "<OPTION", $svc_acct_pop->popnum == $popnum ? ' SELECTED' : '', ">", 
+    print qq!<OPTION VALUE="!, $svc_acct_pop->popnum, '"',
+          ( $popnum && $svc_acct_pop->popnum == $popnum ) ? ' SELECTED' : '', ">", 
           $svc_acct_pop->popnum, ": ", 
           $svc_acct_pop->city, ", ",
           $svc_acct_pop->state,
index 9745fa6..2eb1c19 100755 (executable)
@@ -1,6 +1,6 @@
 #!/usr/bin/perl -Tw
 #
-# $Id: cust_main.cgi,v 1.7 1999-02-28 00:03:42 ivan Exp $
+# $Id: cust_main.cgi,v 1.8 1999-03-25 13:55:10 ivan Exp $
 #
 # Usage: post form to:
 #        http://server.name/path/cust_main.cgi
 #       bmccane@maxbaud.net     98-apr-3
 #
 # $Log: cust_main.cgi,v $
-# Revision 1.7  1999-02-28 00:03:42  ivan
+# Revision 1.8  1999-03-25 13:55:10  ivan
+# one-screen new customer entry (including package and service) for simple
+# packages with one svc_acct service
+#
+# Revision 1.7  1999/02/28 00:03:42  ivan
 # removed misleading comments
 #
 # Revision 1.6  1999/01/25 12:10:00  ivan
 
 use strict;
 use vars qw( $cgi $payby @invoicing_list $new $custnum $error );
+use vars qw( $cust_pkg $cust_svc $svc_acct );
 use CGI;
 use CGI::Carp qw(fatalsToBrowser);
 use FS::UID qw(cgisuidsetup getotaker);
 use FS::CGI qw( popurl );
-use FS::Record qw(qsearchs fields);
+use FS::Record qw( qsearch qsearchs fields );
 use FS::cust_main;
+use FS::type_pkgs;
+use FS::agent;
 
 $cgi = new CGI;
 &cgisuidsetup($cgi);
@@ -86,14 +93,75 @@ $new = new FS::cust_main ( {
   } fields('cust_main')
 } );
 
+#perhaps the invocing_list magic should move to cust_main.pm?
 $error = $new->check_invoicing_list( \@invoicing_list );
 
-#perhaps the invocing_list magic should move to cust_main.pm?
+#perhaps this stuff should go to cust_main.pm as well
+$cust_pkg = '';
+$svc_acct = '';
 if ( $new->custnum eq '' ) {
-  #false laziness: copied from cust_pkg.pm
-  HERE!
-  #
+
+  if ( $cgi->param('pkgpart_svcpart') ) {
+    my $x = $cgi->param('pkgpart_svcpart');
+    $x =~ /^(\d+)_(\d+)$/;
+    my($pkgpart, $svcpart) = ($1, $2);
+    #false laziness: copied from FS::cust_pkg::order (which should become a
+    #FS::cust_main method)
+    my(%part_pkg);
+    # generate %part_pkg
+    # $part_pkg{$pkgpart} is true iff $custnum may purchase $pkgpart
+    my $agent = qsearchs('agent',{'agentnum'=> $new->agentnum });
+    my($type_pkgs);
+    foreach $type_pkgs ( qsearch('type_pkgs',{'typenum'=> $agent->typenum }) ) {
+      my($pkgpart)=$type_pkgs->pkgpart;
+      $part_pkg{$pkgpart}++;
+    }
+    #eslaf
+
+    $error ||= "Agent ". $new->agentnum. " (type ". $agent->typenum. ") can't".
+               "purchase pkgpart ". $pkgpart
+      unless $part_pkg{ $pkgpart };
+
+    $cust_pkg = new FS::cust_pkg ( {
+                            #later         'custnum' => $custnum,
+                                     'pkgpart' => $pkgpart,
+                                   } );
+    $error ||= $cust_pkg->check;
+
+    #$cust_svc = new FS::cust_svc ( { 'svcpart' => $svcpart } );
+
+    #$error ||= $cust_svc->check;
+
+    $svc_acct = new FS::svc_acct ( {
+                                     'svcpart'   => $svcpart,
+                                     'username'  => $cgi->param('username'),
+                                     '_password' => $cgi->param('_password'),
+                                     'popnum'    => $cgi->param('popnum'),
+                                   } );
+
+    my $y = $svc_acct->setdefault; # arguably should be in new method
+    $error ||= $y unless ref($y);
+    #and just in case you were silly
+    $svc_acct->svcpart($svcpart);
+    $svc_acct->username($cgi->param('username'));
+    $svc_acct->_password($cgi->param('_password'));
+    $svc_acct->popnum($cgi->param('popnum'));
+
+    $error ||= $svc_acct->check;
+
+  } elsif ( $cgi->param('username') ) { #good thing to catch
+    $error = "Can't assign username without a package!";
+  }
+
   $error ||= $new->insert;
+  if ( $cust_pkg && ! $error ) {
+    $cust_pkg->custnum( $new->custnum );
+    $error ||= $cust_pkg->insert; 
+    warn "WARNING: $error on pre-checked cust_pkg record!" if $error;
+    $svc_acct->pkgnum( $cust_pkg->pkgnum );
+    $error ||= $svc_acct->insert;
+    warn "WARNING: $error on pre-checked svc_acct record!" if $error;
+  }
 } else { #create old record object
   my $old = qsearchs( 'cust_main', { 'custnum' => $new->custnum } ); 
   $error ||= "Old record not found!" unless $old;