X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=FS%2FFS%2Fpart_pkg%2Fflat.pm;h=131f850e9a59f36e6a9e2c997ff080fc5d7be9bd;hp=5721eddd1fc212cd7b973d399830dad6eea4a3bd;hb=e4ae5122522f2d45c68a38eaef337a82029f2fc1;hpb=fcc0d3d4015c5aae07d853b3b9f928ab9f2b12ef diff --git a/FS/FS/part_pkg/flat.pm b/FS/FS/part_pkg/flat.pm index 5721eddd1..131f850e9 100644 --- a/FS/FS/part_pkg/flat.pm +++ b/FS/FS/part_pkg/flat.pm @@ -10,14 +10,18 @@ use FS::part_pkg; %info = ( 'name' => 'Flat rate (anniversary billing)', 'fields' => { - 'setup_fee' => { 'name' => 'Setup fee for this package', - 'default' => 0, - }, - 'recur_fee' => { 'name' => 'Recurring fee for this package', - 'default' => 0, - }, + 'setup_fee' => { 'name' => 'Setup fee for this package', + 'default' => 0, + }, + 'recur_fee' => { 'name' => 'Recurring fee for this package', + 'default' => 0, + }, + 'unused_credit' => { 'name' => 'Credit the customer for the unused portion'. + ' of service at cancellation', + 'type' => 'checkbox', + }, }, - 'fieldorder' => [ 'setup_fee', 'recur_fee' ], + 'fieldorder' => [ 'setup_fee', 'recur_fee', 'unused_credit' ], #'setup' => 'what.setup_fee.value', #'recur' => 'what.recur_fee.value', 'weight' => 10, @@ -38,6 +42,37 @@ sub base_recur { $self->option('recur_fee'); } +sub calc_remain { + my ($self, $cust_pkg) = @_; + my $time = time; + my $next_bill = $cust_pkg->getfield('bill') || 0; + my $last_bill = $cust_pkg->last_bill || 0; + return 0 if ! $self->base_recur + || ! $self->option('unused_credit') + || ! $last_bill + || ! $next_bill; + + my $now_date = ParseDate("epoch $time"); + my $last_date = ParseDate("epoch $last_bill"); + my $next_date = ParseDate("epoch $next_bill"); + my $err; + my $delta = DateCalc($now_date,$next_date,\$err, 0); + my $days_remaining = Delta_Format($delta, 4, "%dh"); + + my $frequency = $self->freq; + + # TODO: Remove this after the frequencies are Data::Manip friendly. + $frequency .= "m" unless $frequency =~ /[wd]$/; + + my $freq_delta = ParseDateDelta($frequency); + my $days = Delta_Format($freq_delta,4,"%dh"); + + my $recurring= $self->base_recur; + my $daily = $recurring/$days; + + sprintf("%.2f",($daily * $days_remaining)); +} + sub is_free_options { qw( setup_fee recur_fee ); }