notices before first charge on flat_delayed
[freeside.git] / FS / bin / freeside-daily
1 #!/usr/bin/perl -w
2
3 use strict;
4 use Getopt::Std;
5 use FS::UID qw(adminsuidsetup);
6
7 &untaint_argv;  #what it sounds like  (eww)
8 #use vars qw($opt_d $opt_v $opt_p $opt_a $opt_s $opt_y);
9 use vars qw(%opt);
10 getopts("p:a:d:vsy:", \%opt);
11
12 my $user = shift or die &usage;
13 adminsuidsetup $user;
14
15 use FS::Cron::bill qw(bill);
16 bill(%opt);
17
18 use FS::Cron::notify qw(notify_flat_delay);
19 notify_flat_delay(%opt);
20
21 use FS::Cron::vacuum qw(vacuum);
22 vacuum();
23
24 use FS::Cron::backup qw(backup_scp);
25 backup_scp();
26
27 ###
28 # subroutines
29 ###
30
31 sub untaint_argv {
32   foreach $_ ( $[ .. $#ARGV ) { #untaint @ARGV
33     #$ARGV[$_] =~ /^([\w\-\/]*)$/ || die "Illegal arguement \"$ARGV[$_]\"";
34     # Date::Parse
35     $ARGV[$_] =~ /^(.*)$/ || die "Illegal arguement \"$ARGV[$_]\"";
36     $ARGV[$_]=$1;
37   }
38 }
39
40 sub usage {
41   die "Usage:\n\n  freeside-daily [ -d 'date' ] user [ custnum custnum ... ]\n";
42 }
43
44 ###
45 # documentation
46 ###
47
48 =head1 NAME
49
50 freeside-daily - Run daily billing and invoice collection events.
51
52 =head1 SYNOPSIS
53
54   freeside-daily [ -d 'date' ] [ -y days ] [ -p 'payby' ] [ -a agentnum ] [ -s ] [ -v ] user [ custnum custnum ... ]
55
56 =head1 DESCRIPTION
57
58 Bills customers and runs invoice collection events.  Should be run from
59 crontab daily.
60
61 Bills customers.  Searches for customers who are due for billing and calls
62 the bill and collect methods of a cust_main object.  See L<FS::cust_main>.
63
64   -d: Pretend it's 'date'.  Date is in any format Date::Parse is happy with,
65       but be careful.
66
67   -y: In addition to -d, which specifies an absolute date, the -y switch
68       specifies an offset, in days.  For example, "-y 15" would increment the
69       "pretend date" 15 days from whatever was specified by the -d switch
70       (or now, if no -d switch was given).
71
72   -p: Only process customers with the specified payby (I<CARD>, I<DCRD>, I<CHEK>, I<DCHK>, I<BILL>, I<COMP>, I<LECB>)
73
74   -a: Only process customers with the specified agentnum
75
76   -s: re-charge setup fees
77
78   -v: enable debugging
79
80 user: From the mapsecrets file - see config.html from the base documentation
81
82 custnum: if one or more customer numbers are specified, only bills those
83 customers.  Otherwise, bills all customers.
84
85 =head1 BUGS
86
87 =head1 SEE ALSO
88
89 L<FS::cust_main>, config.html from the base documentation
90
91 =cut
92