diff options
Diffstat (limited to 'FS/FS/part_pkg/residential_elec_generic_var.pm')
-rwxr-xr-x | FS/FS/part_pkg/residential_elec_generic_var.pm | 113 |
1 files changed, 113 insertions, 0 deletions
diff --git a/FS/FS/part_pkg/residential_elec_generic_var.pm b/FS/FS/part_pkg/residential_elec_generic_var.pm new file mode 100755 index 0000000..584de70 --- /dev/null +++ b/FS/FS/part_pkg/residential_elec_generic_var.pm @@ -0,0 +1,113 @@ +package FS::part_pkg::residential_elec_generic_var; + +use strict; +use vars qw(@ISA %info %penalty_fee); +use Date::Format; +use Data::Dumper; +use DBI; +use FS::Record qw(qsearch qsearchs); +use FS::part_pkg::flat; +use FS::usage_elec; + +@ISA = qw(FS::part_pkg::flat); + +tie %penalty_fee,'Tie::IxHash', + '0'=>0, + '0.05'=>0.05, +; + + +%info = ( + 'name' => 'Residential base package var', + 'svc_elec_compatible' => 1, + 'fields' => { + 'setup_fee' => { 'name' => 'Setup fee for this package', + 'default' => 0, + }, + 'base_fee' => { 'name' => 'Base fee for this package', + 'default' => 0, + }, + 'rate' => { 'name' => 'Default Rate for customer', + 'default' => '0.12', + }, + 'vrate' => { 'name' => 'Variable Rate (blank=disable)', + 'default' => '2008-01:0.12;2009-01:0.12', + }, + 'rate1_discount' => { 'name' => 'Discount rate #1 (blank=disable)', + 'default' => '', + }, + 'penalty' => { 'name'=>'Late fee', + 'type' =>'select', + 'select_options'=> \%penalty_fee, + }, + }, + 'fieldorder' => [ 'setup_fee', 'base_fee','rate', 'vrate', 'rate1_discount', 'penalty' ], + 'weight' => '70', +); + +sub calc_recur { + my($self, $cust_pkg ) = @_; + my $date =0; + # -cal 7/5/07 added debug comment to those line that tommy use for debugging + # then comment them out + + # generate the variable rate hash + my $vrate=$self->option('vrate'); + my %var_rate; + if ($vrate) { + foreach my $rate_frame (split(';',$vrate)) { + my ($period, $period_rate) = split(':',$rate_frame); + my ($yr,$mo) = split('-',$period); + $var_rate{$yr}{$mo} = $period_rate; + } + } + + + my $cust_svc=qsearchs('cust_svc',{'pkgnum' => $cust_pkg->pkgnum}); + my $lastdate =$cust_pkg -> last_bill ||0; + my @usage_elecs=qsearch('usage_elec',{'svcnum' => $cust_svc->svcnum, + '_date'=> { op=>'>', value=>$lastdate }, + 'extra_sql' => 'ORDER BY _date_'}); + + if(defined($usage_elecs[0])){ + my $base=$self->option('base_fee'); + my $rate=$self->option('rate'); + # usage end date + my $usage_enddate_year = time2str('%Y',$usage_elecs[0]->curr_date); + my $usage_enddate_month = time2str('%m',$usage_elecs[0]->curr_date); + #my $v_rate = $rate; + if ($vrate) { + # if a variable rate + $rate = $var_rate{$usage_enddate_year}{$usage_enddate_month} + if (exists $var_rate{$usage_enddate_year}{$usage_enddate_month}); + } + + my $sum= $base + ($usage_elecs[0]->getUsage)*$rate+$usage_elecs[0]->tdsp; + + return round($sum); + } + return 0; + #$hours -= $self->option('recur_included_hours'); + #$hours = 0 if $hours < 0; + + #$self->option('recur_flat') + $hours * $self->option('recur_hourly_charge'); + #return 99; +} + + +sub is_free_options { + qw( setup_fee recur_flat recur_unit_charge ); +} + +sub base_recur { + my($self, $cust_pkg) = @_; + $self->option('base_fee'); +} + +sub round { + my($number) = shift; + my $roundit= int($number*100 + .5); + return sprintf('%.2f',$roundit/100) +} + +1; |