prevent reload loops on process pages, #71249
[freeside.git] / httemplate / edit / process / credit-cust_bill_pkg.html
index cbcf619..12b68c0 100644 (file)
@@ -3,14 +3,14 @@
 %} else {
 <& /elements/header-popup.html, 'Credit successful' &>
   <SCRIPT TYPE="text/javascript">
-    window.top.location.reload();
+    topreload();
   </SCRIPT>
   </BODY></HTML>
 % }
 <%init>
 
 die "access denied"
-  unless $FS::CurrentUser::CurrentUser->access_right('Post credit');
+  unless $FS::CurrentUser::CurrentUser->access_right('Credit line items');
 
 my @billpkgnum_setuprecurs =
   map { $_ =~ /^billpkgnum(\d+\-\w*)$/ or die 'gm#23'; $1; } 
@@ -27,19 +27,35 @@ foreach my $billpkgnum_setuprecur (@billpkgnum_setuprecurs) {
   push @amounts,     $amount;
 }
 
-my $error = FS::cust_credit->credit_lineitems(
+my $reasonnum = $cgi->param('reasonnum');
+$reasonnum =~ /^(-?\d+)$/ or die "Illegal reasonnum";
+$reasonnum = $1;
+
+my $error;
+if ($reasonnum == -1) {
+  my $new_reason = FS::reason->new({
+    map { $_ => scalar( $cgi->param("select_reason_new_$_") ) }
+    qw( reason_type reason )
+  });
+  $error = $new_reason->insert;
+  $reasonnum = $new_reason->reasonnum;
+}
+
+if ( !$reasonnum ) {
+  $error ||= 'Reason required'
+}
+
+$error ||= FS::cust_credit->credit_lineitems(
   #the lineitems to credit
   'billpkgnums'       => \@billpkgnums,
   'setuprecurs'       => \@setuprecurs,
   'amounts'           => \@amounts,
   'apply'             => ( $cgi->param('apply') eq 'yes' ),
+  'reasonnum'         => $reasonnum,
 
-  #the credit
-  'newreasonnum'      => scalar($cgi->param('newreasonnum')),
-  'newreasonnum_type' => scalar($cgi->param('newreasonnumT')),
   map { $_ => scalar($cgi->param($_)) }
     #fields('cust_credit')  
-    qw( custnum _date amount reason reasonnum addlinfo ), #pkgnum eventnum
+    qw( custnum _date amount addlinfo ), #pkgnum eventnum
 );
 
 </%init>