add prepaid support which sets RADIUS Expiration attribute, update customer view...
[freeside.git] / FS / bin / freeside-daily
index db6b971..603da12 100755 (executable)
@@ -10,7 +10,7 @@ use FS::Conf;
 use FS::cust_main;
 
 &untaint_argv; #what it sounds like  (eww)
-use vars qw($opt_d $opt_v $opt_p $opt_s $opt_y);
+use vars qw($opt_d $opt_v $opt_p $opt_a $opt_s $opt_y);
 getopts("p:a:d:vsy:");
 my $user = shift or die &usage;
 
@@ -43,10 +43,16 @@ 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 )
+                    - coalesce(
+                                ( select sum(amount) from cust_bill_pay
+                                    where cust_bill.invnum = cust_bill_pay.invnum )
+                                ,0
+                              )
+                    - coalesce(
+                                ( select sum(amount) from cust_credit_bill
+                                    where cust_bill.invnum = cust_credit_bill.invnum )
+                                ,0
+                              )
             and 0 < ( select count(*) from part_bill_event
                         where payby = cust_main.payby
                           and ( disabled is null or disabled = '' )
@@ -61,7 +67,7 @@ my $where_bill_event = <<"END";
       )
 END
 
-my $extra_sql = ( scalar(%search) ? ' AND ' : ' WHERE ' ). "$where_pkg OR $where_bill_event";
+my $extra_sql = ( scalar(%search) ? ' AND ' : ' WHERE ' ). "( $where_pkg OR $where_bill_event )";
 
 my @cust_main;
 if ( @ARGV ) {
@@ -83,6 +89,19 @@ foreach $cust_main ( @cust_main ) {
          $cust_main->custnum. ": $error"
       if $error;
   }
+  # $^T not $time because -d is for pre-printing invoices
+  foreach my $cust_pkg (
+    grep { $_->part_pkg->is_prepaid
+           && $_->bill && $_->bill < $^T && ! $_->susp
+         }
+         $cust_main->ncancelled_pkgs
+  ) {
+    my $error = $cust_pkg->suspend;
+    warn "Error suspending package ". $cust_pkg->pkgnum.
+         " for custnum ". $cust_main->custnum.
+         ": $error"
+      if $error;
+  }
 
   my $error = $cust_main->bill( 'time'    => $time,
                                 'resetup' => $opt_s, );