X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fpart_pkg%2Ftorrus_Common.pm;h=b32deab04d43fab2edbfca6fbb940f44b7be578f;hb=dc83512c36dc6bea2585abada4f88d714c600e55;hp=2465ab509b0b86ded09c2d8bb9363ed332097aa4;hpb=08180f31475affb0047af48ef7fd182a55c06d57;p=freeside.git diff --git a/FS/FS/part_pkg/torrus_Common.pm b/FS/FS/part_pkg/torrus_Common.pm index 2465ab509..b32deab04 100644 --- a/FS/FS/part_pkg/torrus_Common.pm +++ b/FS/FS/part_pkg/torrus_Common.pm @@ -5,6 +5,17 @@ use List::Util qw(max); our %info = ( 'disabled' => 1 ); #torrus_Common not a usable price plan directly +our $DEBUG = 1; + +sub recur_temporality { 'preceding'; } + +sub price_info { + my $self = shift; + my $str = $self->SUPER::price_info(@_); + $str .= " plus usage" if $str; + $str; +} + sub calc_recur { my $self = shift; my($cust_pkg, $sdate, $details, $param ) = @_; @@ -29,12 +40,18 @@ sub calc_usage { my($cust_pkg, $sdate, $details, $param ) = @_; my @sdate = localtime($$sdate); - my $rep_date = ($sdate[5]+1900). '-'. ($sdate[4]+1). '-01'; + #sdate is next bill date, but we want the report from last month + my($m, $y) = ($sdate[4], $sdate[5]+1900); + if ( $m == 0 ) { $m=12; $y--; } + $m = "0$m" if length($m) == 1; + my $rep_date = "$y-$m-01"; + warn "searching for MonthlyUsage report for $rep_date\n" if $DEBUG; my $rep_sql = " SELECT id FROM reports WHERE rep_date = ? AND reportname = 'MonthlyUsage' and iscomplete = 1 "; my $rep_id = $self->scalar_sql($rep_sql, $rep_date) or return 0; + warn "report id $rep_id found\n" if $DEBUG; #abort if ! iscomplete instead? @@ -45,7 +62,7 @@ sub calc_usage { SELECT value FROM reportfields WHERE rep_id = $rep_id AND name = ? - AND servciceid = ? + AND serviceid = ? "; my $total = 0; @@ -55,23 +72,26 @@ sub calc_usage { my $serviceid = $svc_port->serviceid; + warn "searching for $serviceid usage\n" if $DEBUG; my $in = $self->scalar_sql($sql, $self->_torrus_name, $serviceid.'_IN'); my $out = $self->scalar_sql($sql, $self->_torrus_name, $serviceid.'_OUT'); my $max = max($in,$out); + warn "$serviceid usage is $max\n" if $DEBUG; my $inc = $self->option($self->_torrus_base);#aggregate instead of per-port? $max -= $inc; next if $max < 0; - my $amount = sprintf('%.2f', $self->option($self->_torrus_rate) * $max ); + my $rate = $self->option($self->_torrus_rate); + my $amount = sprintf('%.2f', $rate * $max ); $total += $amount; #add usage details to invoice my $l = $self->_torrus_label; - my $d = "Last month's usage for $serviceid: $max$l"; + my $d = "Last month's usage for $serviceid: ". sprintf('%.2f',$max). $l; $d .= " (". ($max+$inc). "$l - $inc$l included)" if $inc; - $d .= ": $money_char$amount"; + $d .= " @ $money_char$rate/$l: $money_char$amount"; push @$details, $d;