<% 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' => ' ', 'taxstatusnum'=> 'Tax status', }, 'fields' => [ { 'field' => 'residential_commercial', 'type' => 'radio', 'options' => [ 'Residential', 'Commercial', ], 'onchange' => 'rescom_changed', }, { 'field' => 'agentnum', 'type' => 'select-agent', 'empty_label' => 'Select agent', 'colspan' => 7, }, { 'field' => 'refnum', 'type' => 'select-part_referral', 'empty_label' => 'Select advertising source', 'colspan' => 7, }, { 'field' => 'company', 'type' => 'text', 'size' => 50, 'colspan' => 7, }, { 'field' => 'contactnum', 'type' => 'contact', 'colspan' => 7, 'prospectnum' => $prospectnum, 'm2m_method' => 'prospect_contact', 'm2m_dstcol' => 'contactnum', 'm2_label' => 'Contact', 'm2_error_callback' => $m2_error_callback, 'include_opt_callback' => sub { 'for_prospect' => 1 }, 'js_spawn_test' => 'document.edit_topform.residential_commercial_Commercial.checked', }, { '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' => 'taxstatusnum', 'type' => 'select-tax_status', 'required' => 1, 'empty_label' => ' ', }, ], 'new_callback' => $new_callback, 'edit_callback' => $edit_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') ) { $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(

'; #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 ) = @_; my @cust_location = qsearch('cust_location', { 'prospectnum' => $prospect_main->prospectnum } ); die 'multiple locations for prospect '. $prospect_main->prospectnum if scalar(@cust_location) > 1; $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 { #my( $cgi, $prospect_main, $fields_listref, $opt_hashref ) = @_; my( $cgi, $prospect_main ) = @_; $cgi->param('locationnum') =~ /^(\-?\d*)$/ 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 $javascript = q| |;