From a51884c1af54c847fd3c1a2186955bfb60efff5f Mon Sep 17 00:00:00 2001 From: ivan Date: Thu, 20 Jan 2011 05:22:34 +0000 Subject: [PATCH] fix cancelling services on exspirations, RT#11269 --- FS/FS/cust_pkg.pm | 84 +++++++++++++++++++++++-------------------------------- 1 file changed, 35 insertions(+), 49 deletions(-) diff --git a/FS/FS/cust_pkg.pm b/FS/FS/cust_pkg.pm index 66f142f05..fb376828c 100644 --- a/FS/FS/cust_pkg.pm +++ b/FS/FS/cust_pkg.pm @@ -749,23 +749,8 @@ sub cancel { } my %svc; - if ( $date ) { -# copied from below - foreach my $cust_svc ( - #schwartz - map { $_->[0] } - sort { $a->[1] <=> $b->[1] } - map { [ $_, $_->svc_x->table_info->{'cancel_weight'} ]; } - qsearch( 'cust_svc', { 'pkgnum' => $self->pkgnum } ) - ) { - my $error = $cust_svc->cancel( ('date' => $date) ); + unless ( $date ) { - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return "Error expiring cust_svc: $error"; - } - } - } else { #!date foreach my $cust_svc ( #schwartz map { $_->[0] } @@ -780,40 +765,41 @@ sub cancel { return "Error cancelling cust_svc: $error"; } } - } #if $date - # Add a credit for remaining service - my $last_bill = $self->getfield('last_bill') || 0; - my $next_bill = $self->getfield('bill') || 0; - my $do_credit; - if ( exists($options{'unused_credit'}) ) { - $do_credit = $options{'unused_credit'}; - } - else { - $do_credit = $self->part_pkg->option('unused_credit_cancel', 1); - } - if ( $do_credit - and $last_bill > 0 # the package has been billed - and $next_bill > 0 # the package has a next bill date - and $next_bill >= $cancel_time # which is in the future - ) { - my $remaining_value = $self->calc_remain('time' => $cancel_time); - if ( $remaining_value > 0 ) { - # && !$options{'no_credit'} ) { - # Undocumented, unused option. - # part_pkg configuration should decide this anyway. - my $error = $self->cust_main->credit( - $remaining_value, - 'Credit for unused time on '. $self->part_pkg->pkg, - 'reason_type' => $conf->config('cancel_credit_type'), - ); - if ($error) { - $dbh->rollback if $oldAutoCommit; - return "Error crediting customer \$$remaining_value for unused time on". - $self->part_pkg->pkg. ": $error"; - } - } #if $remaining_value - } #if $do_credit + # Add a credit for remaining service + my $last_bill = $self->getfield('last_bill') || 0; + my $next_bill = $self->getfield('bill') || 0; + my $do_credit; + if ( exists($options{'unused_credit'}) ) { + $do_credit = $options{'unused_credit'}; + } + else { + $do_credit = $self->part_pkg->option('unused_credit_cancel', 1); + } + if ( $do_credit + and $last_bill > 0 # the package has been billed + and $next_bill > 0 # the package has a next bill date + and $next_bill >= $cancel_time # which is in the future + ) { + my $remaining_value = $self->calc_remain('time' => $cancel_time); + if ( $remaining_value > 0 ) { + # && !$options{'no_credit'} ) { + # Undocumented, unused option. + # part_pkg configuration should decide this anyway. + my $error = $self->cust_main->credit( + $remaining_value, + 'Credit for unused time on '. $self->part_pkg->pkg, + 'reason_type' => $conf->config('cancel_credit_type'), + ); + if ($error) { + $dbh->rollback if $oldAutoCommit; + return "Error crediting customer \$$remaining_value for unused time". + " on ". $self->part_pkg->pkg. ": $error"; + } + } #if $remaining_value + } #if $do_credit + + } #unless $date my %hash = $self->hash; $date ? ($hash{'expire'} = $date) : ($hash{'cancel'} = $cancel_time); -- 2.11.0