summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorivan <ivan>2002-02-10 19:58:43 +0000
committerivan <ivan>2002-02-10 19:58:43 +0000
commit7e3eb82f87c371785544b706b7347c7edde2b593 (patch)
tree65f3bdc7b55c3c377e21d45145f2eafad5bc2dfb
parentddb53fcc9fc80561354b97e4e7803004990138d0 (diff)
update billing documentation for the new world of invoice events
added freeside-daily replacing freeside-bill for the new world of invoice events
-rw-r--r--FS/MANIFEST1
-rwxr-xr-xFS/bin/freeside-bill8
-rwxr-xr-xFS/bin/freeside-daily90
-rw-r--r--httemplate/docs/billing.html56
-rw-r--r--httemplate/docs/upgrade8.html1
-rwxr-xr-xhttemplate/edit/process/part_bill_event.cgi2
6 files changed, 115 insertions, 43 deletions
diff --git a/FS/MANIFEST b/FS/MANIFEST
index 0a9205c7f..85c09b465 100644
--- a/FS/MANIFEST
+++ b/FS/MANIFEST
@@ -4,6 +4,7 @@ MANIFEST.SKIP
Makefile.PL
README
bin/freeside-bill
+bin/freeside-daily
bin/freeside-email
bin/freeside-queued
bin/freeside-apply-credits
diff --git a/FS/bin/freeside-bill b/FS/bin/freeside-bill
index 6ef344a50..49ad4a768 100755
--- a/FS/bin/freeside-bill
+++ b/FS/bin/freeside-bill
@@ -97,6 +97,8 @@ freeside-bill - Command line (crontab, script) interface to customer billing.
=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>.
@@ -116,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.
-=head1 VERSION
-
-$Id: freeside-bill,v 1.12 2002-02-10 01:48:00 ivan Exp $
-
=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
diff --git a/FS/bin/freeside-daily b/FS/bin/freeside-daily
new file mode 100755
index 000000000..8d839cb21
--- /dev/null
+++ b/FS/bin/freeside-daily
@@ -0,0 +1,90 @@
+#!/usr/bin/perl -w
+
+use strict;
+use Fcntl qw(:flock);
+use Date::Parse;
+use Getopt::Std;
+use FS::UID qw(adminsuidsetup);
+use FS::Record qw(qsearch qsearchs);
+use FS::cust_main;
+
+&untaint_argv; #what it sounds like (eww)
+use vars qw($opt_d);
+getopts("d:");
+my $user = shift or die &usage;
+
+adminsuidsetup $user;
+
+my @cust_main = @ARGV
+ ? map { qsearchs('cust_main', { custnum => $_ } ) } @ARGV
+ : qsearch('cust_main', {} )
+;
+
+#we're at now now (and later).
+my($time)= $opt_d ? str2time($opt_d) : $^T;
+
+my($cust_main,%saw);
+foreach $cust_main ( @cust_main ) {
+
+ my $error;
+
+ $error = $cust_main->bill( 'time' => $time );
+ warn "Error billing, custnum ". $cust_main->custnum. ": $error" if $error;
+
+ $cust_main->apply_payments;
+ $cust_main->apply_credits;
+
+ $error=$cust_main->collect( 'invoice_time' => $time );
+ warn "Error collecting, custnum". $cust_main->custnum. ": $error" if $error;
+
+}
+
+# subroutines
+
+sub untaint_argv {
+ foreach $_ ( $[ .. $#ARGV ) { #untaint @ARGV
+ #$ARGV[$_] =~ /^([\w\-\/]*)$/ || die "Illegal arguement \"$ARGV[$_]\"";
+ # Date::Parse
+ $ARGV[$_] =~ /^(.*)$/ || die "Illegal arguement \"$ARGV[$_]\"";
+ $ARGV[$_]=$1;
+ }
+}
+
+sub usage {
+ die "Usage:\n\n freeside-daily [ -d 'date' ] user [ custnum custnum ... ]\n";
+}
+
+=head1 NAME
+
+freeside-daily - Run daily billing and invoice collection events.
+
+=head1 SYNOPSIS
+
+ freeside-daily [ -d 'date' ] user [ custnum custnum ... ]
+
+=head1 DESCRIPTION
+
+Bills customers and runs invoice collection events. Should be run from
+crontab daily.
+
+This script replaces freeside-bill from 1.3.1.
+
+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>.
+
+ -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
+
+custnum: if one or more customer numbers are specified, only bills those
+customers. Otherwise, bills all customers.
+
+=head1 BUGS
+
+=head1 SEE ALSO
+
+L<FS::cust_main>, config.html from the base documentation
+
+=cut
+
diff --git a/httemplate/docs/billing.html b/httemplate/docs/billing.html
index dcb90208a..de59fc60a 100644
--- a/httemplate/docs/billing.html
+++ b/httemplate/docs/billing.html
@@ -4,36 +4,26 @@
<body>
<h1>Billing</h1>
<ul>
- <li>To enable billing, you <b>must</b> create an <a href="config.html#invoice_template">invoice_template</a> configuration file. An example file is available in the <i>conf/</i> directory of the distribution. You also need to create an <a href="config.html#lpr">lpr</a> configuration file to enable postal invoices.
- <ul>
- <li>Optional: Invoice template customization
- <ul>
- <li>See the <a href="http://search.cpan.org/doc/MJD/Text-Template-1.42/Template.pm">Text::Template</a> documentation for details on the substitution language.
- <li>You <b>must</b> call the invoice_lines() function at least once - pass it a number of lines, and it returns a list of array references, each of two elements: a service description column, and a price column.
- <li>In addition, the following variables are available:
- <ul>
- <li>$invnum - invoice number
- <li>$date - as a UNIX timestamp (see <a href="http://search.cpan.org/doc/GBARR/TimeDate-1.09/lib/Date/Format.pm">Date::Format</a> for conversion functions).
- <li>$page - current page
- <li>$total_pages - total pages
- <li>@address - A six-element array containing the customer name, company, and address.
- <li>$overdue - true if this invoice is overdue
- </ul>
- </ul>
- </ul>
<li>You can bill individual customers by clicking on the <i>Bill now</i> link on the main customer view.
- <li> The <b>freeside-bill</b> script can be run daily to bill all customers. (link to manpage!) Usage:<pre>freeside-bill [ -c [ -p ] [ -a ] [ -i ] ] [ -d <i>date</i> ] <i>user</i></pre>
+ <li>The <a href="man/bin/freeside-daily.html"><b>freeside-daily</b></a> script should be run daily to bill customers and run invoice collection events.
+ <li>Real-time credit card processing: Install the <a href="http://search.cpan.org/search?mode=module&query=Business%3A%3AOnlinePayment">Business::OnlinePayment</a> module for your processor. Configure the <a href="../config/config-view.cgi#business-onlinepayment">business-onlinepayment</a> configuration option. Disable the default <b>Batch card</b> <a href="../browse/part_bill_event.cgi">invoice event</a> and add one for Business::OnlinePayment.
+ <li>Optional: Invoice template customization
<ul>
- <li>-c: Turn on collecting (you probably want this).
- <li>-p: Apply unapplied payments and credits before collecting (you probably want this too)
- <li>-a: Call collect even if there isn't a new invoice (probably a bad idea for daily use)
- <li>-i: Real-time billing (as opposed to bacth billing). Only relevant for credit cards.
- <li>-d: Pretend it is <i>date</i> (parsed by <a href="http://search.cpan.org/doc/GBARR/TimeDate-1.09/lib/Date/Parse.pm">Date::Parse</a>)
- <li>user: as setup with freeside-adduser
+ <li>See the <a href="http://search.cpan.org/doc/MJD/Text-Template-1.42/Template.pm">Text::Template</a> documentation for details on the substitution language.
+ <li>You <b>must</b> call the invoice_lines() function at least once - pass it a number of lines, and it returns a list of array references, each of two elements: a service description column, and a price column.
+ <li>In addition, the following variables are available:
+ <ul>
+ <li>$invnum - invoice number
+ <li>$date - as a UNIX timestamp (see <a href="http://search.cpan.org/doc/GBARR/TimeDate-1.09/lib/Date/Format.pm">Date::Format</a> for conversion functions).
+ <li>$page - current page
+ <li>$total_pages - total pages
+ <li>@address - A six-element array containing the customer name, company, and address.
+ <li>$overdue - true if this invoice is overdue
+ </ul>
</ul>
- <br><br>Batch credit card processing
+ <li>Batch credit card processing
<ul>
- <li>After this script is run, a credit card batch will be in the <a href="schema.html#cust_pay_batch">cust_pay_batch</a> table. Export this table to your credit card batching.
+ <li>After <a href="man/bin/freeside-daily.html"><b>freeside-daily</b></a> is run, a credit card batch will be in the <a href="schema.html#cust_pay_batch">cust_pay_batch</a> table. Export this table to your credit card batching.
<li>When your batch completes, erase the cust_pay_batch records in that batch and add any necessary paymants to the <a href="schema.html#cust_pay">cust_pay</a> table. Example code to add payments is:
<pre>use FS::cust_pay;
@@ -55,16 +45,8 @@ if ( $error ) {
# end loop
</pre>
-All fields except paybatch are contained in the cust_pay_batch table. You can use paybatch field to track particular batches and/or particular transactions within a batch.<br><br>
- <li>The <b>freeside-print-batch</b> script can print or email pending credit card batches for manual entry. Usage: freeside-print-batch [-v] [-p] [-e] [-a] [-d] <i>user</i>
- <ul>
- <li>-v: Verbose - Prints records to STDOUT.
- <li>-p: Print to printer lpr as found in the conf directory.
- <li>-e: Email output to user found in the Conf email file.
- <li>-a: Automatically pays all records in cust_pay_batch. Use -d with this option usually.
- <li>-d: Delete - Pays account and deletes record from cust_pay_batch.
- </ul>
- </ul>
- <li>The <b>freeside-overdue</b> script can list, add postal invoicing, suspend or cancel overdue and/or expired accounts (link to manpage!).
+All fields except paybatch are contained in the cust_pay_batch table. You can use paybatch field to track particular batches and/or particular transactions within a batch.
+ </ul>
+ <li>The <a href="man/bin/freeside-print-batch.html"><b>freeside-print-batch</b></a> script can print or email pending credit card batches for manual entry.
</ul>
</body>
diff --git a/httemplate/docs/upgrade8.html b/httemplate/docs/upgrade8.html
index 2c7008a6c..61d956ce8 100644
--- a/httemplate/docs/upgrade8.html
+++ b/httemplate/docs/upgrade8.html
@@ -303,5 +303,6 @@ ALTER TABLE cust_refund DROP COLUMN crednum;
(ownded by the freeside user).
<li>freeside-queued was installed with the Perl modules. Start it now and ensure that is run upon system startup.
<li>Set appropriate <a href="../browse/part_bill_event.cgi">invoice events</a> for your site. At the very least, you'll want to set some invoice events "<i>After 0 days</i>": a <i>BILL</i> invoice event to print invoices, a <i>CARD</i> invoice event to batch or run cards real-time, and a <i>COMP</i> invoice event to "pay" complimentary customers. If you were using the <i>-i</i> option to <a href="man/bin/freeside-bill.html">freeside-bill</a> it should be removed.
+ <li>Use <a href="man/bin/freeside-daily.html">freeside-daily</a> instead of <a href="man/bin/freeside-bill.html">freeside-bill</a>.
</ul>
</body>
diff --git a/httemplate/edit/process/part_bill_event.cgi b/httemplate/edit/process/part_bill_event.cgi
index 1716c71b9..4049ade80 100755
--- a/httemplate/edit/process/part_bill_event.cgi
+++ b/httemplate/edit/process/part_bill_event.cgi
@@ -12,7 +12,7 @@ if ( ! $cgi->param('plan_weight_eventcode') ) {
$error = "Must select an action";
} else {
- $cgi->param('plan_weight_eventcode') =~ /^(\w+):(\d+):(.*)$/
+ $cgi->param('plan_weight_eventcode') =~ /^([\w\-]+):(\d+):(.*)$/
or die "illegal plan_weight_eventcode:".
$cgi->param('plan_weight_eventcode');
$cgi->param('plan', $1);