X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2FReport%2FTable%2FMonthly.pm;h=19c0b216d0202d1b5ae71f38cb4dae29ca1c5287;hb=f0097d06a2a96a49340fc2420f1713aa692d45a8;hp=fa9949d4904557952bedde4faf3a87c0c96a5db3;hpb=545a54b64c225ff81a92c2f57fa7b3b6509cfea0;p=freeside.git diff --git a/FS/FS/Report/Table/Monthly.pm b/FS/FS/Report/Table/Monthly.pm index fa9949d49..19c0b216d 100644 --- a/FS/FS/Report/Table/Monthly.pm +++ b/FS/FS/Report/Table/Monthly.pm @@ -1,13 +1,14 @@ package FS::Report::Table::Monthly; use strict; -use vars qw( @ISA ); +use vars qw( @ISA $DEBUG ); use Time::Local; use FS::UID qw( dbh ); use FS::Report::Table; use FS::CurrentUser; @ISA = qw( FS::Report::Table ); +$DEBUG = 0; # turning this on will trace all SQL statements, VERY noisy =head1 NAME @@ -307,6 +308,64 @@ sub _subtract_11mo { timelocal($sec,$min,$hour,$mday,$mon,$year); } +sub cust_pkg_setup_cost { + my( $self, $speriod, $eperiod, $agentnum, %opt ) = @_; + my $where = ''; + my $comparison = ''; + if ( $opt{'classnum'} =~ /^(\d+)$/ ) { + if ( $1 == 0 ) { + $comparison = 'IS NULL'; + } + else { + $comparison = "= $1"; + } + $where = "AND part_pkg.classnum $comparison"; + } + $agentnum ||= $opt{'agentnum'}; + + my $total_sql = " SELECT SUM(part_pkg.setup_cost) "; + $total_sql .= " FROM cust_pkg + LEFT JOIN cust_main USING ( custnum ) + LEFT JOIN part_pkg USING ( pkgpart ) + WHERE pkgnum != 0 + $where + AND ".$self->in_time_period_and_agent( + $speriod, $eperiod, $agentnum, 'cust_pkg.setup'); + return $self->scalar_sql($total_sql); +} + +sub cust_pkg_recur_cost { + my( $self, $speriod, $eperiod, $agentnum, %opt ) = @_; + my $where = ''; + my $comparison = ''; + if ( $opt{'classnum'} =~ /^(\d+)$/ ) { + if ( $1 == 0 ) { + $comparison = 'IS NULL'; + } + else { + $comparison = "= $1"; + } + $where = " AND part_pkg.classnum $comparison"; + } + $agentnum ||= $opt{'agentnum'}; + # duplication of in_time_period_and_agent + # because we do it a little differently here + $where .= " AND cust_main.agentnum = $agentnum" if $agentnum; + $where .= " AND ". + $FS::CurrentUser::CurrentUser->agentnums_sql('table' => 'cust_main'); + + my $total_sql = " SELECT SUM(part_pkg.recur_cost) "; + $total_sql .= " FROM cust_pkg + LEFT JOIN cust_main USING ( custnum ) + LEFT JOIN part_pkg USING ( pkgpart ) + WHERE pkgnum != 0 + $where + AND cust_pkg.setup < $eperiod + AND (cust_pkg.cancel > $speriod OR cust_pkg.cancel IS NULL) + "; + return $self->scalar_sql($total_sql); +} + sub cust_bill_pkg { my( $self, $speriod, $eperiod, $agentnum, %opt ) = @_; @@ -320,12 +379,12 @@ sub cust_bill_pkg { } if ( $opt{'use_override'} ) { - $where = "( + $where = "AND ( part_pkg.classnum $comparison AND pkgpart_override IS NULL OR override.classnum $comparison AND pkgpart_override IS NOT NULL )"; } else { - $where = "part_pkg.classnum $comparison"; + $where = "AND part_pkg.classnum $comparison"; } } @@ -346,7 +405,7 @@ sub cust_bill_pkg { LEFT JOIN part_pkg USING ( pkgpart ) LEFT JOIN part_pkg AS override ON pkgpart_override = override.pkgpart WHERE pkgnum != 0 - AND $where + $where AND ". $self->in_time_period_and_agent($speriod, $eperiod, $agentnum); if ($opt{use_usage} && $opt{use_usage} eq 'recurring') { @@ -463,6 +522,7 @@ sub in_time_period_and_agent { sub scalar_sql { my( $self, $sql ) = ( shift, shift ); + warn "FS::Report::Table::Monthly\n$sql\n" if $DEBUG; my $sth = dbh->prepare($sql) or die dbh->errstr; $sth->execute or die "Unexpected error executing statement $sql: ". $sth->errstr;