74284: Merging reasons does not update use of the old reason [fixed main problem...
[freeside.git] / FS / FS / reason.pm
index f50af7a..7a96daa 100644 (file)
@@ -56,7 +56,7 @@ suspensions but not others. DEPRECATED.
 whether to bill the unsuspend package immediately ('') or to wait until 
 the customer's next invoice ('Y').
 
 whether to bill the unsuspend package immediately ('') or to wait until 
 the customer's next invoice ('Y').
 
-=item unused_credit - 'Y' or ''. For suspension reasons only (for now).
+=item unused_credit - 'Y' or ''. For suspension or cancellation reasons.
 If enabled, the customer will be credited for their remaining time on 
 suspension.
 
 If enabled, the customer will be credited for their remaining time on 
 suspension.
 
@@ -125,23 +125,30 @@ sub check {
   ;
   return $error if $error;
 
   ;
   return $error if $error;
 
-  if ( $self->reasontype->class eq 'S' ) {
+  my $class = $self->reasontype->class;
+
+  if ( $class eq 'S' ) {
     $error = $self->ut_numbern('unsuspend_pkgpart')
           || $self->ut_foreign_keyn('unsuspend_pkgpart', 'part_pkg', 'pkgpart')
           || $self->ut_flag('unsuspend_hold')
     $error = $self->ut_numbern('unsuspend_pkgpart')
           || $self->ut_foreign_keyn('unsuspend_pkgpart', 'part_pkg', 'pkgpart')
           || $self->ut_flag('unsuspend_hold')
-          || $self->ut_flag('unused_credit')
           || $self->ut_foreign_keyn('feepart', 'part_fee', 'feepart')
           || $self->ut_flag('fee_on_unsuspend')
           || $self->ut_flag('fee_hold')
     ;
     return $error if $error;
   } else {
           || $self->ut_foreign_keyn('feepart', 'part_fee', 'feepart')
           || $self->ut_flag('fee_on_unsuspend')
           || $self->ut_flag('fee_hold')
     ;
     return $error if $error;
   } else {
-    foreach (qw(unsuspend_pkgpart unsuspend_hold unused_credit feepart
+    foreach (qw(unsuspend_pkgpart unsuspend_hold feepart
                 fee_on_unsuspend fee_hold)) {
       $self->set($_ => '');
     }
   }
 
                 fee_on_unsuspend fee_hold)) {
       $self->set($_ => '');
     }
   }
 
+  if ( $class eq 'S' or $class eq 'C' ) {
+    $error = $self->ut_flag('unused_credit');
+  } else {
+    $self->set('unused_credit', '');
+  }
+
   $self->SUPER::check;
 }
 
   $self->SUPER::check;
 }
 
@@ -194,6 +201,7 @@ sub merge {
       cust_credit
       cust_credit_void
       cust_pkg_reason
       cust_credit
       cust_credit_void
       cust_pkg_reason
+      cust_refund
     )) {
       last if $error;
       my @fields = ('reasonnum');
     )) {
       last if $error;
       my @fields = ('reasonnum');