diff options
Diffstat (limited to 'htdocs/edit/cust_main.cgi')
-rwxr-xr-x | htdocs/edit/cust_main.cgi | 513 |
1 files changed, 0 insertions, 513 deletions
diff --git a/htdocs/edit/cust_main.cgi b/htdocs/edit/cust_main.cgi deleted file mode 100755 index b3d9f0d..0000000 --- a/htdocs/edit/cust_main.cgi +++ /dev/null @@ -1,513 +0,0 @@ -#!/usr/bin/perl -Tw -# -# $Id: cust_main.cgi,v 1.28 2000-12-26 23:51:40 ivan Exp $ -# -# Usage: cust_main.cgi custnum -# http://server.name/path/cust_main.cgi?custnum -# -# ivan@voicenet.com 96-nov-29 -> 96-dec-04 -# -# Blank custnum for new customer. -# ivan@voicenet.com 96-dec-16 -# -# referral defaults to blank, to force people to pick something -# ivan@voicenet.com 97-jun-4 -# -# rewrote for new API -# ivan@voicenet.com 97-jul-28 -# -# new customer is null, not '#' -# otaker gotten from &getotaker instead of $ENV{REMOTE_USER} -# ivan@sisd.com 97-nov-12 -# -# cgisuidsetup($cgi); -# no need for old_ fields. -# now state+county is a select field (took out PA hack) -# used autoloaded $cust_main->field methods -# ivan@sisd.com 97-dec-17 -# -# fixed quoting problems ivan@sisd.com 98-feb-23 -# -# paydate sql update ivan@sisd.com 98-mar-5 -# -# Changes to allow page to work at a relative position in server -# Changed 'day' to 'daytime' because Pg6.3 reserves the day word -# Added test for paydate in mm-dd-yyyy format for Pg6.3 default format -# bmccane@maxbaud.net 98-apr-3 -# -# fixed one missed day->daytime ivan@sisd.com 98-jul-13 -# -# $Log: cust_main.cgi,v $ -# Revision 1.28 2000-12-26 23:51:40 ivan -# statedefault & referraldefault config files -# -# Revision 1.27 2000/12/03 13:45:15 ivan -# patch from Jason Spence <thalakan@frys.com>: admin.html doc, autocapgen -# -# Revision 1.26 2000/06/27 12:15:50 ivan -# i18n -# -# Revision 1.25 2000/03/02 08:09:38 ivan -# still need to allow blank expiration dates -# -# Revision 1.24 2000/01/30 06:54:50 ivan -# credit card expiration dates not sticky bug fixed? -# -# Revision 1.23 2000/01/27 00:53:14 ivan -# 5.004_04 workaround -# -# Revision 1.22 1999/12/17 02:33:23 ivan -# argh -# -# Revision 1.21 1999/08/23 07:40:38 ivan -# missing </TD> flag -# -# Revision 1.20 1999/08/23 07:08:11 ivan -# no CGI::Switch for now -# -# Revision 1.19 1999/08/21 02:14:25 ivan -# better error message for no agents -# -# Revision 1.18 1999/08/11 15:38:33 ivan -# fix for perl 5.004_04 -# -# Revision 1.17 1999/08/10 11:15:45 ivan -# corrected a misleading comment -# -# Revision 1.15 1999/04/14 13:14:54 ivan -# configuration option to edit referrals of existing customers -# -# 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 -# yet more mod_perl stuff -# -# Revision 1.7 1999/01/19 05:13:34 ivan -# for mod_perl: no more top-level my() variables; use vars instead -# also the last s/create/new/; -# -# Revision 1.6 1999/01/18 09:41:24 ivan -# all $cgi->header calls now include ( '-expires' => 'now' ) for mod_perl -# (good idea anyway) -# -# Revision 1.5 1999/01/18 09:22:30 ivan -# changes to track email addresses for email invoicing -# -# Revision 1.4 1998/12/23 08:08:15 ivan -# fix typo -# -# Revision 1.3 1998/12/17 06:17:00 ivan -# fix double // in relative URLs, s/CGI::Base/CGI/; -# - -use strict; -use vars qw( $cgi $custnum $action $cust_main $p1 @agents $agentnum - $last $first $ss $company $address1 $address2 $city $zip - $daytime $night $fax @invoicing_list $invoicing_list $payinfo - $payname %payby %paybychecked $refnum $otaker $r ); -use vars qw ( $conf $pkgpart $username $password $popnum $ulen $ulen2 ); -#use CGI::Switch; -use CGI; -use CGI::Carp qw(fatalsToBrowser); -use FS::UID qw(cgisuidsetup getotaker); -#use FS::Record qw(qsearch qsearchs fields); -use FS::Record qw(qsearch qsearchs fields dbdef); -use FS::CGI qw(header popurl itable table); -use FS::cust_main; -use FS::agent; -use FS::part_referral; -use FS::cust_main_county; - - #for misplaced logic below - use FS::part_pkg; - - #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); - -$conf = new FS::Conf; - -#get record - -if ( $cgi->param('error') ) { - $cust_main = new FS::cust_main ( { - map { $_, scalar($cgi->param($_)) } fields('cust_main') - } ); - $custnum = $cust_main->custnum; - $pkgpart = $cgi->param('pkgpart_svcpart') || ''; - if ( $pkgpart =~ /^(\d+)_/ ) { - $pkgpart = $1; - } else { - $pkgpart = ''; - } - $username = $cgi->param('username'); - $password = $cgi->param('_password'); - $popnum = $cgi->param('popnum'); -} elsif ( $cgi->keywords ) { #editing - my( $query ) = $cgi->keywords; - $query =~ /^(\d+)$/; - $custnum=$1; - $cust_main = qsearchs('cust_main', { 'custnum' => $custnum } ); - $pkgpart = 0; - $username = ''; - $password = ''; - $popnum = 0; -} else { - $custnum=''; - $cust_main = new FS::cust_main ( {} ); - $cust_main->setfield('otaker',&getotaker); - $pkgpart = 0; - $username = ''; - $password = ''; - $popnum = 0; -} -$action = $custnum ? 'Edit' : 'Add'; - -# top - -$p1 = popurl(1); -print $cgi->header( '-expires' => 'now' ), header("Customer $action", ''); -print qq!<FONT SIZE="+1" COLOR="#ff0000">Error: !, $cgi->param('error'), - "</FONT>" - if $cgi->param('error'); - -# JRS: Javascript to set up the form for us - if ( $conf->exists('autocapnames') ) { - print <<END; -<SCRIPT language="Javascript"><!-- - -function capName(name) { - var temp = new String(); - var n = name.toString(); - -// Handle "Mc", "Mac", "Von", "Van", etc... - - if(n.substr(0,2).toLowerCase() == "mc") { - temp += "Mc"; - temp += n.charAt(2).toUpperCase(); - temp += n.substr(3).toLowerCase(); - return temp; - } - - if(n.substr(0,3).toLowerCase() == "mac") { - temp += "Mac"; - temp += n.charAt(3).toUpperCase(); - temp += n.substr(4).toLowerCase(); - return temp; - } - if(n.substr(0,3).toLowerCase() == "von") { - temp += "Von"; - temp += n.charAt(3).toUpperCase(); - temp += n.substr(4).toLowerCase(); - return temp; - } - if(n.substr(0,3).toLowerCase() == "van") { - temp += "Van"; - temp += n.charAt(3).toUpperCase(); - temp += n.substr(4).toLowerCase(); - return temp; - } - temp += n.charAt(0).toUpperCase(); - temp += n.substr(1).toLowerCase(); - return temp; -} - -//--> -</SCRIPT> -END -} - -print qq!<FORM ACTION="${p1}process/cust_main.cgi" METHOD=POST NAME="form1">!, - qq!<INPUT TYPE="hidden" NAME="custnum" VALUE="$custnum">!, - qq!Customer # !, ( $custnum ? $custnum : " (NEW)" ), - -; - -# agent - -$r = qq!<font color="#ff0000">*</font>!; - -@agents = qsearch( 'agent', {} ); -#die "No agents created!" unless @agents; -die "You have not created any agents. You must create at least one agent before adding a customer. Go to ". popurl(2). "browse/agent.cgi and create one or more agents." 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">!; -} else { - print qq!<BR><BR>${r}Agent <SELECT NAME="agentnum" SIZE="1">!; - my $agent; - foreach $agent (sort { - $a->agent cmp $b->agent; - } @agents) { - print '<OPTION VALUE="', $agent->agentnum, '"', - " SELECTED"x($agent->agentnum==$agentnum), - ">", $agent->agentnum,": ", $agent->agent; - } - print "</SELECT>"; -} - -#referral - -$refnum = $cust_main->refnum || $conf->config('referraldefault') || 0; -if ( $custnum && ! $conf->exists('editreferrals') ) { - print qq!<INPUT TYPE="hidden" NAME="refnum" VALUE="$refnum">!; -} else { - my(@referrals) = qsearch('part_referral',{}); - if ( scalar(@referrals) == 1 ) { - $refnum ||= $referrals[0]->refnum; - print qq!<INPUT TYPE="hidden" NAME="refnum" VALUE="$refnum">!; - } else { - print qq!<BR><BR>${r}Referral <SELECT NAME="refnum" SIZE="1">!; - print "<OPTION> " unless $refnum; - my($referral); - foreach $referral (sort { - $a->refnum <=> $b->refnum; - } @referrals) { - print "<OPTION" . " SELECTED"x($referral->refnum==$refnum), - ">", $referral->refnum, ": ", $referral->referral; - } - print "</SELECT>"; - } -} - - -# contact info - -($last,$first,$ss,$company,$address1,$address2,$city,$zip)=( - $cust_main->last, - $cust_main->first, - $cust_main->ss, - $cust_main->company, - $cust_main->address1, - $cust_main->address2, - $cust_main->city, - $cust_main->zip, -); - -print "<BR><BR>Contact information", &itable("#c0c0c0"), <<END; -<TR><TH ALIGN="right">${r}Contact name<BR>(last, first)</TH><TD COLSPAN=3> -END - -if ( $conf->exists('autocapnames') ) { - print <<END; -<INPUT TYPE="text" NAME="last" VALUE="$last" onChange="updateUsername();">, -<INPUT TYPE="text" NAME="first" VALUE="$first" onChange="updateUsername();"> -END -} else { - print <<END; -<INPUT TYPE="text" NAME="last" VALUE="$last">, -<INPUT TYPE="text" NAME="first" VALUE="$first"> -END -} - -print <<END; -</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> -<TR><TD ALIGN="right"> </TD><TD COLSPAN=5><INPUT TYPE="text" NAME="address2" VALUE="$address2" SIZE=70></TD></TR> -<TR><TH ALIGN="right">${r}City</TH><TD><INPUT TYPE="text" NAME="city" VALUE="$city"></TD><TH ALIGN="right">${r}State/Country</TH><TD><SELECT NAME="state" SIZE="1"> -END - -$cust_main->country( $conf->config('countrydefault') || 'US' ) - unless $cust_main->country; -$cust_main->state( $conf->config('statedefault') || 'CA' ) - unless $cust_main->state; -foreach ( qsearch('cust_main_county',{}) ) { - print "<OPTION"; - print " SELECTED" if ( $cust_main->state eq $_->state - && $cust_main->county eq $_->county - && $cust_main->country eq $_->country - ); - print ">",$_->state; - print " (",$_->county,")" if $_->county; - print " / ", $_->country; -} -print qq!</SELECT></TD><TH>${r}Zip</TH><TD><INPUT TYPE="text" NAME="zip" VALUE="$zip" SIZE=10></TD></TR>!; - -($daytime,$night,$fax)=( - $cust_main->daytime, - $cust_main->night, - $cust_main->fax, -); - -print <<END; -<TR><TD ALIGN="right">Day Phone</TD><TD COLSPAN=5><INPUT TYPE="text" NAME="daytime" VALUE="$daytime" SIZE=18></TD></TR> -<TR><TD ALIGN="right">Night Phone</TD><TD COLSPAN=5><INPUT TYPE="text" NAME="night" VALUE="$night" SIZE=18></TD></TR> -<TR><TD ALIGN="right">Fax</TD><TD COLSPAN=5><INPUT TYPE="text" NAME="fax" VALUE="$fax" SIZE=12></TD></TR> -END - -print "</TABLE>$r required fields<BR>"; - -# billing info - -sub expselect { - my $prefix = shift; - my( $m, $y ) = (0, 0); - if ( scalar(@_) ) { - my $date = shift || '01-2000'; - if ( $date =~ /^(\d{4})-(\d{1,2})-\d{1,2}$/ ) { #PostgreSQL date format - ( $m, $y ) = ( $2, $1 ); - } elsif ( $date =~ /^(\d{1,2})-(\d{1,2}-)?(\d{4}$)/ ) { - ( $m, $y ) = ( $1, $3 ); - } else { - die "unrecognized expiration date format: $date"; - } - } - - my $return = qq!<SELECT NAME="$prefix!. qq!_month" SIZE="1">!; - for ( 1 .. 12 ) { - $return .= "<OPTION"; - $return .= " SELECTED" if $_ == $m; - $return .= ">$_"; - } - $return .= qq!</SELECT>/<SELECT NAME="$prefix!. qq!_year" SIZE="1">!; - for ( 2001 .. 2037 ) { - $return .= "<OPTION"; - $return .= " SELECTED" if $_ == $y; - $return .= ">$_"; - } - $return .= "</SELECT>"; - - $return; -} - -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>!; -print qq!<TR><TD><INPUT TYPE="checkbox" NAME="invoicing_list_POST" VALUE="POST"!; -@invoicing_list = $cust_main->invoicing_list; -print qq! CHECKED! - if ! @invoicing_list || grep { $_ eq 'POST' } @invoicing_list; -print qq!>Postal mail invoice</TD></TR>!; -$invoicing_list = join(', ', grep { $_ ne 'POST' } @invoicing_list ); -print qq!<TR><TD>Email invoice <INPUT TYPE="text" NAME="invoicing_list" VALUE="$invoicing_list"></TD></TR>!; - -print "<TR><TD>Billing type</TD></TR>", - "</TABLE>", - &table("#c0c0c0"), "<TR>"; - -($payinfo, $payname)=( - $cust_main->payinfo, - $cust_main->payname, -); - -%payby = ( - 'CARD' => qq!Credit card<BR>${r}<INPUT TYPE="text" NAME="CARD_payinfo" VALUE="" MAXLENGTH=19><BR>${r}Exp !. expselect("CARD"). qq!<BR>${r}Name on card<BR><INPUT TYPE="text" NAME="CARD_payname" VALUE="">!, - 'BILL' => qq!Billing<BR>P.O. <INPUT TYPE="text" NAME="BILL_payinfo" VALUE=""><BR>${r}Exp !. expselect("BILL", "12-2037"). qq!<BR>${r}Attention<BR><INPUT TYPE="text" NAME="BILL_payname" VALUE="Accounts Payable">!, - 'COMP' => qq!Complimentary<BR>${r}Approved by<INPUT TYPE="text" NAME="COMP_payinfo" VALUE=""><BR>${r}Exp !. expselect("COMP"), -); -%paybychecked = ( - 'CARD' => qq!Credit card<BR>${r}<INPUT TYPE="text" NAME="CARD_payinfo" VALUE="$payinfo" MAXLENGTH=19><BR>${r}Exp !. expselect("CARD", $cust_main->paydate). qq!<BR>${r}Name on card<BR><INPUT TYPE="text" NAME="CARD_payname" VALUE="$payname">!, - 'BILL' => qq!Billing<BR>P.O. <INPUT TYPE="text" NAME="BILL_payinfo" VALUE="$payinfo"><BR>${r}Exp !. expselect("BILL", $cust_main->paydate). qq!<BR>${r}Attention<BR><INPUT TYPE="text" NAME="BILL_payname" VALUE="$payname">!, - 'COMP' => qq!Complimentary<BR>${r}Approved by<INPUT TYPE="text" NAME="COMP_payinfo" VALUE="$payinfo"><BR>${r}Exp !. expselect("COMP", $cust_main->paydate), -); -for (qw(CARD BILL COMP)) { - print qq!<TD VALIGN=TOP><INPUT TYPE="radio" NAME="payby" VALUE="$_"!; - if ($cust_main->payby eq "$_") { - print qq! CHECKED> $paybychecked{$_}</TD>!; - } else { - print qq!> $payby{$_}</TD>!; - } -} - -print "</TR></TABLE>$r required fields for each billing type"; - -unless ( $custnum ) { - # pry the wrong place for this logic. also pretty expensive - #use FS::part_pkg; - - #false laziness, copied from FS::cust_pkg::order - my $pkgpart; - if ( scalar(@agents) == 1 ) { - # $pkgpart->{PKGPART} is true iff $custnum may purchase $pkgpart - my($agent)=qsearchs('agent',{'agentnum'=> $agentnum }); - $pkgpart = $agent->pkgpart_hashref; - } else { - #can't know (agent not chosen), so, allow all - my %typenum; - foreach my $agent ( @agents ) { - next if $typenum{$agent->typenum}++; - #fixed in 5.004_05 #$pkgpart->{$_}++ foreach keys %{ $agent->pkgpart_hashref } - foreach ( keys %{ $agent->pkgpart_hashref } ) { $pkgpart->{$_}++; } #5.004_04 workaround - } - } - #eslaf - - my @part_pkg = grep { $_->svcpart('svc_acct') && $pkgpart->{ $_->pkgpart } } - qsearch( 'part_pkg', {} ); - - if ( @part_pkg ) { - - 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. "_". $pkgpart{ $part_pkg->pkgpart }, '"'; - $part_pkg->pkgpart. "_". $part_pkg->svcpart, '"'; - print " SELECTED" if $pkgpart && ( $part_pkg->pkgpart == $pkgpart ); - print ">", $part_pkg->pkg, " - ", $part_pkg->comment; - } - print "</SELECT></TD></TR>"; - - #false laziness: (mostly) copied from edit/svc_acct.cgi - #$ulen = $svc_acct->dbdef_table->column('username')->length; - $ulen = dbdef->table('svc_acct')->column('username')->length; - $ulen2 = $ulen+2; - print <<END; -<TR><TD ALIGN="right">Username</TD> -<TD><INPUT TYPE="text" NAME="username" VALUE="$username" SIZE=$ulen2 MAXLENGTH=$ulen></TD></TR> -<TR><TD ALIGN="right">Password</TD> -<TD><INPUT TYPE="text" NAME="_password" VALUE="$password" SIZE=10 MAXLENGTH=8> -(blank to generate)</TD></TR> -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 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, - " (", $svc_acct_pop->ac, ")/", - $svc_acct_pop->exch, "\n" - ; - } - print "</SELECT></TD></TR></TABLE>"; - } -} - -$otaker = $cust_main->otaker; -print qq!<INPUT TYPE="hidden" NAME="otaker" VALUE="$otaker">!, - qq!<BR><BR><INPUT TYPE="submit" VALUE="!, - $custnum ? "Apply Changes" : "Add Customer", qq!">!, - "</FORM></BODY></HTML>", -; - |