-my $new = new FS::cust_credit ( {
- map {
- $_, scalar($cgi->param($_));
- } fields('cust_credit')
-} );
-
-my $error = $new->insert;
-
-if ( $error ) {
- $cgi->param('error', $error);
- print $cgi->redirect(popurl(2). "cust_credit.cgi?". $cgi->query_string );
-} else {
- if ( $cgi->param('apply') eq 'yes' ) {
- my $cust_main = qsearchs('cust_main', { 'custnum' => $custnum })
- or die "unknown custnum $custnum";
- $cust_main->apply_credits;
- }
- print $cgi->redirect(popurl(3). "view/cust_main.cgi?$custnum");
+$cgi->param('reasonnum') =~ /^(-?\d+)$/ or die "Illegal reasonnum";
+my $reasonnum = $1;
+
+my $oldAutoCommit = $FS::UID::AutoCommit;
+local $FS::UID::AutoCommit = 0;
+my $dbh = dbh;
+
+my ($reasonnum, $error) = $m->comp('/misc/process/elements/reason');
+if (!$reasonnum) {
+ $error ||= 'Reason required'
+}
+$cgi->param('reasonnum', $reasonnum) unless $error;
+
+my $_date;
+if ( $FS::CurrentUser::CurrentUser->access_right('Backdate credit') ) {
+ $_date = parse_datetime($cgi->param('_date'));
+}
+else {
+ $_date = time;
+}
+
+my @fields = grep { $_ ne '_date' } fields('cust_credit');
+
+unless ($error) {
+ my $new = new FS::cust_credit ( {
+ _date => $_date,
+ map { $_ => scalar($cgi->param($_)) } @fields
+ } );
+ $error = $new->insert;