# -l: debugging level
# -m: Experimental multi-process mode uses the job queue for multi-process and/or multi-machine billing.
# -r: Multi-process mode dry run option
+# -g: Don't bill these pkgparts
sub bill {
my %opt = @_;
$opt{'invoice_time'} = $opt{'n'} ? $^T : $opt{'time'};
+ my $not_pkgpart = $opt{g} ? { map { $_=>1 } split(/,\s*/, $opt{g}) }
+ : {};
+
###
# get a list of custnums
###
#(not, when using -m, freeside-queued)
'check_freq' => $check_freq,
'resetup' => ( $opt{'s'} ? $opt{'s'} : 0 ),
+ 'not_pkgpart' => $not_pkgpart,
);
if ( $opt{'m'} ) {
push @search, "cust_main.agentnum = ". $opt{'a'}
if $opt{'a'};
+ #it would be useful if i recognized $opt{g} / $not_pkgpart...
+
if ( @ARGV ) {
push @search, "( ".
join(' OR ', map "cust_main.custnum = $_", @ARGV ).
=back
+Options are passed to the B<bill> and B<collect> methods verbatim, so all
+options of those methods are also available.
+
=cut
sub bill_and_collect {
$cust_main->bill( pkg_list => [$pkg1, $pkg2] );
+=item not_pkgpart
+
+A hashref of pkgparts to exclude from this billing run.
+
=item invoice_time
Used in conjunction with the I<time> option, this option specifies the date of for the generated invoices. Other calculations, such as whether or not to generate the invoice in the first place, are not affected.
my $time = $options{'time'} || time;
my $invoice_time = $options{'invoice_time'} || $time;
+ $options{'not_pkgpart'} ||= {};
+
#put below somehow?
local $SIG{HUP} = 'IGNORE';
local $SIG{INT} = 'IGNORE';
my %taxlisthash;
my @precommit_hooks = ();
- $options{ pkg_list } ||= [ $self->ncancelled_pkgs ]; #param checks?
- foreach my $cust_pkg ( @{ $options{ pkg_list } } ) {
+ $options{'pkg_list'} ||= [ $self->ncancelled_pkgs ]; #param checks?
+ foreach my $cust_pkg ( @{ $options{'pkg_list'} } ) {
+
+ next if $options{'not_pkgpart'}->{$cust_pkg->pkgpart};
warn " bill package ". $cust_pkg->pkgnum. "\n" if $DEBUG > 1;
&untaint_argv; #what it sounds like (eww)
use vars qw(%opt);
-getopts("p:a:d:vl:sy:nmrk", \%opt);
+getopts("p:a:d:vl:sy:nmrkg:", \%opt);
my $user = shift or die &usage;
adminsuidsetup $user;
use FS::Cron::notify qw(notify_flat_delay);
notify_flat_delay(%opt);
- use FS::Cron::vacuum qw(vacuum);
- vacuum();
+ #Pg 8.1+ auto-vaccums, 7.4 w/postgresql-contrib
+ #use FS::Cron::vacuum qw(vacuum);
+ #vacuum();
}
-a: Only process customers with the specified agentnum
+ -g: Don't process the provided pkgpart (or pkgparts, specified as a comma-
+ separated list).
+
-s: re-charge setup fees
-v: enable debugging