<%doc> Examples: #cust_bill_pay include('elements/ApplicationCommon.html', 'error_redirect' => 'cust_bill_pay.cgi', 'src_table' => 'cust_pay', 'src_thing' => 'payment', 'link_table' => 'cust_bill_pay', ) #cust_credit_bill include('elements/ApplicationCommon.html', 'error_redirect' => 'cust_credit_bill.cgi', 'src_table' => 'cust_credit', 'src_thing' => 'credit', 'link_table' => 'cust_credit_bill', ) %if ( $error ) { % $cgi->param('error', $error); % my $query = $m->scomp('/elements/create_uri_query'); <% $cgi->redirect(popurl(2). $opt{error_redirect}. "?$query") %> %} else { <& /elements/header-popup.html, "$src_thing application$to successful" &> % } <%init> my %opt = @_; my $error = ''; my $src_thing = ucfirst($opt{'src_thing'}); my $src_table = $opt{'src_table'}; my $src_pkey = dbdef->table($src_table)->primary_key; my $to = $opt{'link_table'} =~ /refund/ ? ' to Refund' : ''; $cgi->param($src_pkey) =~ /^(\d+)$/ or die "Illegal $src_pkey!"; my $src_pkeyvalue = $1; my $src = qsearchs($src_table, { $src_pkey => $src_pkeyvalue } ) or die "No such $src_pkey: $src_pkeyvalue"; my $cust_main = qsearchs('cust_main', { 'custnum' => $src->custnum } ) or die "Bogus $src_thing: not attached to customer"; my $custnum = $cust_main->custnum; my @subnames = grep { /.+/ } map { /^subnum(\d+)$/ ? $1 : '' } $cgi->param; my @subitems = map { [ $cgi->param("subnum$_"), $cgi->param("subamount$_"), $cgi->param("taxXlocationnum$_") ] } @subnames; { local $^W = 0; @subitems = grep { $_->[1] + 0 } @subitems; } my %options = (); $options{subitems} = \@subitems if scalar(@subitems); my $oldAutoCommit = $FS::UID::AutoCommit; local $FS::UID::AutoCommit = 0; my $dbh = dbh; my $new; # $new = new FS::cust_refund ( { # 'reason' => 'Refunding payment', #enter reason in UI # 'refund' => scalar($cgi->param('amount')), # 'payby' => 'BILL', # #'_date' => scalar($cgi->param('_date')), # 'payinfo' => 'Cash', #enter payinfo in UI # 'paynum' => $paynum, # } ); #} else { if ($src->amount != $cgi->param('src_amount')) { $src->amount($cgi->param('src_amount')); $error = $src->replace; } my $class = 'FS::'. $opt{link_table}; $new = $class->new( { map { $_ => scalar($cgi->param($_)); } fields($opt{link_table}) } ); #} $options{manual} = 1; $error ||= $new->insert( %options ); if ($error) { $dbh->rollback if $oldAutoCommit; } else { $dbh->commit or die $dbh->errstr if $oldAutoCommit; }