diff options
| author | ivan <ivan> | 2002-02-10 19:58:43 +0000 | 
|---|---|---|
| committer | ivan <ivan> | 2002-02-10 19:58:43 +0000 | 
| commit | 7e3eb82f87c371785544b706b7347c7edde2b593 (patch) | |
| tree | 65f3bdc7b55c3c377e21d45145f2eafad5bc2dfb | |
| parent | ddb53fcc9fc80561354b97e4e7803004990138d0 (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/MANIFEST | 1 | ||||
| -rwxr-xr-x | FS/bin/freeside-bill | 8 | ||||
| -rwxr-xr-x | FS/bin/freeside-daily | 90 | ||||
| -rw-r--r-- | httemplate/docs/billing.html | 56 | ||||
| -rw-r--r-- | httemplate/docs/upgrade8.html | 1 | ||||
| -rwxr-xr-x | httemplate/edit/process/part_bill_event.cgi | 2 | 
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); | 
