diff options
author | Jonathan Prykop <jonathan@freeside.biz> | 2015-02-20 20:07:18 -0600 |
---|---|---|
committer | Jonathan Prykop <jonathan@freeside.biz> | 2015-03-02 14:47:42 -0600 |
commit | e3e006a4e2d532e5643e8e7cbb1de4b7f1d21135 (patch) | |
tree | b13e5a736effdbbfb2011042a8ea67c83a6655dd /FS | |
parent | dae6eb9669fd2386fe19a31782c298efaefaf35a (diff) |
RT#14671: Usage for current day when billing outstanding usage (for cancelling customers) [now uses suspend for everything]
Diffstat (limited to 'FS')
-rw-r--r-- | FS/FS/cust_pkg.pm | 32 |
1 files changed, 21 insertions, 11 deletions
diff --git a/FS/FS/cust_pkg.pm b/FS/FS/cust_pkg.pm index 38cd35480..88afe35c1 100644 --- a/FS/FS/cust_pkg.pm +++ b/FS/FS/cust_pkg.pm @@ -791,6 +791,10 @@ to a different pkgpart or location, and probably shouldn't be in any other case. If it's not set, the 'unused_credit_cancel' part_pkg option will be used. +=item delay_cancel - for internal use, to allow proper handling of +supplemental packages when the main package is flagged to suspend +before cancelling + =back If there is an error, returns the error, otherwise returns false. @@ -837,7 +841,7 @@ sub cancel { my $date = $options{'date'} if $options{'date'}; # expire/cancel later $date = '' if ($date && $date <= $cancel_time); # complain instead? - my $delay_cancel = undef; + my $delay_cancel = $options{'delay_cancel'}; if ( !$date && $self->part_pkg->option('delay_cancel',1) && (($self->status eq 'active') || ($self->status eq 'suspended')) ) { @@ -921,7 +925,7 @@ sub cancel { if ( $date ) { $hash{'expire'} = $date; if ($delay_cancel) { - $hash{'susp'} = $cancel_time unless $self->susp; + # just to be sure these are clear $hash{'adjourn'} = undef; $hash{'resume'} = undef; } @@ -948,21 +952,24 @@ sub cancel { } foreach my $supp_pkg ( $self->supplemental_pkgs ) { - if ($delay_cancel) { - $error = $supp_pkg->suspend( - 'from_main' => 1, - 'from_cancel' => 1, - 'time' => $cancel_time - ); - } else { - $error = $supp_pkg->cancel(%options, 'from_main' => 1); - } + $error = $supp_pkg->cancel(%options, + 'from_main' => 1, + 'date' => $date, #in case it got changed by delay_cancel + 'delay_cancel' => $delay_cancel, + ); if ( $error ) { $dbh->rollback if $oldAutoCommit; return "canceling supplemental pkg#".$supp_pkg->pkgnum.": $error"; } } + if ($delay_cancel && !$options{'from_main'}) { + $error = $new->suspend( + 'from_cancel' => 1, + 'time' => $cancel_time + ); + } + unless ($date) { foreach my $usage ( $self->cust_pkg_usage ) { $error = $usage->delete; @@ -3415,6 +3422,9 @@ really the whole point of the delay_cancel option. sub is_status_delay_cancel { my ($self) = @_; + if ( $self->main_pkgnum and $self->pkglinknum ) { + return $self->main_pkg->is_status_delay_cancel; + } return 0 unless $self->part_pkg->option('delay_cancel',1); return 0 unless $self->status eq 'suspended'; return 0 unless $self->expire; |