new bill script,
authorivan <ivan>
Wed, 11 Aug 1999 20:41:28 +0000 (20:41 +0000)
committerivan <ivan>
Wed, 11 Aug 1999 20:41:28 +0000 (20:41 +0000)
FS/FS/svc_domain.pm
FS/MANIFEST
FS/Makefile.PL
FS/bin/freeside-bill [new file with mode: 0755]
bin/bill [deleted file]

index 57fa47f..73cc3e3 100644 (file)
@@ -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
 
index 37e19e8..e1b4413 100644 (file)
@@ -45,3 +45,4 @@ MANIFEST.SKIP
 Makefile.PL
 test.pl
 README
+bin/freeside-bill
index 22b412d..ab4c228 100644 (file)
@@ -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 (executable)
index 0000000..8f2c32f
--- /dev/null
@@ -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 (executable)
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
-
-