ee63b9a29faba9a56f3485b0fd00b58256f17b7d
[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 use FS::Conf;
7
8 &untaint_argv;  #what it sounds like  (eww)
9 use vars qw(%opt);
10 getopts("p:a:d:vl:sy:nmrkg:u", \%opt);
11
12 my $user = shift or die &usage;
13 adminsuidsetup $user;
14
15 #you can skip this by not having a NetworkMonitoringSystem configured
16 use FS::Cron::nms_report qw(nms_report);
17 nms_report(%opt);
18
19 #no way to skip this yet, but should be harmless/quick
20 use FS::Cron::expire_banned_pay qw(expire_banned_pay);
21 expire_banned_pay(%opt);
22
23 #you can skip this by setting the disable_cron_billing config
24 use FS::Cron::bill qw(bill);
25 bill(%opt);
26
27 #you can skip this just by not having the config
28 use FS::Cron::breakage qw(reconcile_breakage);
29 reconcile_breakage(%opt);
30
31 #you can skip this just by not having the config
32 use FS::Cron::upload qw(upload);
33 upload(%opt);
34
35 use FS::Cron::set_lata_have_usage qw(set_lata_have_usage);
36 set_lata_have_usage(%opt);
37
38 # Send alerts about upcoming credit card expiration.
39 use FS::Cron::alert_expiration qw(alert_expiration);
40 my $conf = new FS::Conf;
41 alert_expiration(%opt) if($conf->exists('alert_expiration'));
42
43 #what to do about the below when using -m?  that is the question.
44
45 #you don't want to skip this, besides, it should be cheap
46 use FS::Cron::expire_user_pref qw(expire_user_pref);
47 expire_user_pref();
48
49 unless ( $opt{k} ) {
50   use FS::Cron::notify qw(notify_flat_delay);
51   notify_flat_delay(%opt);
52 }
53
54 #debian Pg 8.1+ auto-vaccums, 7.4 w/postgresql-contrib
55 if ( $opt{u} ) {
56   use FS::Cron::vacuum qw(vacuum);
57   vacuum();
58 }
59
60 #you can skip this just by not having the config
61 use FS::Cron::backup qw(backup);
62 backup();
63
64 #same
65 use FS::Cron::rt_tasks qw(rt_daily);
66 rt_daily(%opt);
67
68 my $deldir = "$FS::UID::cache_dir/cache.$FS::UID::datasrc/";
69 unlink <${deldir}.invoice*>;
70 unlink <${deldir}.letter*>;
71 unlink <${deldir}.CGItemp*>;
72
73 ###
74 # subroutines
75 ###
76
77 sub untaint_argv {
78   foreach $_ ( $[ .. $#ARGV ) { #untaint @ARGV
79     #$ARGV[$_] =~ /^([\w\-\/]*)$/ || die "Illegal arguement \"$ARGV[$_]\"";
80     # Date::Parse
81     $ARGV[$_] =~ /^(.*)$/ || die "Illegal arguement \"$ARGV[$_]\"";
82     $ARGV[$_]=$1;
83   }
84 }
85
86 sub usage {
87   die "Usage:\n\n  freeside-daily [ -d 'date' ] [ -y days ] [ -p 'payby' ] [ -a agentnum,agentnum,... ] [ -s ] [ -v ] [ -l level ] [ -m ] [ -k ] user [ custnum custnum ... ]\n";
88 }
89
90 ###
91 # documentation
92 ###
93
94 =head1 NAME
95
96 freeside-daily - Run daily billing and invoice collection events.
97
98 =head1 SYNOPSIS
99
100   freeside-daily [ -d 'date' ] [ -y days ] [ -p 'payby' ] [ -a agentnum,agentnum,... ] [ -s ] [ -o ] [ -v ] [ -l level ] [ -m ] [ -r ] [ -k ] user [ custnum custnum ... ]
101
102 =head1 DESCRIPTION
103
104 Bills customers and runs invoice collection events.  Should be run from
105 crontab daily.
106
107 Bills customers.  Searches for customers who are due for billing and calls
108 the bill and collect methods of a cust_main object.  See L<FS::cust_main>.
109
110   -d: Pretend it's 'date'.  Date is in any format Date::Parse is happy with,
111       but be careful.
112
113   -y: In addition to -d, which specifies an absolute date, the -y switch
114       specifies an offset, in days.  For example, "-y 15" would increment the
115       "pretend date" 15 days from whatever was specified by the -d switch
116       (or now, if no -d switch was given).
117
118   -n: When used with "-d" and/or "-y", specifies that invoices should be dated
119       with today's date, irregardless of the pretend date used to pre-generate
120       the invoices.
121
122   -p: Only process customers with the specified payby (CARD, DCRD, CHEK, DCHK, BILL, COMP, LECB)
123
124   -a: Only process customers with the specified agentnum.  Multiple agentnums can be specified, separated with commas.
125
126   -g: Don't process the provided pkgpart (or pkgparts, specified as a comma-
127       separated list).
128
129   -s: re-charge setup fees
130
131   -o: For packages which are more than one billing period behind, only charge for one billing period rather than catching up.
132
133   -v: enable debugging
134
135   -l: debugging level
136
137   -m: Experimental multi-process mode uses the job queue for multi-process and/or multi-machine billing.
138
139   -r: Multi-process mode dry run option
140
141   -k: skip notify_flat_delay
142
143   -u: Do a vacuum (starting with version 1.9, this is not run by default).
144
145 user: From the mapsecrets file - see config.html from the base documentation
146
147 custnum: if one or more customer numbers are specified, only bills those
148 customers.  Otherwise, bills all customers.
149
150 =head1 BUGS
151
152 =head1 SEE ALSO
153
154 L<FS::cust_main>, config.html from the base documentation
155
156 =cut
157