diff options
Diffstat (limited to 'httemplate/edit/prospect_main.html')
-rw-r--r-- | httemplate/edit/prospect_main.html | 194 |
1 files changed, 194 insertions, 0 deletions
diff --git a/httemplate/edit/prospect_main.html b/httemplate/edit/prospect_main.html new file mode 100644 index 000000000..ab01930e5 --- /dev/null +++ b/httemplate/edit/prospect_main.html @@ -0,0 +1,194 @@ +<% include('elements/edit.html', + 'name_singular' => 'prospect', + 'table' => 'prospect_main', + 'labels' => { 'prospectnum' => 'Prospect', + 'agentnum' => 'Agent', + 'company' => 'Company', + 'contactnum' => 'Contact', + 'locationnum' => ' ', + }, + 'fields' => [ + { 'field' => 'agentnum', + 'type' => 'select-agent', + 'empty_label' => 'Select agent', + 'colspan' => 6, + }, + { 'field' => 'residential_commercial', + 'type' => 'radio', + 'options' => [ 'Residential', 'Commercial', ], + 'onchange' => 'rescom_changed', + }, + { 'field' => 'company', + 'type' => 'text', + 'size' => 50, + 'colspan' => 6, + }, + { 'field' => 'contactnum', + 'type' => 'contact', + 'colspan' => 6, + 'o2m_table' => 'contact', + 'm2_label' => 'Contact', + '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'), + }, + ], + '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') ) { + $prospectnum = scalar($cgi->param('prospectnum')); + + die "access denied" + unless $curuser->access_right(($prospectnum ? 'Edit' : 'New'). ' prospect'); + +} elsif ( $cgi->keywords ) { #editing + + die "access denied" + unless $curuser->access_right('Edit prospect'); + +} else { #new prospect + + 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 ) = @_; + 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 = <<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; + } else if ( f.residential_commercial_Commercial.checked ) { + c.disabled = false; + } + } + </SCRIPT> +END + +</%init> |