Fix Prospect edit, from Fernando-Kiernan
[freeside.git] / httemplate / edit / prospect_main.html
index c4123a0..6aefe80 100644 (file)
 <% include('elements/edit.html',
      'name_singular'   => 'prospect',
      'table'           => 'prospect_main',
+     'html_table_class'=> 'fsinnerbox',
      'labels'          => { 'prospectnum' => 'Prospect',
                             'agentnum'    => 'Agent',
+                            'refnum'      => 'Advertising source',
                             'company'     => 'Company',
                             'contactnum'  => 'Contact',
+                            'locationnum' => '&nbsp;',
+                            'taxstatusnum'=> 'Tax status',
                           },
      'fields'          => [
        { 'field'       => 'agentnum',
          'type'        => 'select-agent',
          'empty_label' => 'Select agent',
+         'colspan'     => 7,
        },
-       { 'field'   => 'company',
-         'type'   => 'text',
-         'size'    => 50,
+       { 'field'       => 'refnum',
+         'type'        => 'select-part_referral',
+         'empty_label' => 'Select advertising source',
+         'colspan'     => 7,
+       },
+       { 'field'    => 'residential_commercial',
+         'type'     => 'radio',
+         'options'  => [ 'Residential', 'Commercial', ],
+         'onchange' => 'rescom_changed',
+       },
+       { 'field'    => 'company',
+         'type'     => 'text',
+         'size'     => 50,
+         'colspan'  => 7,
        },
        { 'field'             => 'contactnum',
          'type'              => 'contact',
-         'colspan'           => 6,
-         #actually o2m, but this seems to be working for edit so far
-         'm2name_table'      => 'contact',
-         'm2name_namecol'    => 'contactnum',
+         'colspan'           => 7,
+         'prospectnum'       => $prospectnum,
+         'm2m_method'        => 'prospect_contact',
+         'm2m_dstcol'        => 'contactnum',
          'm2_label'          => 'Contact',
-         'm2_error_callback' => sub { my($cgi, $object) = @_; (); }, #XXX
+         'm2_error_callback' => $m2_error_callback,
+
+       },
+       { 'field'         => 'locationnum',
+         'type'          => 'select-cust_location',
+         'empty_label'   => 'No address',
+         'disable_empty' => $conf->exists('prospect_main-location_required'),
+         'alt_format'    => $conf->exists('prospect_main-alt_address_format'),
+         'include_opt_callback' => sub { 
+            'prospect_main' => shift
+          },
        },
-       { 'field'       => 'locationnum',
-         'type'        => 'select-cust_location',
-         'empty_label' => 'No address',
+       { 'field'    => 'taxstatusnum',
+         'type'     => 'select-tax_status',
+         'required' => 1,
+         'empty_label'   => ' ',
        },
      ],
+     'new_callback'    => $new_callback,
      'edit_callback'   => $edit_callback,
-     'error_callbacck' => $error_callback,
+     'error_callback'  => $error_callback,
      'agent_virt'      => 1,
+     'html_bottom'     => $javascript,
+     'body_etc'        => 'onLoad="rescom_changed()"',
    )
 %>
 <%init>
 
 my $curuser = $FS::CurrentUser::CurrentUser;
+my $conf = new FS::Conf;
 
 my $prospectnum;
 if ( $cgi->param('error') ) {
-  $prospectnum = scalar($cgi->param('prospectnum'));
+  $cgi->param('prospectnum') =~ /^(\d*)$/ or die 'illegal prospectnum';
+  $prospectnum = $1;
 
   die "access denied"
     unless $curuser->access_right(($prospectnum ? 'Edit' : 'New'). ' prospect');
 
 } elsif ( $cgi->keywords ) { #editing
 
+  my($query) = $cgi->keywords;
+  $query =~ /^(\d+)$/ or die 'no prospectnum';
+  $prospectnum = $1;
+
   die "access denied"
     unless $curuser->access_right('Edit prospect');
 
 } else { #new prospect 
 
+  $prospectnum = '';
+
   die "access denied"
     unless $curuser->access_right('New prospect');
 
 }
 
+my $new_callback = sub {
+  my( $cgi, $prospect_main, $fields_listref, $opt_hashref ) = @_;
+
+  if ( $cgi->param('session') =~ /^(\w+)$/ ) {
+    my $session = $1;
+
+    #add a link to the image.cgi for this card
+    $opt_hashref->{'html_bottom'} .=
+      qq(<BR><IMG SRC="${p}view/image.cgi?type=png;prefname=bizcard$session" ).
+      ' WIDTH=604 HEIGHT=328><BR>';
+
+    #fill in the incoming params: name, address1/address2, city_state_zip
+    foreach my $param ( grep /^sel\d+$/, $cgi->param ) {
+      $param =~ /^sel(\d+)$/ or die 'again, wtf (daily)';
+      my $num = $1;
+      my $field = $cgi->param($param);
+      my $value = $cgi->param("val$num");
+      $cgi->param($field => $value);
+    }
+
+    if ( $cgi->param('company') ) {
+      $prospect_main->company( $cgi->param('company') );
+    }
+
+    if ( $cgi->param('name') =~ /^(.*\S+)\s+(\w+)\s*$/ ) {
+      $cgi->param('contactnum0_first' => $1);
+      $cgi->param('contactnum0_last'  => $2);
+    }
+
+    if ( grep $cgi->param($_), qw( address1 address2 city_state_zip ) ) {
+      $cgi->param('locationnum', -1);
+      if ( $cgi->param('city_state_zip') =~ /^(\s*)([\w\s]+)[\., ]+(\w{2})[, ]+(\d{5}(-\d{4})?)/ ) {
+         $cgi->param('city'  => $2);
+         $cgi->param('state' => $3);
+         $cgi->param('zip'   => $4);
+      }
+    }
+
+  }
+
+  #config to default to commercial and/or disable residential when someone needs
+  $prospect_main->set('residential_commercial', 'Residential');
+
+};
+
 my $edit_callback = sub {
   #my( $cgi, $prospect_main, $fields_listref, $opt_hashref ) = @_;
   my( $cgi, $prospect_main ) = @_;
@@ -67,6 +150,12 @@ my $edit_callback = sub {
   $prospect_main->set('locationnum', $cust_location[0]->locationnum)
     if scalar(@cust_location);
   #warn 'prospect_main.locationnum '.$prospect_main->get('locationnum');
+
+  $prospect_main->set('residential_commercial',
+    length($prospect_main->company)
+      ? 'Commercial'
+      : 'Residential'
+  );
 };
 
 my $error_callback = sub {
@@ -76,8 +165,57 @@ my $error_callback = sub {
     or die 'illegal locationnum '. $cgi->param('locationnum');
   my $locationnum = $1;
   $prospect_main->set('locationnum', $locationnum);
+
+  $prospect_main->set('residential_commercial',
+    ($cgi->param('residential_commercial') eq 'Commercial')
+      ? 'Commercial'
+      : 'Residential'
+  );
+
+};
+
+my $m2_error_callback = sub {
+  my($cgi, $object) = @_;
+
+  #process_o2m fields in process/prospect_main.html
+  my @fields = qw( first last title comment );
+  my @gfields = ( '', map "_$_", @fields );
+
+  map {
+        if ( /^contactnum(\d+)$/ ) {
+          my $num = $1;
+          if ( grep $cgi->param("contactnum$num$_"), @gfields ) {
+            my $x = new FS::contact {
+              'contactnum' => scalar($cgi->param("contactnum$num")),
+              map { $_ => scalar($cgi->param("contactnum${num}_$_")) } @fields,
+            };
+            $x;
+          } else {
+            ();
+          }
+        } else {
+          ();
+        }
+      }
+      $cgi->param;
 };
 
-my @agentnums = $FS::CurrentUser::CurrentUser->agentnums;
+#my @agentnums = $FS::CurrentUser::CurrentUser->agentnums;
+
+my $javascript = <<END;
+  <SCRIPT TYPE="text/javascript">
+    function rescom_changed() {
+      var f = document.edit_topform;
+      var c = f.company;
+      if        ( f.residential_commercial_Residential.checked ) {
+        c.disabled = true;
+        c.style.backgroundColor = '#dddddd';
+      } else if ( f.residential_commercial_Commercial.checked ) {
+        c.disabled = false;
+        c.style.backgroundColor = '#ffffff';
+      }
+    }
+  </SCRIPT>
+END
 
 </%init>