diff options
| author | ivan <ivan> | 2005-06-09 07:13:38 +0000 | 
|---|---|---|
| committer | ivan <ivan> | 2005-06-09 07:13:38 +0000 | 
| commit | 2358bebdb617840f9a635187a71491ed4d16f614 (patch) | |
| tree | 7bb804c7fa5d2fa1058f4bf05a91c6eef684c7ef | |
| parent | 0452430dac4d639796581be77e8674207653f42b (diff) | |
significant speedup from only selected customers with outstanding packages or invoice events in the initial select, and add -a flag for agentnum
| -rwxr-xr-x | FS/bin/freeside-daily | 61 | 
1 files changed, 52 insertions, 9 deletions
| diff --git a/FS/bin/freeside-daily b/FS/bin/freeside-daily index 75bbca7d8..db6b97128 100755 --- a/FS/bin/freeside-daily +++ b/FS/bin/freeside-daily @@ -11,25 +11,66 @@ use FS::cust_main;  &untaint_argv;	#what it sounds like  (eww)  use vars qw($opt_d $opt_v $opt_p $opt_s $opt_y); -getopts("p:d:vsy:"); +getopts("p:a:d:vsy:");  my $user = shift or die &usage;  adminsuidsetup $user;  $FS::cust_main::DEBUG = 1 if $opt_v; -my %search; -$search{'payby'} = $opt_p if $opt_p; - -my @cust_main = @ARGV -  ? map { qsearchs('cust_main', { custnum => $_, %search } ) } @ARGV -  : qsearch('cust_main', \%search ) -; +my %search = (); +$search{'payby'}    = $opt_p if $opt_p; +$search{'agentnum'} = $opt_a if $opt_a;  #we're at now now (and later).  my($time)= $opt_d ? str2time($opt_d) : $^T;  $time += $opt_y * 86400 if $opt_y; +# select * from cust_main where +my $where_pkg = <<"END"; +  0 < ( select count(*) from cust_pkg +          where cust_main.custnum = cust_pkg.custnum +            and ( cancel is null or cancel = 0 ) +            and (    setup is null or setup =  0 +                  or bill  is null or bill  <= $time  +                  or ( expire is not null and expire <= $^T ) +                ) +      ) +END + +# or +my $where_bill_event = <<"END"; +  0 < ( select count(*) from cust_bill +          where cust_main.custnum = cust_bill.custnum +            and 0 < charged +                    - ( select sum(amount) from cust_bill_pay +                          where cust_bill.invnum = cust_bill_pay.invnum ) +                    - ( select sum(amount) from cust_credit_bill +                          where cust_bill.invnum = cust_credit_bill.invnum ) +            and 0 < ( select count(*) from part_bill_event +                        where payby = cust_main.payby +                          and ( disabled is null or disabled = '' ) +                          and seconds <= $time - cust_bill._date +                          and 0 = ( select count(*) from cust_bill_event +                                     where cust_bill.invnum = cust_bill_event.invnum +                                       and part_bill_event.eventpart = cust_bill_event.eventpart +                                       and status = 'done' +                                  ) + +                    ) +      ) +END + +my $extra_sql = ( scalar(%search) ? ' AND ' : ' WHERE ' ). "$where_pkg OR $where_bill_event"; + +my @cust_main; +if ( @ARGV ) { +  @cust_main = map { qsearchs('cust_main', { custnum => $_, %search } ) } @ARGV +} else { +  @cust_main = qsearch('cust_main', \%search, '', $extra_sql ); +} +; +  my($cust_main,%saw);  foreach $cust_main ( @cust_main ) { @@ -112,7 +153,7 @@ freeside-daily - Run daily billing and invoice collection events.  =head1 SYNOPSIS -  freeside-daily [ -d 'date' ] [ -y days ] [ -p 'payby' ] [ -s ] [ -v ] user [ custnum custnum ... ] +  freeside-daily [ -d 'date' ] [ -y days ] [ -p 'payby' ] [ -a agentnum ] [ -s ] [ -v ] user [ custnum custnum ... ]  =head1 DESCRIPTION @@ -134,6 +175,8 @@ the bill and collect methods of a cust_main object.  See L<FS::cust_main>.    -p: Only process customers with the specified payby (I<CARD>, I<DCRD>, I<CHEK>, I<DCHK>, I<BILL>, I<COMP>, I<LECB>) +  -a: Only process customers with the specified agentnum +    -s: re-charge setup fees    -v: enable debugging | 
