X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=bin%2Fbill;h=9553af9664d0cfcbdc40d7a77af629a496f90d35;hp=7b1e162c2fe733359d7f017024a61efec66d4739;hb=6cd87c0d3b5280446301c647fa5f1ec5a593fa3f;hpb=e4ad777a6ffa5b2cc28bf26681bcfa56f83df7e9 diff --git a/bin/bill b/bin/bill index 7b1e162c2..9553af966 100755 --- a/bin/bill +++ b/bin/bill @@ -1,89 +1,4 @@ -#!/usr/local/bin/perl -Tw -# -# bill: Bill customer(s) -# -# Usage: bill [ -c [ i ] ] [ -d 'date' ] [ -b ] -# -# Bills all customers. -# -# Adds record to /dbin/cust_bill and /dbin/cust_pay (if payment made - -# CARD & COMP), prints invoice / charges card etc. -# -# -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. -# -# ## n/a ## -b: send batch when done billing -# -# 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.3 1998-11-07 08:19:21 ivan -# -# still need to bless into FS::cust_main (for now) -# - -# setup +#!/usr/bin/perl -Tw use strict; use Fcntl qw(:flock); @@ -91,15 +6,14 @@ use Date::Parse; use Getopt::Std; use FS::UID qw(adminsuidsetup swapuid); use FS::Record qw(qsearch qsearchs); - -my($batchfile)="/var/spool/freeside/batch"; -my($batchlock)="/var/spool/freeside/batch.lock"; - -adminsuidsetup; +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; @@ -116,15 +30,15 @@ foreach $cust_main ( } else { (); } - } qsearch('cust_pkg',{'cancel'=>''}) + } ( qsearch('cust_pkg', { 'cancel' => '' }), + qsearch('cust_pkg', { 'cancel' => 0 }), + ) ) { # and bill them print "Billing customer #" . $cust_main->getfield('custnum') . "\n"; - bless($cust_main,"FS::cust_main"); - my($error); $error=$cust_main->bill('time'=>$time); @@ -144,44 +58,6 @@ foreach $cust_main ( } -#if ($main::opt_b) { -# -# die "Batch still waiting for reply? ($batchlock exists)\n" if -e $batchlock; -# open(BATCHLOCK,"+>>$batchlock") or die "Can't open $batchlock: $!"; -# select(BATCHLOCK); $|=1; select(STDOUT); -# unless ( flock(BATCHLOCK,,LOCK_EX|LOCK_NB) ) { -# seek(BATCHLOCK,0,0); -# my($pid)=; -# chop($pid); -# die "Is a batch running? (pid $pid)\n"; -# } -# seek(BATCHLOCK,0,0); -# print BATCHLOCK $$,"\n"; -# -# ( open(BATCH,">$batchfile") -# and flock(BATCH,LOCK_EX|LOCK_NB) -# ) or die "Can't open $batchfile: $!"; -# -# my($cust_pay_batch); -# foreach $cust_pay_batch (qsearch('cust_pay_batch',{})) { -# print BATCH join(':', -# $_->getfield('cardnum'), -# $_->getfield('exp'), -# $_->getfield('amount'), -# $_->getfield('payname') -# || $_->getfield('first'). ' '. $_->getfield('last'), -# "Description", -# $_->getfield('zip'), -# ),"\n"; -# } -# -# flock(BATCH,LOCK_UN); -# close BATCH; -# -# flock(BATCHLOCK,LOCK_UN); -# close BATCHLOCK; -#} - # subroutines sub untaint_argv { @@ -191,3 +67,110 @@ sub untaint_argv { } } +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. + +-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, 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 + +