<% include('elements/edit.html', 'name_singular' => 'prospect', 'table' => 'prospect_main', 'labels' => { 'prospectnum' => 'Prospect', 'agentnum' => 'Agent', 'company' => 'Company', 'contactnum' => 'Contact', }, 'fields' => [ { 'field' => 'agentnum', 'type' => 'select-agent', 'empty_label' => 'Select agent', }, { 'field' => 'company', 'type' => 'text', 'size' => 50, }, { 'field' => 'contactnum', 'type' => 'contact', 'colspan' => 6, ##actually o2m, but this seems to be working for edit so far #'m2name_table' => 'contact', #'m2name_namecol' => 'contactnum', #'m2_label' => 'Contact', #'m2_error_callback' => $m2_error_callback, 'o2m_table' => 'contact', 'm2_label' => 'Contact', 'm2_error_callback' => $m2_error_callback, }, { 'field' => 'locationnum', 'type' => 'select-cust_location', 'empty_label' => 'No address', }, ], 'edit_callback' => $edit_callback, 'error_callbacck' => $error_callback, 'agent_virt' => 1, ) %> <%init> my $curuser = $FS::CurrentUser::CurrentUser; 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 $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'); }; 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); }; 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' => $cgi->param("contactnum$num"), map { $_ => scalar($cgi->param("contactnum${num}_$_")) } @fields, }; use Data::Dumper; warn Dumper $x; $x; } else { (); } } else { (); } } $cgi->param; }; my @agentnums = $FS::CurrentUser::CurrentUser->agentnums;