1 package FS::part_pkg::flat;
4 use vars qw(@ISA %info);
5 #use FS::Record qw(qsearch);
8 @ISA = qw(FS::part_pkg);
11 'name' => 'Flat rate (anniversary billing)',
13 'setup_fee' => { 'name' => 'Setup fee for this package',
16 'recur_fee' => { 'name' => 'Recurring fee for this package',
19 'unused_credit' => { 'name' => 'Credit the customer for the unused portion'.
20 ' of service at cancellation',
24 'fieldorder' => [ 'setup_fee', 'recur_fee', 'unused_credit' ],
25 #'setup' => 'what.setup_fee.value',
26 #'recur' => 'what.recur_fee.value',
31 my($self, $cust_pkg ) = @_;
32 $self->option('setup_fee');
37 $self->base_recur(@_);
41 my($self, $cust_pkg) = @_;
42 $self->option('recur_fee');
46 my ($self, $cust_pkg) = @_;
48 my $next_bill = $cust_pkg->getfield('bill') || 0;
49 my $last_bill = $cust_pkg->last_bill || 0;
50 return 0 if ! $self->base_recur
51 || ! $self->option('unused_credit', 1)
55 my $now_date = ParseDate("epoch $time");
56 my $last_date = ParseDate("epoch $last_bill");
57 my $next_date = ParseDate("epoch $next_bill");
59 my $delta = DateCalc($now_date,$next_date,\$err, 0);
60 my $days_remaining = Delta_Format($delta, 4, "%dh");
62 my $frequency = $self->freq;
64 # TODO: Remove this after the frequencies are Data::Manip friendly.
65 $frequency .= "m" unless $frequency =~ /[wd]$/;
67 my $freq_delta = ParseDateDelta($frequency);
68 my $days = Delta_Format($freq_delta,4,"%dh");
70 my $recurring= $self->base_recur;
71 my $daily = $recurring/$days;
73 sprintf("%.2f",($daily * $days_remaining));
77 qw( setup_fee recur_fee );