add svc_elec_features merged from reference code RT#7643
[freeside.git] / FS / FS / part_pkg / business_elec_generic.pm
1 package FS::part_pkg::business_elec_generic;
2 #test
3 use strict;
4 use vars qw(@ISA %info %gr_fee %penalty_fee $DEBUG);
5 use DBI;
6 use FS::Record qw(qsearch qsearchs);
7 use FS::part_pkg::flat;
8 use FS::usage_elec;
9
10 @ISA = qw(FS::part_pkg::flat);
11 $DEBUG = 0;
12
13 tie %penalty_fee,'Tie::IxHash',
14   '0'=>0,
15   '0.05'=>0.05,
16 ;
17
18 tie %gr_fee, 'Tie::IxHash',
19   '0.005' => 0.005,
20   '0.01'  => 0.01,
21   '0.02' => 0.02,
22 ;
23
24
25 %info = (
26   'name' => 'Business base package',
27   'svc_elec_compatible' => 1,
28   'fields' => {
29     'setup_fee' => { 'name' => 'Setup fee for this package',
30                      'default' => 0,
31                    },
32     'base_fee' => { 'name' => 'Base fee for this package',
33                       'default' => 0,
34                     },
35     'rate' => { 'name' => 'Rate for customer',
36                                'default' => 1,
37                              },
38     'gr_fee' => { 'name' =>'Ground fee',
39                                   'type' =>'select',
40                           'select_options' => \%gr_fee,
41         },
42     'penalty' => { 'name'=>'Late fee',
43                   'type' =>'select',
44                   'select_options'=> \%penalty_fee,
45         },
46   },
47   'fieldorder' => [ 'setup_fee', 'base_fee','rate','gr_fee','penalty' ],
48  'weight' => '70',
49 );
50
51 sub calc_recur {
52   my($self, $cust_pkg ) = @_;
53   my $date =0;
54   my  $cust_svc=qsearchs('cust_svc',{'pkgnum' => $cust_pkg->pkgnum});
55   my $lastdate =$cust_pkg -> last_bill ||0;
56   warn $lastdate if $DEBUG;
57   my  @usage_elecs=qsearch('usage_elec',{'svcnum' => $cust_svc->svcnum,
58                                          '_date'=> { op=>'>', value=>$lastdate },
59                                'extra_sql' => 'ORDER BY _date_'});
60
61   warn "test".@usage_elecs."\n" if $DEBUG;
62   if(defined($usage_elecs[0])){
63         warn "test2".$usage_elecs[0]->id if $DEBUG;
64         my $base=$self->option('base_fee');
65         my $rate=$self->option('rate');
66         my $sum= $base + ($usage_elecs[0]->getUsage)*$rate+$usage_elecs[0]->tdsp;
67         warn $sum."\n" if $DEBUG;
68         warn "grfee = ".$sum* $self->option('gr_fee') if $DEBUG;
69         $sum = $sum + $sum * $self->option('gr_fee');
70         warn "sum = ".$sum if $DEBUG;
71         return round($sum);
72         }
73   return 0;  
74   #$hours -= $self->option('recur_included_hours');
75   #$hours = 0 if $hours < 0;
76
77   #$self->option('recur_flat') + $hours * $self->option('recur_hourly_charge');
78   #return 99;
79 }
80
81
82 sub is_free_options {
83   qw( setup_fee recur_flat recur_unit_charge );
84 }
85
86 sub base_recur {
87   my($self, $cust_pkg) = @_;
88   $self->option('base_fee');
89 }
90 sub round {
91     my($number) = shift;
92     my $roundit= int($number*100 + .5);
93         return sprintf('%.2f',$roundit/100)
94 }
95
96 1;