projects
/
freeside.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fix latex printing when datasrc contains a ;
[freeside.git]
/
FS
/
bin
/
freeside-bill
diff --git
a/FS/bin/freeside-bill
b/FS/bin/freeside-bill
index
8f2c32f
..
49ad4a7
100755
(executable)
--- a/
FS/bin/freeside-bill
+++ b/
FS/bin/freeside-bill
@@
-1,16
+1,18
@@
+#!/usr/bin/perl -w
+# don't take any world-facing input
#!/usr/bin/perl -Tw
use strict;
use Fcntl qw(:flock);
use Date::Parse;
use Getopt::Std;
#!/usr/bin/perl -Tw
use strict;
use Fcntl qw(:flock);
use Date::Parse;
use Getopt::Std;
-use FS::UID qw(adminsuidsetup
swapuid
);
+use FS::UID qw(adminsuidsetup);
use FS::Record qw(qsearch qsearchs);
use FS::cust_main;
&untaint_argv; #what it sounds like (eww)
use FS::Record qw(qsearch qsearchs);
use FS::cust_main;
&untaint_argv; #what it sounds like (eww)
-use vars qw($opt_a $opt_c $opt_
i $opt_d
);
-getopts("ac
id:
");
+use vars qw($opt_a $opt_c $opt_
d $opt_p
);
+getopts("ac
d:p
");
my $user = shift or die &usage;
adminsuidsetup $user;
my $user = shift or die &usage;
adminsuidsetup $user;
@@
-20,7
+22,7
@@
my %bill_only = map { $_ => 1 } (
);
#we're at now now (and later).
);
#we're at now now (and later).
-my($time)= $
main::opt_d ? str2time($main::
opt_d) : $^T;
+my($time)= $
opt_d ? str2time($
opt_d) : $^T;
# find packages w/ bill < time && cancel != '', and create corresponding
# customer objects
# find packages w/ bill < time && cancel != '', and create corresponding
# customer objects
@@
-28,8
+30,11
@@
my($time)= $main::opt_d ? str2time($main::opt_d) : $^T;
my($cust_main,%saw);
foreach $cust_main (
map {
my($cust_main,%saw);
foreach $cust_main (
map {
+ unless ( exists $saw{ $_->custnum } && defined $saw{ $_->custnum} ) {
+ $saw{ $_->custnum } = 0; # to avoid 'use of uninitialized value' errors
+ }
if (
if (
- ( $
main::
opt_a || ( ( $_->getfield('bill') || 0 ) <= $time ) )
+ ( $opt_a || ( ( $_->getfield('bill') || 0 ) <= $time ) )
&& $bill_only{ $_->custnum }
&& !$saw{ $_->custnum }++
) {
&& $bill_only{ $_->custnum }
&& !$saw{ $_->custnum }++
) {
@@
-45,7
+50,6
@@
foreach $cust_main (
# and bill them
print "Billing customer #" . $cust_main->getfield('custnum') . "\n";
# and bill them
print "Billing customer #" . $cust_main->getfield('custnum') . "\n";
- next;
my($error);
my($error);
@@
-53,15
+57,17
@@
foreach $cust_main (
warn "Error billing, customer #" . $cust_main->getfield('custnum') .
":" . $error if $error;
warn "Error billing, customer #" . $cust_main->getfield('custnum') .
":" . $error if $error;
- if ($main::opt_c) {
- $error=$cust_main->collect('invoice_time'=>$time,
- 'batch_card' => $main::opt_i ? 'no' : 'yes',
- );
- warn "Error collecting customer #" . $cust_main->getfield('custnum') .
- ":" . $error if $error;
+ if ($opt_p) {
+ $cust_main->apply_payments;
+ $cust_main->apply_credits;
+ }
- #sleep 1;
+ if ($opt_c) {
+ $error=$cust_main->collect( 'invoice_time' => $time);
+ warn "Error collecting from customer #" . $cust_main->custnum. ":$error"
+ if $error;
+ #sleep 1;
}
}
}
}
@@
-70,13
+76,15
@@
foreach $cust_main (
sub untaint_argv {
foreach $_ ( $[ .. $#ARGV ) { #untaint @ARGV
sub untaint_argv {
foreach $_ ( $[ .. $#ARGV ) { #untaint @ARGV
- $ARGV[$_] =~ /^([\w\-\/]*)$/ || die "Illegal arguement \"$ARGV[$_]\"";
+ #$ARGV[$_] =~ /^([\w\-\/]*)$/ || die "Illegal arguement \"$ARGV[$_]\"";
+ # Date::Parse
+ $ARGV[$_] =~ /^(.*)$/ || die "Illegal arguement \"$ARGV[$_]\"";
$ARGV[$_]=$1;
}
}
sub usage {
$ARGV[$_]=$1;
}
}
sub usage {
- die "Usage:\n\n
bill [ -c [ i ] ] [ -d 'date' ] [ -b ] user
\n";
+ die "Usage:\n\n
freeside-bill [ -c [ -p ] ] [ -d 'date' ] user [ custnum custnum ... ]
\n";
}
=head1 NAME
}
=head1 NAME
@@
-85,22
+93,24
@@
freeside-bill - Command line (crontab, script) interface to customer billing.
=head1 SYNOPSIS
=head1 SYNOPSIS
- freeside-bill [ -c [ -
a ] [ -i
] ] [ -d 'date' ] user [ custnum custnum ... ]
+ freeside-bill [ -c [ -
p ] [ -a
] ] [ -d 'date' ] user [ custnum custnum ... ]
=head1 DESCRIPTION
=head1 DESCRIPTION
+This script is deprecated in 1.4.0. You should use freeside-daily instead.
+
Bills customers. Searches for customers who are due for billing and calls
the bill and collect methods of a cust_main object. See L<FS::cust_main>.
-c: Turn on collecting (you probably want this).
Bills customers. Searches for customers who are due for billing and calls
the bill and collect methods of a cust_main object. See L<FS::cust_main>.
-c: Turn on collecting (you probably want this).
+ -p: Apply unapplied payments and credits before collecting (you probably want
+ this too)
+
-a: Call collect even if there isn't a new invoice (probably a bad idea for
daily use)
-a: Call collect even if there isn't a new invoice (probably a bad idea for
daily use)
- -i: real-time billing (as opposed to batch billing). only relevant
- for credit cards.
-
- -d: Pretent it's 'date'. Date is in any format Date::Parse is happy with,
+ -d: Pretend it's 'date'. Date is in any format Date::Parse is happy with,
but be careful.
user: From the mapsecrets file - see config.html from the base documentation
but be careful.
user: From the mapsecrets file - see config.html from the base documentation
@@
-108,15
+118,11
@@
user: From the mapsecrets file - see config.html from the base documentation
custnum: if one or more customer numbers are specified, only bills those
customers. Otherwise, bills all customers.
custnum: if one or more customer numbers are specified, only bills those
customers. Otherwise, bills all customers.
-=head1 VERSION
-
-$Id: freeside-bill,v 1.1 1999-08-11 20:41:27 ivan Exp $
-
=head1 BUGS
=head1 SEE ALSO
=head1 BUGS
=head1 SEE ALSO
-L<FS::cust_main>, config.html from the base documentation
+L<
freeside-daily>, L<
FS::cust_main>, config.html from the base documentation
=cut
=cut