CGI::param called in list context
[freeside.git] / httemplate / edit / cust_main.cgi
index 61d92b9..cf32324 100755 (executable)
-<% include('/elements/header.html',
-      $title,
-      '',
-      ' onUnload="myclose()"' #hmm, in billing.html
-) %>
+<& /elements/header.html, $title, &>
 
-<% include('/elements/error.html') %>
+<& /elements/error.html &>
 
 <FORM NAME   = "CustomerForm"
       METHOD = "POST"
       ACTION = "<% popurl(1) %>process/cust_main.cgi"
-%#      STYLE = "margin-bottom: 0"
-%#      STYLE="margin-top: 0; margin-bottom: 0">
 >
 
 <INPUT TYPE="hidden" NAME="custnum"     VALUE="<% $custnum %>">
 <INPUT TYPE="hidden" NAME="prospectnum" VALUE="<% $prospectnum %>">
 
 % if ( $custnum ) { 
-  Customer #<B><% $cust_main->display_custnum %></B> - 
+  <% mt('Customer #') |h %><B><% $cust_main->display_custnum %></B> - 
   <B><FONT COLOR="#<% $cust_main->statuscolor %>">
-    <% ucfirst($cust_main->status) %>
+    <% $cust_main->status_label %>
   </FONT></B>
   <BR><BR>
 % } 
 
 %# agent, agent_custid, refnum (advertising source), referral_custnum
-<% include('cust_main/top_misc.html', $cust_main, 'custnum' => $custnum ) %>
+%# better section title for this?
+<FONT CLASS="fsinnerbox-title"><% mt('Basics') |h %></FONT>
+<& cust_main/basics.html, $cust_main, 'custnum' => $custnum  &>
 
 %# birthdate
