freeside/FS/bin freeside-daily,1.17,1.18

Ivan Kohler ivan at pouncequick.420.am
Thu Jun 9 00:13:41 PDT 2005


Update of /home/cvs/cvsroot/freeside/FS/bin
In directory pouncequick:/tmp/cvs-serv30778

Modified Files:
	freeside-daily 
Log Message:
significant speedup from only selected customers with outstanding packages or invoice events in the initial select, and add -a flag for agentnum

Index: freeside-daily
===================================================================
RCS file: /home/cvs/cvsroot/freeside/FS/bin/freeside-daily,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -d -r1.17 -r1.18
--- freeside-daily	10 Mar 2005 09:56:07 -0000	1.17
+++ freeside-daily	9 Jun 2005 07:13:38 -0000	1.18
@@ -11,25 +11,66 @@
 
 &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 @@
 
 =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
 
@@ -133,6 +174,8 @@
       (or now, if no -d switch was given).
 
   -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
 




More information about the freeside-commits mailing list