1 package FS::part_pkg::flat;
4 use vars qw(@ISA %info);
5 #use FS::Record qw(qsearch);
9 @ISA = qw(FS::part_pkg);
12 'name' => 'Flat rate (anniversary billing)',
14 'setup_fee' => { 'name' => 'Setup fee for this package',
17 'recur_fee' => { 'name' => 'Recurring fee for this package',
20 'unused_credit' => { 'name' => 'Credit the customer for the unused portion'.
21 ' of service at cancellation',
25 'fieldorder' => [ 'setup_fee', 'recur_fee', 'unused_credit' ],
26 #'setup' => 'what.setup_fee.value',
27 #'recur' => 'what.recur_fee.value',
32 my($self, $cust_pkg ) = @_;
33 $self->option('setup_fee');
38 $self->base_recur(@_);
42 my($self, $cust_pkg) = @_;
43 $self->option('recur_fee');
47 my ($self, $cust_pkg) = @_;
49 my $next_bill = $cust_pkg->getfield('bill') || 0;
50 my $last_bill = $cust_pkg->last_bill || 0;
51 return 0 if ! $self->base_recur
52 || ! $self->option('unused_credit', 1)
56 my $now_date = ParseDate("epoch $time");
57 my $last_date = ParseDate("epoch $last_bill");
58 my $next_date = ParseDate("epoch $next_bill");
60 my $delta = DateCalc($now_date,$next_date,\$err, 0);
61 my $days_remaining = Delta_Format($delta, 4, "%dh");
63 my $frequency = $self->freq;
65 # TODO: Remove this after the frequencies are Data::Manip friendly.
66 $frequency .= "m" unless $frequency =~ /[wd]$/;
68 my $freq_delta = ParseDateDelta($frequency);
69 my $days = Delta_Format($freq_delta,4,"%dh");
71 my $recurring= $self->base_recur;
72 my $daily = $recurring/$days;
74 sprintf("%.2f",($daily * $days_remaining));
78 qw( setup_fee recur_fee );
82 0; #no, we're postpaid