7 use FS::UID qw(adminsuidsetup swapuid);
8 use FS::Record qw(qsearch qsearchs);
11 &untaint_argv; #what it sounds like (eww)
12 use vars qw($opt_a $opt_c $opt_i $opt_d);
14 my $user = shift or die &usage;
18 my %bill_only = map { $_ => 1 } (
19 @ARGV ? @ARGV : ( map $_->custnum, qsearch('cust_main', {} ) )
22 #we're at now now (and later).
23 my($time)= $main::opt_d ? str2time($main::opt_d) : $^T;
25 # find packages w/ bill < time && cancel != '', and create corresponding
32 ( $main::opt_a || ( ( $_->getfield('bill') || 0 ) <= $time ) )
33 && $bill_only{ $_->custnum }
34 && !$saw{ $_->custnum }++
36 qsearchs('cust_main',{'custnum'=> $_->custnum } );
40 } ( qsearch('cust_pkg', { 'cancel' => '' }),
41 qsearch('cust_pkg', { 'cancel' => 0 }),
47 print "Billing customer #" . $cust_main->getfield('custnum') . "\n";
51 $error=$cust_main->bill('time'=>$time);
52 warn "Error billing, customer #" . $cust_main->getfield('custnum') .
53 ":" . $error if $error;
56 $error=$cust_main->collect('invoice_time'=>$time,
57 'batch_card' => $main::opt_i ? 'no' : 'yes',
59 warn "Error collecting customer #" . $cust_main->getfield('custnum') .
60 ":" . $error if $error;
71 foreach $_ ( $[ .. $#ARGV ) { #untaint @ARGV
72 $ARGV[$_] =~ /^([\w\-\/]*)$/ || die "Illegal arguement \"$ARGV[$_]\"";
78 die "Usage:\n\n bill [ -c [ i ] ] [ -d 'date' ] [ -b ] user\n";
83 freeside-bill - Command line (crontab, script) interface to customer billing.
87 freeside-bill [ -c [ -a ] [ -i ] ] [ -d 'date' ] user [ custnum custnum ... ]
91 Bills customers. Searches for customers who are due for billing and calls
92 the bill and collect methods of a cust_main object. See L<FS::cust_main>.
94 -c: Turn on collecting (you probably want this).
96 -a: Call collect even if there isn't a new invoice (probably a bad idea for
99 -i: real-time billing (as opposed to batch billing). only relevant
102 -d: Pretent it's 'date'. Date is in any format Date::Parse is happy with,
105 user: From the mapsecrets file - see config.html from the base documentation
107 custnum: if one or more customer numbers are specified, only bills those
108 customers. Otherwise, bills all customers.
112 $Id: freeside-bill,v 1.2 1999-08-11 20:51:54 ivan Exp $
118 L<FS::cust_main>, config.html from the base documentation