i18n fixes
[freeside.git] / htdocs / edit / cust_main.cgi
index ba86428..813c4b5 100755 (executable)
@@ -1,12 +1,10 @@
 #!/usr/bin/perl -Tw
 #
-# $Id: cust_main.cgi,v 1.9 1999-02-23 08:09:20 ivan Exp $
+# $Id: cust_main.cgi,v 1.14 1999-04-14 07:47:53 ivan Exp $
 #
 # Usage: cust_main.cgi custnum
 #        http://server.name/path/cust_main.cgi?custnum
 #
-# Note: Should be run setuid freeside as user nobody.
-#
 # ivan@voicenet.com 96-nov-29 -> 96-dec-04
 #
 # Blank custnum for new customer.
 # fixed one missed day->daytime ivan@sisd.com 98-jul-13
 #
 # $Log: cust_main.cgi,v $
-# Revision 1.9  1999-02-23 08:09:20  ivan
+# Revision 1.14  1999-04-14 07:47:53  ivan
+# i18n fixes
+#
+# Revision 1.13  1999/04/09 03:52:55  ivan
+# explicit & for table/itable/ntable
+#
+# Revision 1.12  1999/04/06 11:16:16  ivan
+# give a meaningful error message if you try to create a customer before you've
+# created an agent
+#
+# 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
 # beginnings of one-screen new customer entry and some other miscellania
 #
 # Revision 1.8  1999/01/25 12:09:53  ivan
@@ -89,6 +104,10 @@ use FS::cust_main_county;
   #for false laziness below
   use FS::svc_acct_pop;
 
+  #for (other) false laziness below
+  use FS::agent;
+  use FS::type_pkgs;
+
 $cgi = new CGI;
 cgisuidsetup($cgi);
 
@@ -99,7 +118,12 @@ if ( $cgi->param('error') ) {
     map { $_, scalar($cgi->param($_)) } fields('cust_main')
   } );
   $custnum = $cust_main->custnum;
-  $pkgpart = $cgi->param('pkgpart');
+  $pkgpart = $cgi->param('pkgpart_svcpart') || '';
+  if ( $pkgpart =~ /^(\d+)_/ ) {
+    $pkgpart = $1;
+  } else {
+    $pkgpart = '';
+  }
   $username = $cgi->param('username');
   $password = $cgi->param('_password');
   $popnum = $cgi->param('popnum');
@@ -141,6 +165,7 @@ print qq!<FORM ACTION="${p1}process/cust_main.cgi" METHOD=POST>!,
 $r = qq!<font color="#ff0000">*</font>!;
 
 @agents = qsearch( 'agent', {} );
+die "No agents created!" unless @agents;
 $agentnum = $cust_main->agentnum || $agents[0]->agentnum; #default to first
 if ( scalar(@agents) == 1 ) {
   print qq!<INPUT TYPE="hidden" NAME="agentnum" VALUE="$agentnum">!;
@@ -195,7 +220,7 @@ if ( $custnum ) {
   $cust_main->zip,
 );
 
-print "<BR><BR>Contact information", itable("#c0c0c0"), <<END;
+print "<BR><BR>Contact information", &itable("#c0c0c0"), <<END;
 <TR><TH ALIGN="right">${r}Contact name<BR>(last, first)</TH><TD COLSPAN=3><INPUT TYPE="text" NAME="last" VALUE="$last">, <INPUT TYPE="text" NAME="first" VALUE="$first"></TD><TD ALIGN="right">SS#</TD><TD><INPUT TYPE="text" NAME="ss" VALUE="$ss" SIZE=11></TD></TR>
 <TR><TD ALIGN="right">Company</TD><TD COLSPAN=5><INPUT TYPE="text" NAME="company" VALUE="$company" SIZE=70></TD></TR>
 <TR><TH ALIGN="right">${r}Address</TH><TD COLSPAN=5><INPUT TYPE="text" NAME="address1" VALUE="$address1" SIZE=70></TD></TR>
@@ -258,7 +283,7 @@ sub expselect {
   $return;
 }
 
-print "<BR>Billing information", itable("#c0c0c0"),
+print "<BR>Billing information", &itable("#c0c0c0"),
       qq!<TR><TD><INPUT TYPE="checkbox" NAME="tax" VALUE="Y"!;
 print qq! CHECKED! if $cust_main->tax eq "Y";
 print qq!>Tax Exempt</TD></TR>!;
@@ -272,7 +297,7 @@ print qq!<TR><TD>Email invoice <INPUT TYPE="text" NAME="invoicing_list" VALUE="$
 
 print "<TR><TD>Billing type</TD></TR>",
       "</TABLE>",
-      table("#c0c0c0"), "<TR>";
+      &table("#c0c0c0"), "<TR>";
 
 ($payinfo, $payname)=(
   $cust_main->payinfo,
@@ -306,30 +331,69 @@ unless ( $custnum ) {
   #use FS::part_svc;
   #use FS::part_pkg;
 
+  #false laziness, copied from FS::cust_pkg::order
+  my %part_pkg;
+  if ( scalar(@agents) == 1 ) {
+    # generate %part_pkg
+    # $part_pkg{$pkgpart} is true iff $custnum may purchase $pkgpart
+       #my($cust_main)=qsearchs('cust_main',{'custnum'=>$custnum});
+       #my($agent)=qsearchs('agent',{'agentnum'=> $cust_main->agentnum });
+    my($agent)=qsearchs('agent',{'agentnum'=> $agentnum });
+
+    my($type_pkgs);
+    foreach $type_pkgs ( qsearch('type_pkgs',{'typenum'=> $agent->typenum }) ) {
+      my($pkgpart)=$type_pkgs->pkgpart;
+      $part_pkg{$pkgpart}++;
+    }
+  } else {
+    #can't know (agent not chosen), so, allow all
+    my %typenum;
+    foreach my $agent ( @agents ) {
+      next if $typenum{$agent->typenum}++;
+      foreach my $type_pkgs ( qsearch('type_pkgs',{'typenum'=> $agent->typenum }) ) {
+        my($pkgpart)=$type_pkgs->pkgpart;
+        $part_pkg{$pkgpart}++;
+      }
+    }
+
+  }
+  #eslaf
+
   my %pkgpart;
   #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 } qsearch( 'part_pkg', {} );
+    grep {
+      #( $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">!;
+    print "<BR><BR>First package", &itable("#c0c0c0"),
+          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, '"',
-            " SELECTED"x($part_pkg->pkgpart == $pkgpart),
-            ">", $part_pkg->pkg, " - ", $part_pkg->comment;
+      print qq!<OPTION VALUE="!,
+              $part_pkg->pkgpart. "_". $pkgpart{ $part_pkg->pkgpart }, '"';
+      print " SELECTED" if $pkgpart && ( $part_pkg->pkgpart == $pkgpart );
+      print ">", $part_pkg->pkg, " - ", $part_pkg->comment;
     }
     print "</SELECT></TD></TR>";
 
@@ -347,7 +411,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,