1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
|
package FS::part_pkg::residential_elec_generic;
use strict;
use vars qw(@ISA %info %penalty_fee $DEBUG);
use DBI;
use FS::Record qw(qsearch qsearchs);
use FS::part_pkg::flat;
use FS::usage_elec;
@ISA = qw(FS::part_pkg::flat);
$DEBUG = 0;
tie %penalty_fee,'Tie::IxHash',
'0'=>0,
'0.05'=>0.05,
;
%info = (
'name' => 'Residential base package',
'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' => 'Rate for customer',
'default' => 1,
},
'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', '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
my $cust_svc=qsearchs('cust_svc',{'pkgnum' => $cust_pkg->pkgnum});
my $lastdate =$cust_pkg -> last_bill ||0;
warn $lastdate."\n" if $DEBUG;
warn $cust_svc->svcnum."\n" if $DEBUG;
warn $cust_pkg->pkgnum."\n" if $DEBUG;
my @usage_elecs=qsearch('usage_elec',{'svcnum' => $cust_svc->svcnum,
'_date'=> { op=>'>', value=>$lastdate },
'extra_sql' => 'ORDER BY _date_'});
warn "test".@usage_elecs."\n" if $DEBUG;
if(defined($usage_elecs[0])){
warn "test2".$usage_elecs[0]->id."\n" if $DEBUG;
warn $usage_elecs[0]->getUsage."usage\n" if $DEBUG;
my $base=$self->option('base_fee');
my $rate=$self->option('rate');
my $sum= $base + ($usage_elecs[0]->getUsage)*$rate+$usage_elecs[0]->tdsp;
warn $sum."\n" if $DEBUG;
warn "$base * $rate = ".$base*$rate if $DEBUG;
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;
|