contacts can be shared among customers / "duplicate contact emails", RT#27943
[freeside.git] / httemplate / edit / cust_main.cgi
index a30c7c1..da87bfc 100755 (executable)
@@ -17,7 +17,7 @@
 % if ( $custnum ) { 
   <% 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
 %# better section title for this?
 <FONT CLASS="fsinnerbox-title"><% mt('Basics') |h %></FONT>
-<& cust_main/top_misc.html, $cust_main, 'custnum' => $custnum  &>
+<& cust_main/basics.html, $cust_main, 'custnum' => $custnum  &>
 
 %# birthdate
-% if (    $conf->exists('cust_main-enable_birthdate')
-%      || $conf->exists('cust_main-enable_spouse_birthdate')
+% if (    $conf->config('national_id-country')
+%      || $conf->exists('cust_main-enable_birthdate')
+%      || $conf->exists('cust_main-enable_anniversary_date')
 %    )
 % {
   <BR>
@@ -37,7 +38,7 @@
 % }
 % my $has_ship_address = '';
 % if ( $cgi->param('error') ) {
-%   $has_ship_address = !$cgi->param('same');
+%   $has_ship_address = !$same;
 % } elsif ( $cust_main->custnum ) {
 %   $has_ship_address = $cust_main->has_ship_address;
 % }
   <TD STYLE="width:650px">
 %#; padding-right:2px; vertical-align:top">
     <FONT CLASS="fsinnerbox-title"><% mt('Billing address') |h %></FONT>
-    <TABLE CLASS="fsinnerbox">
+    <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>
@@ -59,7 +63,6 @@
 <TR><TD STYLE="height:40px"></TD></TR>
 <TR>
   <TD STYLE="width:650px">
-%#; padding-left:2px; vertical-align:top">
     <FONT CLASS="fsinnerbox-title"><% mt('Service address') |h %></FONT>
     <INPUT TYPE="checkbox" 
            NAME="same"
            VALUE="Y"
            <% $has_ship_address ? '' : 'CHECKED' %>
     ><% mt('same as billing address') |h %>
-    <TABLE CLASS="fsinnerbox" ID="table_ship_location">
-    <& /elements/location.html,
-        object => $cust_main->ship_location,
-        prefix => 'ship_',
-        enable_censustract => 1,
-        enable_district => 1,
-    &>
-    </TABLE>
-    <TABLE CLASS="fsinnerbox" ID="table_ship_location_blank"
-    STYLE="display:none">
-    <TR><TD></TD></TR>
-    </TABLE>
+    <DIV CLASS="fsinnerbox">
+      <TABLE ID="table_ship_location" WIDTH="100%">
+      <& 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,
+      &>
+      </TABLE>
+    </DIV>
   </TD>
 </TR></TABLE>
 
@@ -90,19 +93,14 @@ function samechanged(what) {
 %#  document.getElementById('table_ship_location').style.visibility = 
 %#    what.checked ? 'hidden' : 'visible';
   var t1 = document.getElementById('table_ship_location');
-  var t2 = document.getElementById('table_ship_location_blank');
   if ( what.checked ) {
-    t2.style.width  = t1.clientWidth  + 'px';
-    t2.style.height = t1.clientHeight + 'px';
-    t1.style.display = 'none';
-    t2.style.display = '';
+    t1.style.visibility = 'hidden';
   }
   else {
-    t2.style.display = 'none';
-    t1.style.display = '';
+    t1.style.visibility = 'visible'
   }
 }
-samechanged(document.getElementById('same'));
+//samechanged(document.getElementById('same'));
 </SCRIPT>
 
 <BR>
@@ -198,16 +196,19 @@ my $conf = new FS::Conf;
 #get record
 
 my($custnum, $cust_main, $ss, $stateid, $payinfo, @invoicing_list);
-my $same = '';
 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)) {
@@ -219,6 +220,9 @@ if ( $cgi->param('error') ) {
     $locations{$pre} = qsearchs('cust_location', \%hash)
                        || FS::cust_location->new( \%hash );
   }
+  if ( $same ) {
+    $locations{ship} = $locations{bill};
+  }
 
   $cust_main = new FS::cust_main ( {
     map { ( $_, scalar($cgi->param($_)) ) } (fields('cust_main')),
@@ -236,12 +240,13 @@ if ( $cgi->param('error') ) {
     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');
   $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') || '';
 
   $pkgpart_svcpart = $cgi->param('pkgpart_svcpart') || '';
@@ -275,7 +280,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;
@@ -296,7 +302,6 @@ if ( $cgi->param('error') ) {
   $cust_main = new FS::cust_main ( {} );
   $cust_main->agentnum( $conf->config('default_agentnum') )
     if $conf->exists('default_agentnum');
-  $cust_main->otaker( &getotaker );
   $cust_main->referral_custnum( $cgi->param('referral_custnum') );
   @invoicing_list = ();
   push @invoicing_list, 'POST'
@@ -305,6 +310,8 @@ if ( $cgi->param('error') ) {
   $stateid = '';
   $payinfo = '';
 
+  $cgi->param('tagnum', FS::part_tag->default_tags);
+
   if ( $cgi->param('qualnum') =~ /^(\d+)$/ ) {
     my $qualnum = $1;
     my $qual = qsearchs('qual', { 'qualnum' => $qualnum } )
@@ -318,8 +325,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?
@@ -343,14 +350,18 @@ if ( $cgi->param('error') ) {
     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 }
-      )
+      FS::cust_location->new( {
+          country => $countrydefault,
+          state => $statedefault,
+          coord_auto => 'Y',
+      } )
     );
     $cust_main->set('ship_location',
-      FS::cust_location->new(
-        { country => $countrydefault, state => $statedefault }
-      )
+      FS::cust_location->new( {
+          country => $countrydefault,
+          state => $statedefault,
+          coord_auto => 'Y',
+      } )
     );
   }