+sub credit_remaining {
+ # Add a credit for remaining service
+ my $self = shift;
+ my $time = shift or die 'no suspend/cancel time';
+ my $conf = FS::Conf->new;
+ my $last_bill = $self->getfield('last_bill') || 0;
+ my $next_bill = $self->getfield('bill') || 0;
+ if ( $last_bill > 0 # the package has been billed
+ and $next_bill > 0 # the package has a next bill date
+ and $next_bill >= $time # which is in the future
+ ) {
+ my $remaining_value = $self->calc_remain('time' => $time);
+ if ( $remaining_value > 0 ) {
+ warn "Crediting for $remaining_value on package ".$self->pkgnum."\n"
+ if $DEBUG;
+ my $error = $self->cust_main->credit(
+ $remaining_value,
+ 'Credit for unused time on '. $self->part_pkg->pkg,
+ 'reason_type' => $conf->config('cancel_credit_type'),
+ ); # need 'suspend_credit_type'?
+ return "Error crediting customer \$$remaining_value for unused time".
+ " on ". $self->part_pkg->pkg. ": $error"
+ if $error;
+ } #if $remaining_value
+ } #if $last_bill, etc.
+ '';
+}
+