[freeside-commits] freeside/install/rpm freeside-1.5.7.nasport.patch, NONE, 1.1.2.1
Richard Siddall
rsiddall at wavetail.420.am
Wed Jun 27 19:34:42 PDT 2007
Update of /home/cvs/cvsroot/freeside/install/rpm
In directory wavetail:/tmp/cvs-serv11425
Added Files:
Tag: FREESIDE_1_5_BRANCH
freeside-1.5.7.nasport.patch
Log Message:
Patch to obtain ISDN usage for billing in Freeside 1.5.7 - There are better ways to do this.
--- NEW FILE: freeside-1.5.7.nasport.patch ---
diff -Naur freeside-1.5.7.orig/FS/bin/freeside-sqlradius-seconds freeside-1.5.7/FS/bin/freeside-sqlradius-seconds
--- freeside-1.5.7.orig/FS/bin/freeside-sqlradius-seconds 2002-12-17 05:42:26.000000000 -0500
+++ freeside-1.5.7/FS/bin/freeside-sqlradius-seconds 2005-09-09 10:45:39.010386201 -0400
@@ -17,7 +17,12 @@
my $svc_acct = qsearchs( 'svc_acct', { 'username' => $target_user } );
die "username $target_user not found\n" unless $svc_acct;
-print $svc_acct->seconds_since_sqlradacct( $start, $stop ). "\n";
+my %usage = $svc_acct->seconds_since_sqlradacct( $start, $stop );
+my $seconds = 0;
+foreach (keys %usage) {
+ $seconds += $usage{$_};
+}
+print $seconds . "\n";
sub usage {
die "Usage:\n\n freeside-sqlradius-seconds freeside_username target_username start_date stop_date\n";
diff -Naur freeside-1.5.7.orig/FS/FS/cust_pkg.pm freeside-1.5.7/FS/FS/cust_pkg.pm
--- freeside-1.5.7.orig/FS/FS/cust_pkg.pm 2005-03-21 17:13:36.000000000 -0500
+++ freeside-1.5.7/FS/FS/cust_pkg.pm 2005-09-08 16:10:06.000000000 -0400
@@ -857,7 +857,7 @@
sub seconds_since_sqlradacct {
my($self, $start, $end) = @_;
- my $seconds = 0;
+ my %seconds = ();
foreach my $cust_svc (
grep {
@@ -866,10 +866,13 @@
&& scalar($part_svc->part_export('sqlradius'));
} $self->cust_svc
) {
- $seconds += $cust_svc->seconds_since_sqlradacct($start, $end);
+ my %result = $cust_svc->seconds_since_sqlradacct($start, $end);
+ foreach (keys %result) {
+ $seconds{$_} += $result{$_};
+ }
}
- $seconds;
+ %seconds;
}
diff -Naur freeside-1.5.7.orig/FS/FS/cust_svc.pm freeside-1.5.7/FS/FS/cust_svc.pm
--- freeside-1.5.7.orig/FS/FS/cust_svc.pm 2005-06-09 16:16:58.000000000 -0400
+++ freeside-1.5.7/FS/FS/cust_svc.pm 2005-09-08 17:12:12.000000000 -0400
@@ -390,7 +390,7 @@
unless @part_export;
#or return undef;
- my $seconds = 0;
+ my %seconds = ();
foreach my $part_export ( @part_export ) {
next if $part_export->option('ignore_accounting');
@@ -423,65 +423,82 @@
my $query;
#find closed sessions completely within the given range
- my $sth = $dbh->prepare("SELECT SUM(acctsessiontime)
+ my $sth = $dbh->prepare("SELECT NASPortType, SUM(acctsessiontime)
FROM radacct
WHERE UserName = ?
AND $str2time AcctStartTime) >= ?
AND $str2time AcctStopTime ) < ?
AND $str2time AcctStopTime ) > 0
- AND AcctStopTime IS NOT NULL"
+ AND AcctStopTime IS NOT NULL
+ AND NASPortType IS NOT NULL
+ GROUP BY NASPortType"
) or die $dbh->errstr;
$sth->execute($username, $start, $end) or die $sth->errstr;
- my $regular = $sth->fetchrow_arrayref->[0];
+ my %regular = ();
+ while (my $h = $sth->fetchrow_arrayref()) {
+ $seconds{$h->[0]} = $h->[1];
+ }
#find open sessions which start in the range, count session start->range end
- $query = "SELECT SUM( ? - $str2time AcctStartTime ) )
+ $query = "SELECT NASPortType, SUM( ? - $str2time AcctStartTime ) )
FROM radacct
WHERE UserName = ?
AND $str2time AcctStartTime ) >= ?
AND $str2time AcctStartTime ) < ?
AND ( ? - $str2time AcctStartTime ) ) < 86400
AND ( $str2time AcctStopTime ) = 0
- OR AcctStopTime IS NULL )";
+ OR AcctStopTime IS NULL )
+ AND NASPortType IS NOT NULL
+ GROUP BY NASPortType";
$sth = $dbh->prepare($query) or die $dbh->errstr;
$sth->execute($end, $username, $start, $end, $end)
or die $sth->errstr. " executing query $query";
- my $start_during = $sth->fetchrow_arrayref->[0];
+ while (my $h = $sth->fetchrow_arrayref()) {
+# $seconds{$h->[0]} += $h->[1];
+ }
#find closed sessions which start before the range but stop during,
#count range start->session end
- $sth = $dbh->prepare("SELECT SUM( $str2time AcctStopTime ) - ? )
+ $sth = $dbh->prepare("SELECT NASPortType, SUM( $str2time AcctStopTime ) - ? )
FROM radacct
WHERE UserName = ?
AND $str2time AcctStartTime ) < ?
AND $str2time AcctStopTime ) >= ?
AND $str2time AcctStopTime ) < ?
AND $str2time AcctStopTime ) > 0
- AND AcctStopTime IS NOT NULL"
+ AND AcctStopTime IS NOT NULL
+ AND AcctStartTime > 0
+ AND NASPortType IS NOT NULL
+ GROUP BY NASPortType"
) or die $dbh->errstr;
$sth->execute($start, $username, $start, $start, $end ) or die $sth->errstr;
- my $end_during = $sth->fetchrow_arrayref->[0];
+ while (my $h = $sth->fetchrow_arrayref()) {
+# $seconds{$h->[0]} += $h->[1];
+ }
#find closed (not anymore - or open) sessions which start before the range
# but stop after, or are still open, count range start->range end
# don't count open sessions (probably missing stop record)
- $sth = $dbh->prepare("SELECT COUNT(*)
+ $sth = $dbh->prepare("SELECT NASPortType, COUNT(*)
FROM radacct
WHERE UserName = ?
AND $str2time AcctStartTime ) < ?
- AND ( $str2time AcctStopTime ) >= ?
- )"
+ AND $str2time AcctStopTime ) >= ?
+ AND AcctStartTime > 0
+ AND NASPortType IS NOT NULL
+ GROUP BY NASPortType"
# OR AcctStopTime = 0
# OR AcctStopTime IS NULL )"
) or die $dbh->errstr;
$sth->execute($username, $start, $end ) or die $sth->errstr;
- my $entire_range = ($end-$start) * $sth->fetchrow_arrayref->[0];
-
- $seconds += $regular + $end_during + $start_during + $entire_range;
+ while (my $h = $sth->fetchrow_arrayref()) {
+# my $entire_range = ($end-$start) * $h->[1];
+# $seconds{$h->[0]} += $entire_range;
+ }
}
- $seconds;
+ %seconds;
}
diff -Naur freeside-1.5.7.orig/FS/FS/part_pkg/sqlradacct_hour.pm freeside-1.5.7/FS/FS/part_pkg/sqlradacct_hour.pm
--- freeside-1.5.7.orig/FS/FS/part_pkg/sqlradacct_hour.pm 2005-07-09 06:36:43.000000000 -0400
+++ freeside-1.5.7/FS/FS/part_pkg/sqlradacct_hour.pm 2005-09-08 16:10:06.000000000 -0400
@@ -26,6 +26,10 @@
'recur_hourly_charge' => { 'name' => 'Additional charge per hour',
'default' => 0,
},
+ 'NASPortTypes' => { 'name' => 'NAS Port Types',
+ 'default' => 'Async ISDN Virtual',
+ # 'type' => 'select',
+ },
'recur_included_input' => { 'name' => 'Upload megabytes included',
'default' => 0,
},
@@ -49,7 +53,7 @@
'default' => 0,
},
},
- 'fieldorder' => [qw( setup_fee recur_flat unused_credit recur_included_hours recur_hourly_charge recur_included_input recur_input_charge recur_included_output recur_output_charge recur_included_total recur_total_charge )],
+ 'fieldorder' => [qw( setup_fee recur_flat unused_credit recur_included_hours recur_hourly_charge NASPortTypes recur_included_input recur_input_charge recur_included_output recur_output_charge recur_included_total recur_total_charge )],
#'setup' => 'what.setup_fee.value',
#'recur' => '\'my $last_bill = $cust_pkg->last_bill; my $hours = $cust_pkg->seconds_since_sqlradacct($last_bill, $sdate ) / 3600 - \' + what.recur_included_hours.value + \'; $hours = 0 if $hours < 0; my $input = $cust_pkg->attribute_since_sqlradacct($last_bill, $sdate, \"AcctInputOctets\" ) / 1048576; my $output = $cust_pkg->attribute_since_sqlradacct($last_bill, $sdate, \"AcctOutputOctets\" ) / 1048576; my $total = $input + $output - \' + what.recur_included_total.value + \'; $total = 0 if $total < 0; my $input = $input - \' + what.recur_included_input.value + \'; $input = 0 if $input < 0; my $output = $output - \' + what.recur_included_output.value + \'; $output = 0 if $output < 0; my $totalcharge = sprintf(\"%.2f\", \' + what.recur_total_charge.value + \' * $total); my $inputcharge = sprintf(\"%.2f\", \' + what.recur_input_charge.value + \' * $input); my $outputcharge = sprintf(\"%.2f\", \' + what.recur_output_charge.value + \' * $output); my $hourscharge = sprintf(\"%.2f\", \' + what.recur_hourly_charge.value + \' * $hours); if ( \' + what.recur_total_charge.value + \' > 0 ) { push @details, \"Last month\\\'s data \". sprintf(\"%.1f\", $total). \" megs: \\\$$totalcharge\" } if ( \' + what.recur_input_charge.value + \' > 0 ) { push @details, \"Last month\\\'s download \". sprintf(\"%.1f\", $input). \" megs: \\\$$inputcharge\" } if ( \' + what.recur_output_charge.value + \' > 0 ) { push @details, \"Last month\\\'s upload \". sprintf(\"%.1f\", $output). \" megs: \\\$$outputcharge\" } if ( \' + what.recur_hourly_charge.value + \' > 0 ) { push @details, \"Last month\\\'s time \". sprintf(\"%.1f\", $hours). \" hours: \\\$$hourscharge\"; } \' + what.recur_flat.value + \' + $hourscharge + $inputcharge + $outputcharge + $totalcharge ;\'',
'weight' => 40,
@@ -59,7 +63,12 @@
my($self, $cust_pkg, $sdate, $details ) = @_;
my $last_bill = $cust_pkg->last_bill;
- my $hours = $cust_pkg->seconds_since_sqlradacct($last_bill, $$sdate ) / 3600;
+ my %result = $cust_pkg->seconds_since_sqlradacct($last_bill, $$sdate );
+ my $seconds = 0;
+ foreach (split '\s+', $self->option('NASPortTypes')) {
+ $seconds += $result{$_};
+ }
+ my $hours = $seconds / 3600;
$hours -= $self->option('recur_included_hours');
$hours = 0 if $hours < 0;
@@ -81,30 +90,37 @@
$output = 0 if $output < 0;
my $totalcharge =
- $total * sprintf('%.2f', $self->option('recur_total_charge'));
+ sprintf('%.2f', $total * $self->option('recur_total_charge'));
my $inputcharge =
- $input * sprintf('%.2f', $self->option('recur_input_charge'));
+ sprintf('%.2f', $input * $self->option('recur_input_charge'));
my $outputcharge =
- $output * sprintf('%.2f', $self->option('recur_output_charge'));
+ sprintf('%.2f', $output * $self->option('recur_output_charge'));
my $hourscharge =
- $hours * sprintf('%.2f', $self->option('recur_hourly_charge'));
+ sprintf('%.2f', $hours * $self->option('recur_hourly_charge'));
+
+# my $money_char = $conf->config('money_char') || '$';
+ my $money_char = '$';
+
+ if ( $self->option('recur_flat') > 0 ) {
+ push @$details, "Base charge: $money_char" . sprintf('%.2f', $self->option('recur_flat'));
+ }
if ( $self->option('recur_total_charge') > 0 ) {
- push @$details, "Last month's data ".
- sprintf('%.1f', $total). " megs: $totalcharge";
+ push @$details, "Excess data ".
+ sprintf('%.1f', $total). " megs: $money_char$totalcharge";
}
if ( $self->option('recur_input_charge') > 0 ) {
- push @$details, "Last month's download ".
- sprintf('%.1f', $input). " megs: $inputcharge";
+ push @$details, "Excess download ".
+ sprintf('%.1f', $input). " megs: $money_char$inputcharge";
}
if ( $self->option('recur_output_charge') > 0 ) {
- push @$details, "Last month's upload ".
- sprintf('%.1f', $output). " megs: $outputcharge";
+ push @$details, "Excess upload ".
+ sprintf('%.1f', $output). " megs: $money_char$outputcharge";
}
if ( $self->option('recur_hourly_charge') > 0 ) {
- push @$details, "Last month\'s time ".
- sprintf('%.1f', $hours). " hours: $hourscharge";
+ push @$details, "Excess time ".
+ sprintf('%.1f', $hours). " hours: $money_char$hourscharge";
}
$self->option('recur_flat')
diff -Naur freeside-1.5.7.orig/httemplate/view/svc_acct.cgi freeside-1.5.7/httemplate/view/svc_acct.cgi
--- freeside-1.5.7.orig/httemplate/view/svc_acct.cgi 2005-06-08 05:03:06.000000000 -0400
+++ freeside-1.5.7/httemplate/view/svc_acct.cgi 2005-09-08 16:10:06.000000000 -0400
@@ -74,7 +74,11 @@
%plandata = ();
}
- my $seconds = $svc_acct->seconds_since_sqlradacct( $last_bill, time );
+ my %usage = $svc_acct->seconds_since_sqlradacct( $last_bill, time );
+ my $seconds = 0;
+ foreach (keys %usage) {
+ $seconds += $usage{$_};
+ }
my $hour = int($seconds/3600);
my $min = int( ($seconds%3600) / 60 );
my $sec = $seconds%60;
@@ -108,6 +112,9 @@
(no billing cycle available for unaudited account)<BR>
<% } %>
+ <% foreach (sort keys %usage) { %>
+ <%= $_ %>: <B><%= int($usage{$_}/3600) %></B>h <B><%= int(($usage{$_} % 3600) / 60) %></B>m <B><%= $usage{$_} % 60 %></B>s<BR>
+ <% } %>
Upload: <B><%= sprintf("%.3f", $input) %></B> megabytes<BR>
Download: <B><%= sprintf("%.3f", $output) %></B> megabytes<BR>
More information about the freeside-commits
mailing list