backport refund reasons, #39398
[freeside.git] / FS / FS / reason.pm
index 4c2587f..f50af7a 100644 (file)
@@ -161,13 +161,9 @@ Accepts an arrayref of reason objects, to be merged into this reason.
 Reasons must all have the same reason_type class as this one.
 Matching reasonnums will be replaced in the following tables:
 
 Reasons must all have the same reason_type class as this one.
 Matching reasonnums will be replaced in the following tables:
 
-  cust_bill_void
-  cust_bill_pkg_void
   cust_credit
   cust_credit_void
   cust_credit
   cust_credit_void
-  cust_pay_void
   cust_pkg_reason
   cust_pkg_reason
-  cust_refund
 
 =cut
 
 
 =cut
 
@@ -195,13 +191,9 @@ sub merge {
     $error = "Mismatched reason type class"    
       unless $reason->reasontype->class eq $class;
     foreach my $table ( qw(
     $error = "Mismatched reason type class"    
       unless $reason->reasontype->class eq $class;
     foreach my $table ( qw(
-      cust_bill_void
-      cust_bill_pkg_void
       cust_credit
       cust_credit_void
       cust_credit
       cust_credit_void
-      cust_pay_void
       cust_pkg_reason
       cust_pkg_reason
-      cust_refund
     )) {
       last if $error;
       my @fields = ('reasonnum');
     )) {
       last if $error;
       my @fields = ('reasonnum');
@@ -239,7 +231,8 @@ sub merge {
 
 Fetches the reason matching these parameters if there is one.  If not,
 inserts one.  Will also insert the reason type if necessary.  CLASS must
 
 Fetches the reason matching these parameters if there is one.  If not,
 inserts one.  Will also insert the reason type if necessary.  CLASS must
-be one of 'C' (cancel reasons), 'R' (credit reasons), or 'S' (suspend reasons).
+be one of 'C' (cancel reasons), 'R' (credit reasons), 'S' (suspend reasons),
+or 'F' (refund reasons).
 
 This will die if anything fails.
 
 
 This will die if anything fails.
 
@@ -250,14 +243,25 @@ sub new_or_existing {
   my %opt = @_;
 
   my $error = '';
   my %opt = @_;
 
   my $error = '';
-  my %hash = ('class' => $opt{'class'}, 'type' => $opt{'type'});
-  my $reason_type = qsearchs('reason_type', \%hash)
-                    || FS::reason_type->new(\%hash);
+  my $reason_type;
+  if ( ref $opt{type} eq 'FS::reason_type' ) {
+    $reason_type = $opt{type};
+  } elsif ( $opt{type} =~ /^\d+$/ ) {
+    $reason_type = FS::reason_type->by_key($opt{type});
+    if (!$reason_type) {
+      die "reason_type #$opt{type} not found\n";
+    }
+  } else {
+    my %hash = ('class' => $opt{'class'}, 'type' => $opt{'type'});
+    $reason_type = qsearchs('reason_type', \%hash)
+                      || FS::reason_type->new(\%hash);
 
 
-  $error = $reason_type->insert unless $reason_type->typenum;
-  die "error inserting reason type: $error\n" if $error;
+    $error = $reason_type->insert unless $reason_type->typenum;
+    die "error inserting reason type: $error\n" if $error;
+  }
 
 
-  %hash = ('reason_type' => $reason_type->typenum, 'reason' => $opt{'reason'});
+  my %hash = ('reason_type' => $reason_type->typenum,
+              'reason' => $opt{'reason'});
   my $reason = qsearchs('reason', \%hash)
                || FS::reason->new(\%hash);
 
   my $reason = qsearchs('reason', \%hash)
                || FS::reason->new(\%hash);