X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=FS%2FFS%2Fvend_main.pm;h=22ac0bf70b5b4878e0534934f84d0a3c5f7e4a67;hp=ef79c00909d27f67ab360400a8939ecc1aa0d2b9;hb=HEAD;hpb=f264598260908d2442fe1aed2ce3784ce51254e6 diff --git a/FS/FS/vend_main.pm b/FS/FS/vend_main.pm index ef79c0090..22ac0bf70 100644 --- a/FS/FS/vend_main.pm +++ b/FS/FS/vend_main.pm @@ -1,9 +1,7 @@ package FS::vend_main; +use base qw( FS::Record ); use strict; -use base qw( FS::Record ); -use FS::Record qw( qsearchs ); # qsearch qsearchs ); -use FS::vend_class; =head1 NAME @@ -103,11 +101,64 @@ sub check { =item vend_class +=item search + =cut -sub vend_class { - my $self = shift; - qsearchs('vend_class', { 'classnum' => $self->classnum } ); +sub search { + my ($class, $param) = @_; + + my @where = (); + my $addl_from = ''; + + #_date + if ( $param->{_date} ) { + my($beginning, $ending) = @{$param->{_date}}; + + push @where, "vend_bill._date >= $beginning", + "vend_bill._date < $ending"; + } + + #payment_date + if ( $param->{payment_date} ) { + my($beginning, $ending) = @{$param->{payment_date}}; + + push @where, "vend_pay._date >= $beginning", + "vend_pay._date < $ending"; + } + + if ( $param->{'classnum'} =~ /^(\d+)$/ ) { + push @where, "vend_main.classnum = $1"; + } + + my $extra_sql = scalar(@where) ? ' WHERE '. join(' AND ', @where) : ''; + + my $group_by = ' GROUP BY vend_main.vendnum '; + + my $addl_from_vend_bill = ' LEFT JOIN vend_bill_pay USING (vendbillnum) '. + ' LEFT JOIN vend_pay USING (vendpaynum) '; + + $addl_from .= " LEFT JOIN vend_bill USING ( vendnum ) $addl_from_vend_bill"; + + #simplistic, but how we are for now + + my $count_query = " + SELECT COUNT(*), + ( SELECT SUM(charged) from vend_bill $addl_from_vend_bill $extra_sql + ) AS sum_charged + FROM vend_main "; #XXX classnum, sum_charged > 0 + + +{ + 'table' => 'vend_main', + 'select' => 'vend_main.*, sum(vend_bill.charged) as sum_charged', + 'addl_from' => $addl_from, + 'hashref' => {}, + 'extra_sql' => "$extra_sql $group_by", + 'order_by' => 'ORDER BY sum_charged desc', + 'count_query' => $count_query, + #'extra_headers' => \@extra_headers, + #'extra_fields' => \@extra_fields, + }; } =back