</%doc>
%if ( $error ) {
% $cgi->param('error', $error);
-<% $cgi->redirect(popurl(2). $opt{error_redirect}. '?'. $cgi->query_string ) %>
+% my $query = $m->scomp('/elements/create_uri_query');
+<% $cgi->redirect(popurl(2). $opt{error_redirect}. "?$query") %>
%} else {
-<% header("$src_thing application$to sucessful") %>
+<& /elements/header-popup.html, "$src_thing application$to successful" &>
<SCRIPT TYPE="text/javascript">
- window.top.location.reload();
+ topreload();
</SCRIPT>
</BODY>
</HTML>
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 $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' => $cgi->param('amount'),
+# 'refund' => scalar($cgi->param('amount')),
# 'payby' => 'BILL',
-# #'_date' => $cgi->param('_date'),
+# #'_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( {
#}
-my $error = $new->insert;
+$options{manual} = 1;
+$error ||= $new->insert( %options );
+
+if ($error) {
+ $dbh->rollback if $oldAutoCommit;
+} else {
+ $dbh->commit or die $dbh->errstr if $oldAutoCommit;
+}
</%init>