fix application of things when there's lots of CCH data and an error, RT#41610
[freeside.git] / httemplate / edit / process / elements / ApplicationCommon.html
index 3cb7ae6..a73b1bc 100644 (file)
@@ -21,7 +21,8 @@ Examples:
 </%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") %>
   <SCRIPT TYPE="text/javascript">
@@ -34,6 +35,8 @@ Examples:
 
 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;
@@ -58,6 +61,10 @@ my @subitems = map { [ $cgi->param("subnum$_"), $cgi->param("subamount$_"), $cgi
 
 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 ( {
@@ -70,6 +77,11 @@ my $new;
 #  } );
 #} 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( {
@@ -82,6 +94,11 @@ my $new;
 
 
 $options{manual} = 1;
-my $error = $new->insert( %options );
+$error ||= $new->insert( %options );
 
+if ($error) {
+  $dbh->rollback if $oldAutoCommit;
+} else {
+  $dbh->commit or die $dbh->errstr if $oldAutoCommit;
+}
 </%init>