From: khoff Date: Tue, 29 Aug 2006 18:04:53 +0000 (+0000) Subject: Introductory rates...just what we always wanted. X-Git-Tag: TRIXBOX_2_6~996 X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=commitdiff_plain;h=d89e7ead2dae24c924c351fbf2e485e6358d2ffa Introductory rates...just what we always wanted. Requires Date::Manip. --- diff --git a/FS/FS/part_pkg/flat_introrate.pm b/FS/FS/part_pkg/flat_introrate.pm new file mode 100644 index 000000000..c92ba978a --- /dev/null +++ b/FS/FS/part_pkg/flat_introrate.pm @@ -0,0 +1,67 @@ +package FS::part_pkg::flat_introrate; + +use strict; +use vars qw(@ISA %info $DEBUG $DEBUG_PRE); +#use FS::Record qw(qsearch qsearchs); +use FS::part_pkg::flat; + +use Date::Manip qw(DateCalc UnixDate ParseDate); + +@ISA = qw(FS::part_pkg::flat); +$DEBUG = 0; +$DEBUG_PRE = '[' . __PACKAGE__ . ']: '; + +%info = ( + 'name' => 'Introductory price for X months, then flat rate,'. + 'relative to setup date (anniversary billing)', + 'fields' => { + 'setup_fee' => { 'name' => 'Setup fee for this package', + 'default' => 0, + }, + 'intro_fee' => { 'name' => 'Introductory recurring free for this package', + 'default' => 0, + }, + 'intro_duration' => { 'name' => 'Duration of the introductory period, ' . + 'in number of months', + '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', 'intro_duration', 'intro_fee', 'recur_fee', 'unused_credit' ], + 'weight' => 150, +); + +sub calc_recur { + my($self, $cust_pkg, $time ) = @_; + + my ($duration) = ($self->option('intro_duration') =~ /^(\d+)$/); + unless ($duration) { + die "Invalid intro_duration: " . $self->option('intro_duration'); + } + + my $setup = &ParseDate('epoch ' . $cust_pkg->getfield('setup')); + my $intro_end = &DateCalc($setup, "+${duration} month"); + my $recur; + + warn $DEBUG_PRE . "\$duration = ${duration}" if $DEBUG; + warn $DEBUG_PRE . "\$intro_end = ${intro_end}" if $DEBUG; + warn $DEBUG_PRE . "$$time < " . &UnixDate($intro_end, '%s') if $DEBUG; + + if ($$time < &UnixDate($intro_end, '%s')) { + $recur = $self->option('intro_fee'); + } else { + $recur = $self->option('recur_fee'); + } + + $recur; + +} + + +1;