-% if ( $conf->exists('cust_main-enable_birthdate') ) {
+% if (    $conf->config('national_id-country')
+%      || $conf->exists('cust_main-enable_birthdate')
+%      || $conf->exists('cust_main-enable_anniversary_date')
+%    )
+% {
   <BR>
-  <% include('cust_main/birthdate.html', $cust_main) %>
+  <& cust_main/birthdate.html, $cust_main &>
 % }
-
-%# latitude and longitude
-% if ( $conf->exists('cust_main-require_censustract') ) {
-%   my ($latitude, $longitude) = $cust_main->service_coordinates;
-%   $latitude ||= $conf->config('company_latitude') || '';
-%   $longitude ||= $conf->config('company_longitude') || '';
-  <INPUT NAME="latitude" TYPE="hidden" VALUE="<% $latitude |h %>">
-  <INPUT NAME="longitude" TYPE="hidden" VALUE="<% $longitude |h %>">
+% my $has_ship_address = '';
+% if ( $cgi->param('error') ) {
+%   $has_ship_address = !$same;
+% } elsif ( $cust_main->custnum ) {
+%   $has_ship_address = $cust_main->has_ship_address;
 % }
-
-%# contact info
-
-%  my $same_checked = '';
-%  my $ship_disabled = '';
-%  my @ship_style = ();
-%  unless ( $cust_main->ship_last && $same ne 'Y' ) {
-%    $same_checked = 'CHECKED';
-%    $ship_disabled = 'DISABLED';
-%    push @ship_style, 'background-color:#dddddd';
-%    foreach (
-%      qw( last first company address1 address2 city county state zip country
-%          daytime night fax )
-%    ) {
-%      $cust_main->set("ship_$_", $cust_main->get($_) );
-%    }
-%  }
-
 <BR>
-<FONT SIZE="+1"><B>Billing address</B></FONT>
-
-<% include('cust_main/contact.html',
-             'cust_main'    => $cust_main,
-             'pre'          => '',
-             'onchange'     => 'bill_changed(this)',
-             'disabled'     => '',
-             'ss'           => $ss,
-             'stateid'      => $stateid,
-             'same_checked' => $same_checked, #for address2 "Unit #" labeling
-          )
-%>
-
-<SCRIPT>
-function bill_changed(what) {
-  if ( what.form.same.checked ) {
-% for (qw( last first company address1 address2 city zip daytime night fax )) { 
-    what.form.ship_<%$_%>.value = what.form.<%$_%>.value;
-% } 
-
-    what.form.ship_country.selectedIndex = what.form.country.selectedIndex;
-
-    function fix_ship_city() {
-      what.form.ship_city_select.selectedIndex = what.form.city_select.selectedIndex;
-      what.form.ship_city.style.display = what.form.city.style.display;
-      what.form.ship_city_select.style.display = what.form.city_select.style.display;
-    }
-
-    function fix_ship_county() {
-      what.form.ship_county.selectedIndex = what.form.county.selectedIndex;
-      ship_county_changed(what.form.ship_county, fix_ship_city );
-    }
-
-    function fix_ship_state() {
-      what.form.ship_state.selectedIndex = what.form.state.selectedIndex;
-      ship_state_changed(what.form.ship_state, fix_ship_county );
-    }
+<TABLE> <TR>
+  <TD>
+%#; padding-right:2px; vertical-align:top">
+    <FONT CLASS="fsinnerbox-title"><% mt('Billing address') |h %></FONT>
+    <TABLE CLASS="fsinnerbox" WIDTH="100%">
+    <& cust_main/before_bill_location.html, $cust_main &>
+    <& /elements/location.html,
+        object => $cust_main->bill_location,
+        prefix => 'bill_',
+        enable_censustract => 1,
+        enable_district => 1,
+        enable_coords => 1,
+    &>
+    <& cust_main/after_bill_location.html, $cust_main &>
+    </TABLE>
+  </TD>
+</TR>
+<TR><TD STYLE="height:14px"></TD></TR>
+<TR>
+  <TD>
+    <FONT CLASS="fsinnerbox-title"><% mt('Service address') |h %></FONT>
+    <INPUT TYPE="checkbox" 
+           NAME="same"
+           ID="same"
+           onclick="samechanged(this)"
+           onkeyup="samechanged(this)"
+           VALUE="Y"
+           <% $has_ship_address ? '' : 'CHECKED' %>
+    ><% mt('same as billing address') |h %>
+    <DIV ID="div_ship_location">
+      <TABLE WIDTH="100%" CLASS="fsinnerbox">
+      <& cust_main/before_ship_location.html, $cust_main &>
+      <& /elements/location.html,
+          object => $cust_main->ship_location,
+          prefix => 'ship_',
+          enable_censustract => 1,
+          enable_district => 1,
+          enable_coords => 1,
+      &>
+% unless ($conf->exists('invoice-ship_address')) { #it's always on, so hide per-cust config
+        <TR>
+          <TD COLSPAN="8">
+            <% include('/elements/checkbox.html',
+                 'field'      => 'invoice_ship_address',
+                 'value'      => 'Y',
+                 'curr_value' => $cust_main->invoice_ship_address,
+                 'postfix'    => emt('Include service address on invoices'),
+            ) %>
+          </TD>
+        </TR>
+% }
+      </TABLE>
+    </DIV>
+  </TD>
+</TR></TABLE>
 
-    ship_country_changed(what.form.ship_country, fix_ship_state );
+<SCRIPT TYPE="text/javascript">
 
-  }
-}
 function samechanged(what) {
   if ( what.checked ) {
-    bill_changed(what);
-
-%   my @fields = qw( last first company address1 address2 city city_select county state zip country daytime night fax );
-%   for (@fields) { 
-      what.form.ship_<%$_%>.disabled = true;
-      what.form.ship_<%$_%>.style.backgroundColor = '#dddddd';
-%   } 
-
-%   if ( $conf->exists('cust_main-require_address2') ) {
-      document.getElementById('address2_required').style.visibility = '';
-      document.getElementById('address2_label').style.visibility = '';
-      document.getElementById('ship_address2_required').style.visibility = 'hidden';
-      document.getElementById('ship_address2_label').style.visibility = 'hidden';
-%   }
-
+    $('#div_ship_location').slideUp();
   } else {
-
-%   for (@fields) { 
-      what.form.ship_<%$_%>.disabled = false;
-      what.form.ship_<%$_%>.style.backgroundColor = '#ffffff';
-%   } 
-
-%   if ( $conf->exists('cust_main-require_address2') ) {
-      document.getElementById('address2_required').style.visibility = 'hidden';
-      document.getElementById('address2_label').style.visibility = 'hidden';
-      document.getElementById('ship_address2_required').style.visibility = '';
-      document.getElementById('ship_address2_label').style.visibility = '';
-%   }
-
+    $('#div_ship_location').slideDown();
   }
 }
+
+% if ( ! $has_ship_address ) {
+  $('#div_ship_location').hide();
+% }
+
 </SCRIPT>
 
-<BR>
-<FONT SIZE="+1"><B>Service address</B></FONT>
-
-(<INPUT TYPE="checkbox" NAME="same" VALUE="Y" onClick="samechanged(this)" <%$same_checked%>>same as billing address)
-<% include('cust_main/contact.html',
-             'cust_main' => $cust_main,
-             'pre'       => 'ship_',
-             'onchange'  => '',
-             'disabled'  => $ship_disabled,
-             'style'     => \@ship_style
-          )
-%>
+<& cust_main/contacts_new.html, 'cust_main'=>$cust_main, 'submit_id'=>'submitButton', &>
 
 %# billing info
-<% include( 'cust_main/billing.html', $cust_main,
-               'payinfo'        => $payinfo,
+<& cust_main/billing.html, $cust_main,
                'invoicing_list' => \@invoicing_list,
-           )
-%>
+&>
 
 % my $ro_comments = $conf->exists('cust_main-use_comments')?'':'readonly';
 % if (!$ro_comments || $cust_main->comments) {
 
-    <BR>Comments
-    <% &ntable("#cccccc") %>
+    <BR>
+    <FONT CLASS="fsinnerbox-title"><% mt('Comments') |h %></FONT>
+    <TABLE CLASS="fsinnerbox">
       <TR>
         <TD>
           <TEXTAREA NAME = "comments"
@@ -178,19 +140,17 @@ function samechanged(what) {
 
 % unless ( $custnum ) {
 
-    <% include('cust_main/first_pkg.html', $cust_main,
+    <& cust_main/first_pkg.html, $cust_main,
                  'pkgpart_svcpart' => $pkgpart_svcpart,
                  'disable_empty'   =>
                    scalar( $cgi->param('lock_pkgpart') =~ /^(\d+)$/ ),
-                 #svc_acct
                  'username'        => $username,
                  'password'        => $password,
                  'popnum'          => $popnum,
                  'saved_domsvc'    => $saved_domsvc,
                  %svc_phone,
                  %svc_dsl,
-              )
-    %>
+    &>
 
 % }
 
@@ -198,30 +158,19 @@ function samechanged(what) {
 
 <INPUT TYPE="hidden" NAME="usernum" VALUE="<% $cust_main->usernum %>">
 
-%# cust_main/bottomfixup.js
-% foreach my $hidden (
-%    'payauto',
-%    'payinfo', 'payinfo1', 'payinfo2', 'paytype',
-%    'payname', 'paystate', 'exp_month', 'exp_year', 'paycvv',
-%    'paystart_month', 'paystart_year', 'payissue',
-%    'payip',
-%    'paid',
-% ) {
-    <INPUT TYPE="hidden" NAME="<% $hidden %>" VALUE="">
-% } 
-
-<% include('cust_main/bottomfixup.html') %>
+<& cust_main/bottomfixup.html, 'custnum' => $custnum &>
 
 <BR>
 <INPUT TYPE    = "button"
        NAME    = "submitButton"
        ID      = "submitButton"
-       VALUE   = "<% $custnum ?  "Apply Changes" : "Add Customer" %>"
+       VALUE   = "<% $custnum ?  emt("Apply changes") : emt("Add Customer") %>"
        onClick = "this.disabled=true; bottomfixup(this.form);"
 >
+<BR><BR>
 </FORM>
 
-<% include('/elements/footer.html') %>
+<& /elements/footer.html &>
 
 <%init>
 
@@ -236,32 +185,64 @@ my $conf = new FS::Conf;
 
 #get record
 
-my($custnum, $cust_main, $ss, $stateid, $payinfo, @invoicing_list);
-my $same = '';
+my($custnum, $cust_main, $ss, $stateid, @invoicing_list);
 my $pkgpart_svcpart = ''; #first_pkg
 my($username, $password, $popnum, $saved_domsvc) = ( '', '', 0, 0 ); #svc_acct
 my %svc_phone = ();
 my %svc_dsl = ();
 my $prospectnum = '';
 my $locationnum = '';
+my $same = '';
+
+$m->comp('/elements/handle_uri_query', 'secure'=>1);
 
 if ( $cgi->param('error') ) {
 
+  $same = ($cgi->param('same') || '') eq 'Y';
+  # false laziness w/ edit/process/cust_main.cgi
+  my %locations;
+  for my $pre (qw(bill ship)) {
+    my %hash;
+    foreach my $locfield ( FS::cust_main->location_fields ) {
+      # don't search on lat/long, string values can cause qsearchs to die
+      next if grep {$_ eq $locfield} qw(latitude longitude);
+      $hash{$locfield} = scalar($cgi->param($pre.'_'.$locfield));
+    }
+    $hash{'custnum'} = $cgi->param('custnum');
+    $locations{$pre} = qsearchs('cust_location', \%hash)
+                       || FS::cust_location->new( \%hash );
+    # now set lat/long, for redisplay of entered values
+    foreach my $locfield ( qw(latitude longitude) ) {
+      my $locvalue = scalar($cgi->param($pre.'_'.$locfield));
+      $locations{$pre}->set($locfield,$locvalue);
+    }
+  }
+  if ( $same ) {
+    $locations{ship} = $locations{bill};
+  }
+
   $cust_main = new FS::cust_main ( {
-    map { $_, scalar($cgi->param($_)) } fields('cust_main')
+    map { ( $_, scalar($cgi->param($_)) ) } (fields('cust_main')),
+    map { ( "ship_$_", '' ) } (FS::cust_main->location_fields)
   } );
 
+  for my $pre (qw(bill ship)) {
+    $cust_main->set($pre.'_location', $locations{$pre});
+    $cust_main->set($pre.'_locationnum', $locations{$pre}->locationnum);
+  }
+
   $custnum = $cust_main->custnum;
 
   die "access denied"
     unless $curuser->access_right($custnum ? 'Edit customer' : 'New customer');
 
   @invoicing_list = split( /\s*,\s*/, $cgi->param('invoicing_list') );
-  $same = $cgi->param('same');
-  $cust_main->setfield('paid' => $cgi->param('paid')) if $cgi->param('paid');
+  $cust_main->setfield( 'paid' => scalar($cgi->param('paid')) )
+    if $cgi->param('paid');
   $ss = $cust_main->ss;           # don't mask an entered value on errors
   $stateid = $cust_main->stateid; # don't mask an entered value on errors
-  $payinfo = $cust_main->payinfo; # don't mask an entered value on errors
+
+  $cust_main->national_id( $cgi->param('national_id1') || $cgi->param('national_id2') );
 
   $prospectnum = $cgi->param('prospectnum') || '';
 
@@ -296,7 +277,8 @@ if ( $cgi->param('error') ) {
   my( $query ) = $cgi->keywords;
   $query =~ /^(\d+)$/;
   $custnum=$1;
-  $cust_main = qsearchs('cust_main', { 'custnum' => $custnum } );
+  $cust_main = qsearchs('cust_main', { 'custnum' => $custnum } )
+    or die "custnum $custnum not found";
   if ( $cust_main->dbdef_table->column('paycvv')
        && length($cust_main->paycvv)             ) {
     my $paycvv = $cust_main->paycvv;
@@ -306,7 +288,6 @@ if ( $cgi->param('error') ) {
   @invoicing_list = $cust_main->invoicing_list;
   $ss = $cust_main->masked('ss');
   $stateid = $cust_main->masked('stateid');
-  $payinfo = $cust_main->paymask;
 
 } else { #new customer
 
@@ -315,14 +296,18 @@ if ( $cgi->param('error') ) {
 
   $custnum='';
   $cust_main = new FS::cust_main ( {} );
-  $cust_main->otaker( &getotaker );
-  $cust_main->referral_custnum( $cgi->param('referral_custnum') );
-  @invoicing_list = ();
-  push @invoicing_list, 'POST'
+
+  my @agentnums = $curuser->agentnums;
+  $cust_main->agentnum( $agentnums[0] )
+    if scalar(@agentnums) == 1;
+  $cust_main->agentnum( $conf->config('default_agentnum') )
+    if $conf->exists('default_agentnum');
+
+  $cust_main->referral_custnum( scalar($cgi->param('referral_custnum')) );
+  $cust_main->set('postal_invoice', 'Y')
     unless $conf->exists('disablepostalinvoicedefault');
   $ss = '';
   $stateid = '';
-  $payinfo = '';
 
   if ( $cgi->param('qualnum') =~ /^(\d+)$/ ) {
     my $qualnum = $1;
@@ -337,8 +322,8 @@ if ( $cgi->param('error') ) {
     $cust_main->company(  $prospect_main->company  );
 
     #first contact? -> name
-    my @contacts = $prospect_main->contact;
-    my $contact = $contacts[0];
+    my @prospect_contacts = $prospect_main->prospect_contact;
+    my $contact = $prospect_contacts[0]->contact;
     $cust_main->first( $contact->first );
     $cust_main->set( 'last', $contact->get('last') );
     #contact phone numbers?
@@ -347,7 +332,7 @@ if ( $cgi->param('error') ) {
     my $cust_location = $qual->cust_location;
     $cust_location->dealternize;
     $cust_main->$_( $cust_location->$_ )
-      foreach qw( address1 address2 city county state zip country geocode );
+      foreach qw( address1 address2 city county state zip country latitude longitude coord_auto geocode );
 
     #locationnum -> package order
     $locationnum = $qual->locationnum;
@@ -358,6 +343,24 @@ if ( $cgi->param('error') ) {
     $svc_dsl{$_} = $qual->$_
       foreach qw( phonenum vendor_qual_id );
   }
+  else {
+    my $countrydefault = $conf->config('countrydefault') || 'US';
+    my $statedefault = $conf->config('statedefault') || 'CA';
+    $cust_main->set('bill_location', 
+      FS::cust_location->new( {
+          country => $countrydefault,
+          state => $statedefault,
+          coord_auto => 'Y',
+      } )
+    );
+    $cust_main->set('ship_location',
+      FS::cust_location->new( {
+          country => $countrydefault,
+          state => $statedefault,
+          coord_auto => 'Y',
+      } )
+    );
+  }
 
   if ( $cgi->param('lock_pkgpart') =~ /^(\d+)$/ ) {
     my $pkgpart = $1;
@@ -369,10 +372,8 @@ if ( $cgi->param('error') ) {
 
 }
 
-my %keep = map { $_=>1 } qw( error tagnum lock_agentnum lock_pkgpart );
-$cgi->delete( grep !$keep{$_}, $cgi->param );
-
 my $title = $custnum ? 'Edit Customer' : 'Add Customer';
+$title = mt($title);
 $title .= ": ". $cust_main->name if $custnum;
 
 my $r = qq!<font color="#ff0000">*</font>&nbsp;!;