X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=httemplate%2Fedit%2Fprocess%2Fcust_main.cgi;h=715e873771a611db789711a0d56d72aec32f1025;hp=52a2608fd33c7da7f8270772af732da9d12712c4;hb=9c7c2549038d64b4cf84d794ef6f461495bab4e8;hpb=a4d4d3df88b33a6db30b565921f6d62efb252351 diff --git a/httemplate/edit/process/cust_main.cgi b/httemplate/edit/process/cust_main.cgi index 52a2608fd..715e87377 100755 --- a/httemplate/edit/process/cust_main.cgi +++ b/httemplate/edit/process/cust_main.cgi @@ -29,10 +29,12 @@ $cgi->param('tax','') unless defined $cgi->param('tax'); $cgi->param('refnum', (split(/:/, ($cgi->param('refnum'))[0] ))[0] ); -my @invoicing_list = split( /\s*\,\s*/, $cgi->param('invoicing_list') ); -push @invoicing_list, 'POST' if $cgi->param('invoicing_list_POST'); -push @invoicing_list, 'FAX' if $cgi->param('invoicing_list_FAX'); -$cgi->param('invoicing_list', join(',', @invoicing_list) ); +#my @invoicing_list = split( /\s*\,\s*/, $cgi->param('invoicing_list') ); +#push @invoicing_list, 'POST' if $cgi->param('invoicing_list_POST'); +#push @invoicing_list, 'FAX' if $cgi->param('invoicing_list_FAX'); +#$cgi->param('invoicing_list', join(',', @invoicing_list) ); + +my $agentnum = $cgi->param('agentnum'); # is this actually used? if so, we need to clone locations... # but I can't find anything that sets this parameter to a non-empty value @@ -57,6 +59,12 @@ if ( $conf->exists('agent-ship_address', $cgi->param('agentnum')) ) { my %locations; for my $pre (qw(bill ship)) { + foreach (qw( latitude longitude)) { + my $coord = $cgi->param($pre.'_'.$_); + $coord =~ s/\N{DEGREE SIGN}\s*$//; + $cgi->param($pre.'_'.$_, $coord); + } + my %hash; foreach ( FS::cust_main->location_fields ) { $hash{$_} = scalar($cgi->param($pre.'_'.$_)); @@ -74,11 +82,11 @@ if ( ($cgi->param('same') || '') eq 'Y' ) { # but explicitly avoid setting ship_ fields my $new = new FS::cust_main ( { - map { ( $_, scalar($cgi->param($_)) ) } (fields('cust_main')), - map { ( "ship_$_", '' ) } (FS::cust_main->location_fields) + (map { ( $_, scalar($cgi->param($_)) ) } (fields('cust_main'))), + (map { ( "ship_$_", '' ) } (FS::cust_main->location_fields)) } ); -$new->invoice_noemail( ($cgi->param('invoice_email') eq 'Y') ? '' : 'Y' ); +warn Dumper( $new ) if $DEBUG > 1; if ( $duplicate_of ) { # then negate all changes to the customer; the only change we should @@ -154,9 +162,47 @@ if ( $curuser->access_right('Edit customer tax exemptions') ) { }; } -$options{'contact_params'} = scalar($cgi->Vars); $options{'cust_payby_params'} = scalar($cgi->Vars); +if ( $cgi->param('residential_commercial') eq 'Residential' ) { + + my $email = $cgi->param('invoice_email') || ''; + if ( length($email) == 0 and $conf->exists('cust_main-require_invoicing_list_email', $agentnum) ) { + $error = 'Email address required'; + } + + $options{'invoicing_list'} = [ split(/\s*,\s*/, $email) ]; + # XXX really should include the phone numbers in here also + +} else { + + # contact UI is enabled + $options{'contact_params'} = scalar($cgi->Vars); + + if ($conf->exists('cust_main-require_invoicing_list_email', $agentnum)) { + my $has_email = 0; + foreach my $prefix (grep /^contactnum\d+$/, $cgi->param) { + if ( length($cgi->param($prefix . '_emailaddress')) + and $cgi->param($prefix . '_invoice_dest') ) { + $has_email = 1; + last; + } + } + $error = "At least one contact must receive email invoices" + unless $has_email; + } + +} + +# kind of a hack, but some tax data vendors require a status and others +# don't. +my $vendor = $conf->config('tax_data_vendor'); +if ( $vendor eq 'avalara' or $vendor eq 'suretax' ) { + if ( ! $cgi->param('taxstatusnum') ) { + $error ||= 'Tax status required'; + } +} + #perhaps this stuff should go to cust_main.pm if ( $new->custnum eq '' or $duplicate_of ) { @@ -263,7 +309,7 @@ if ( $new->custnum eq '' or $duplicate_of ) { } else { # create the customer - $error ||= $new->insert( \%hash, \@invoicing_list, + $error ||= $new->insert( \%hash, %options, prospectnum => scalar($cgi->param('prospectnum')), ); @@ -296,16 +342,14 @@ if ( $new->custnum eq '' or $duplicate_of ) { $new->signupdate($old->signupdate); } - warn "$me calling $new -> replace( $old, \ @invoicing_list )" if $DEBUG; + warn "$me calling $new -> replace( $old )" if $DEBUG; local($FS::cust_main::DEBUG) = $DEBUG if $DEBUG; local($FS::Record::DEBUG) = $DEBUG if $DEBUG; local($Data::Dumper::Sortkeys) = 1; - warn Dumper({ new => $new, old => $old }) if $DEBUG; + warn Dumper({ new => $new, old => $old, options => \%options}) if $DEBUG; - $error ||= $new->replace( $old, \@invoicing_list, - %options, - ); + $error ||= $new->replace( $old, %options ); warn "$me returned from replace" if $DEBUG;