summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorivan <ivan>1999-08-11 20:41:28 +0000
committerivan <ivan>1999-08-11 20:41:28 +0000
commit0b1f40cc85eee025f01dd14e155cc65837e3f9e5 (patch)
tree0ce2d38cdbf2fb1d31bfdb10befaca4eaccfe162
parenta1e172b1700ef8ea6b9d84f600e26ff53b9e300e (diff)
new bill script,
-rw-r--r--FS/FS/svc_domain.pm4
-rw-r--r--FS/MANIFEST1
-rw-r--r--FS/Makefile.PL3
-rwxr-xr-xFS/bin/freeside-bill122
-rwxr-xr-xbin/bill176
5 files changed, 127 insertions, 179 deletions
diff --git a/FS/FS/svc_domain.pm b/FS/FS/svc_domain.pm
index 57fa47f..73cc3e3 100644
--- a/FS/FS/svc_domain.pm
+++ b/FS/FS/svc_domain.pm
@@ -8,7 +8,7 @@ use Carp;
use Mail::Internet;
use Mail::Header;
use Date::Format;
-use Net::Whois 1.001;
+use Net::Whois 1.0;
use FS::Record qw(fields qsearch qsearchs);
use FS::Conf;
use FS::svc_Common;
@@ -393,7 +393,7 @@ sub submit_internic {
=head1 VERSION
-$Id: svc_domain.pm,v 1.2 1999-08-11 13:12:11 ivan Exp $
+$Id: svc_domain.pm,v 1.3 1999-08-11 20:41:27 ivan Exp $
=head1 BUGS
diff --git a/FS/MANIFEST b/FS/MANIFEST
index 37e19e8..e1b4413 100644
--- a/FS/MANIFEST
+++ b/FS/MANIFEST
@@ -45,3 +45,4 @@ MANIFEST.SKIP
Makefile.PL
test.pl
README
+bin/freeside-bill
diff --git a/FS/Makefile.PL b/FS/Makefile.PL
index 22b412d..ab4c228 100644
--- a/FS/Makefile.PL
+++ b/FS/Makefile.PL
@@ -2,6 +2,7 @@ use ExtUtils::MakeMaker;
# See lib/ExtUtils/MakeMaker.pm for details of how to influence
# the contents of the Makefile that is written.
WriteMakefile(
- 'NAME' => 'FS',
+ 'NAME' => 'FS',
'VERSION_FROM' => 'FS.pm', # finds $VERSION
+ 'EXE_FILES' => [ glob 'bin/*' ],
);
diff --git a/FS/bin/freeside-bill b/FS/bin/freeside-bill
new file mode 100755
index 0000000..8f2c32f
--- /dev/null
+++ b/FS/bin/freeside-bill
@@ -0,0 +1,122 @@
+#!/usr/bin/perl -Tw
+
+use strict;
+use Fcntl qw(:flock);
+use Date::Parse;
+use Getopt::Std;
+use FS::UID qw(adminsuidsetup swapuid);
+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("acid:");
+my $user = shift or die &usage;
+
+adminsuidsetup $user;
+
+my %bill_only = map { $_ => 1 } (
+ @ARGV ? @ARGV : ( map $_->custnum, qsearch('cust_main', {} ) )
+);
+
+#we're at now now (and later).
+my($time)= $main::opt_d ? str2time($main::opt_d) : $^T;
+
+# find packages w/ bill < time && cancel != '', and create corresponding
+# customer objects
+
+my($cust_main,%saw);
+foreach $cust_main (
+ map {
+ if (
+ ( $main::opt_a || ( ( $_->getfield('bill') || 0 ) <= $time ) )
+ && $bill_only{ $_->custnum }
+ && !$saw{ $_->custnum }++
+ ) {
+ qsearchs('cust_main',{'custnum'=> $_->custnum } );
+ } else {
+ ();
+ }
+ } ( qsearch('cust_pkg', { 'cancel' => '' }),
+ qsearch('cust_pkg', { 'cancel' => 0 }),
+ )
+) {
+
+ # and bill them
+
+ print "Billing customer #" . $cust_main->getfield('custnum') . "\n";
+ next;
+
+ my($error);
+
+ $error=$cust_main->bill('time'=>$time);
+ 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;
+
+ #sleep 1;
+
+ }
+
+}
+
+# subroutines
+
+sub untaint_argv {
+ foreach $_ ( $[ .. $#ARGV ) { #untaint @ARGV
+ $ARGV[$_] =~ /^([\w\-\/]*)$/ || die "Illegal arguement \"$ARGV[$_]\"";
+ $ARGV[$_]=$1;
+ }
+}
+
+sub usage {
+ die "Usage:\n\n bill [ -c [ i ] ] [ -d 'date' ] [ -b ] user\n";
+}
+
+=head1 NAME
+
+freeside-bill - Command line (crontab, script) interface to customer billing.
+
+=head1 SYNOPSIS
+
+ freeside-bill [ -c [ -a ] [ -i ] ] [ -d 'date' ] user [ custnum custnum ... ]
+
+=head1 DESCRIPTION
+
+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).
+
+ -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,
+ but be careful.
+
+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.
+
+=head1 VERSION
+
+$Id: freeside-bill,v 1.1 1999-08-11 20:41:27 ivan Exp $
+
+=head1 BUGS
+
+=head1 SEE ALSO
+
+L<FS::cust_main>, config.html from the base documentation
+
+=cut
+
diff --git a/bin/bill b/bin/bill
deleted file mode 100755
index 9553af9..0000000
--- a/bin/bill
+++ /dev/null
@@ -1,176 +0,0 @@
-#!/usr/bin/perl -Tw
-
-use strict;
-use Fcntl qw(:flock);
-use Date::Parse;
-use Getopt::Std;
-use FS::UID qw(adminsuidsetup swapuid);
-use FS::Record qw(qsearch qsearchs);
-use FS::cust_main;
-
-&untaint_argv; #what it sounds like (eww)
-use vars qw($opt_b $opt_c $opt_i $opt_d);
-getopts("bcid:"); #switches
-my $user = shift or die &usage;
-
-adminsuidsetup $user;
-
-#we're at now now (and later).
-my($time)= $main::opt_d ? str2time($main::opt_d) : $^T;
-
-# find packages w/ bill < time && cancel != '', and create corresponding
-# customer objects
-
-my($cust_main,%saw);
-foreach $cust_main (
- map {
- if ( ( $_->getfield('bill') || 0 ) <= $time &&
- !$saw{ $_->getfield('custnum') }++ ) {
- qsearchs('cust_main',{'custnum'=> $_->getfield('custnum') } );
- } else {
- ();
- }
- } ( qsearch('cust_pkg', { 'cancel' => '' }),
- qsearch('cust_pkg', { 'cancel' => 0 }),
- )
-) {
-
- # and bill them
-
- print "Billing customer #" . $cust_main->getfield('custnum') . "\n";
-
- my($error);
-
- $error=$cust_main->bill('time'=>$time);
- 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;
-
- #sleep 1;
-
- }
-
-}
-
-# subroutines
-
-sub untaint_argv {
- foreach $_ ( $[ .. $#ARGV ) { #untaint @ARGV
- $ARGV[$_] =~ /^([\w\-\/]*)$/ || die "Illegal arguement \"$ARGV[$_]\"";
- $ARGV[$_]=$1;
- }
-}
-
-sub usage {
- die "Usage:\n\n bill [ -c [ i ] ] [ -d 'date' ] [ -b ] user\n";
-}
-
-=head1 NAME
-
-bill - Command line (crontab, script) interface to customer billing.
-
-=head1 SYNOPSIS
-
- bill [ -c [ i ] ] [ -d 'date' ] user
-
-=head1 DESCRIPTION
-
-Bills all 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).
-
--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,
- but be careful.
-
-user: From the mapsecrets file - see config.html from the base documentation
-
-=head1 VERSION
-
-$Id: bill,v 1.6 1998-11-15 02:53:00 ivan Exp $
-
-=head1 BUGS
-
-=head1 SEE ALSO
-
-L<FS::cust_main>, config.html from the base documentation
-
-=head1 HISTORY
-
-ivan@voicenet.com sep/oct 96
-
-separated billing and collections, cleaned up code.
-ivan@voicenet.com 96-nov-11
-
-added -d option
-ivan@voicenet.com 96-nov-13
-
-added -v option and started to implement it, added 'd:' to getopts call
- (oops!)
-ivan@voicenet.com 97-jan-2
-
-added more debug messages, moved some searches to fssearch.pl library (for
-speed)
-rewrote "all customer" finder to know about bill dates, for speed.
-ivan@voicenet.com 97-jan-8
-
-thought about it a while, and removed passing of the -d option to collect...?
-ivan@voicenet.com 97-jan-14
-
-make all -v stuff STDERR
-ivan@voicenet.com 97-feb-4
-
-added pkgnum as argument to program from /db/part_pkg, with kludge for the
-"/bin/echo XX" 's already there.
-ivan@voicenet.com 97-feb-23
-
-- general cleanup
-- customers who are suspended can still be billed for the setup fee
-- cust_pkg record is re-read after the package setup fee program is run.
- this way,
- that program can modify the record (for example, to start accounts off
- suspended)
- (best to think four or five times before modifying anything else!)
-ivan@voicenet.com 97-feb-26
-
-don't bill recurring fee if its not time! (was removed)
-ivan@voicenet.com 97-mar-6
-
-added -b option, send batch when done billing.
-ivan@voicenet.com 97-apr-4
-
-insecure dependency on line 179ish below needs to be fixed before bill is
-used setuid
-ivan@voicenet.com 97-jun-2
-
-removed running of setup program (depriciated)
-ivan@voicenet.com 97-jul-21
-
-rewrote for new API, removed option to specify custnums (use FS::Bill
-instead), removed -v option (?)
-ivan@voicenet.com 97-jul-22 - 23 - 25 -28
-(need to add back in email stuff, look in /home/ivan/old/dbin/collect)
-
-s/suidsetup/adminsuidsetup/, s/FS::Search/FS::Record/, added some batch
-exporting stuff (which still needs to be generalized) and removed &idiot
-ivan@sisd.com 98-may-27
-
-$Log: bill,v $
-Revision 1.6 1998-11-15 02:53:00 ivan
-afterthought
-
-Revision 1.4 1998/11/07 08:21:26 ivan
-missing use
-
-=cut
-
-