Difference between revisions of "Freeside:3:Documentation:Developer/FS/cust bill"
From Freeside
m (Edit via perl MediaWiki framework (1.13)) |
m (Edit via perl MediaWiki framework (1.13)) |
||
(7 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
+ | ==NAME== | ||
+ | FS::cust_bill - Object methods for cust_bill records | ||
+ | ==SYNOPSIS== | ||
+ | <code> | ||
+ | use FS::cust_bill; | ||
+ | |||
+ | $record = new FS::cust_bill \%hash; | ||
+ | $record = new FS::cust_bill { 'column' => 'value' }; | ||
+ | |||
+ | $error = $record->insert; | ||
+ | |||
+ | $error = $new_record->replace($old_record); | ||
+ | |||
+ | $error = $record->delete; | ||
+ | |||
+ | $error = $record->check; | ||
+ | |||
+ | ( $total_previous_balance, @previous_cust_bill ) = $record->previous; | ||
+ | |||
+ | @cust_bill_pkg_objects = $cust_bill->cust_bill_pkg; | ||
+ | |||
+ | ( $total_previous_credits, @previous_cust_credit ) = $record->cust_credit; | ||
+ | |||
+ | @cust_pay_objects = $cust_bill->cust_pay; | ||
+ | |||
+ | $tax_amount = $record->tax; | ||
+ | |||
+ | @lines = $cust_bill->print_text; | ||
+ | @lines = $cust_bill->print_text('time' => $time); | ||
+ | </code> | ||
+ | ==DESCRIPTION== | ||
+ | An FS::cust_bill object represents an invoice; a declaration that a customer owes you money. The specific charges are itemized as '''cust_bill_pkg''' records (see [[Freeside:3:Documentation:Developer/FS/cust bill pkg|FS::cust_bill_pkg]]). FS::cust_bill inherits from FS::Record. The following fields are currently supported: | ||
+ | |||
+ | Regular fields | ||
+ | |||
+ | ; invnum - primary key (assigned automatically for new invoices); custnum - customer (see [[Freeside:3:Documentation:Developer/FS/cust main|FS::cust_main]]); _date - specified as a UNIX timestamp; see [[perlfunc#time|"time" in perlfunc]]. Also see [[Freeside:3:Documentation:Developer/Time/Local|Time::Local]] and [[Freeside:3:Documentation:Developer/Date/Parse|Date::Parse]] for conversion functions.; charged - amount of this invoice; invoice_terms - optional terms override for this specific invoice | ||
+ | Deprecated fields | ||
+ | |||
+ | ; billing_balance - the customer's balance immediately before generating this invoice. DEPRECATED. Use the [[Freeside:3:Documentation:Developer/FS/cust main#balance date|"balance date" in FS::cust main|FS::cust_main#balance_date|"balance_date" in FS::cust_main]] method to determine the customer's balance at a specific time.; previous_balance - the customer's balance immediately after generating the invoice before this one. DEPRECATED.; printed - formerly used to track the number of times an invoice had been printed; no longer used. | ||
+ | Specific use cases | ||
+ | |||
+ | ; closed - books closed flag, empty or `Y'; statementnum - invoice aggregation (see [[Freeside:3:Documentation:Developer/FS/cust statement|FS::cust_statement]]); agent_invid - legacy invoice number; promised_date - customer promised payment date, for collection | ||
+ | ==METHODS== | ||
+ | ; new HASHREF | ||
+ | :Creates a new invoice. To add the invoice to the database, see [[#insert|"insert"]]. Invoices are normally created by calling the bill method of a customer object (see [[Freeside:3:Documentation:Developer/FS/cust main|FS::cust_main]]). | ||
+ | ; insert | ||
+ | :Adds this invoice to the database ("Posts" the invoice). If there is an error, returns the error, otherwise returns false. | ||
+ | ; void | ||
+ | :Voids this invoice: deletes the invoice and adds a record of the voided invoice to the FS::cust_bill_void table (and related tables starting from FS::cust_bill_pkg_void). | ||
+ | ; delete | ||
+ | :This method now works but you probably shouldn't use it. Instead, apply a credit against the invoice, or use the new void method. | ||
+ | |||
+ | :Using this method to delete invoices outright is really, really bad. There would be no record you ever posted this invoice, and there are no check to make sure charged = 0 or that there are no associated cust_bill_pkg records. | ||
+ | |||
+ | :Really, don't use it. | ||
+ | ; replace [ OLD_RECORD ] | ||
+ | :You can, but probably shouldn't modify invoices... | ||
+ | |||
+ | :Replaces the OLD_RECORD with this one in the database, or, if OLD_RECORD is not supplied, replaces this record. If there is an error, returns the error, otherwise returns false. | ||
+ | ; add_cc_surcharge | ||
+ | :Giant hack | ||
+ | ; check | ||
+ | :Checks all fields to make sure this is a valid invoice. If there is an error, returns the error, otherwise returns false. Called by the insert and replace methods. | ||
+ | ; display_invnum | ||
+ | :Returns the displayed invoice number for this invoice: agent_invid if cust_bill-default_agent_invid is set and it has a value, invnum otherwise. | ||
+ | ; previous_bill | ||
+ | :Returns the customer's last invoice before this one. | ||
+ | ; previous | ||
+ | :Returns a list consisting of the total previous balance for this customer, followed by the previous outstanding invoices (as FS::cust_bill objects also). | ||
+ | ; enable_previous | ||
+ | :Whether to show the 'Previous Charges' section when printing this invoice. The negation of the 'disable_previous_balance' config setting. | ||
+ | ; cust_bill_pkg | ||
+ | :Returns the line items (see [[Freeside:3:Documentation:Developer/FS/cust bill pkg|FS::cust_bill_pkg]]) for this invoice. | ||
+ | ; cust_bill_pkg_pkgnum PKGNUM | ||
+ | :Returns the line items (see [[Freeside:3:Documentation:Developer/FS/cust bill pkg|FS::cust_bill_pkg]]) for this invoice and specified pkgnum. | ||
+ | ; cust_pkg | ||
+ | :Returns the packages (see [[Freeside:3:Documentation:Developer/FS/cust pkg|FS::cust_pkg]]) corresponding to the line items for this invoice. | ||
+ | ; no_auto | ||
+ | :Returns true if any of the packages (or their definitions) corresponding to the line items for this invoice have the no_auto flag set. | ||
+ | ; open_cust_bill_pkg | ||
+ | :Returns the open line items for this invoice. | ||
+ | |||
+ | :Note that cust_bill_pkg with both setup and recur fees are returned as two separate line items, each with only one fee. | ||
+ | ; cust_bill_event | ||
+ | :Returns the completed invoice events (deprecated, old-style events - see [[Freeside:3:Documentation:Developer/FS/cust bill event|FS::cust_bill_event]]) for this invoice. | ||
+ | ; num_cust_bill_event | ||
+ | :Returns the number of completed invoice events (deprecated, old-style events - see [[Freeside:3:Documentation:Developer/FS/cust bill event|FS::cust_bill_event]]) for this invoice. | ||
+ | ; cust_event | ||
+ | :Returns the new-style customer billing events (see [[Freeside:3:Documentation:Developer/FS/cust event|FS::cust_event]]) for this invoice. | ||
+ | ; num_cust_event | ||
+ | :Returns the number of new-style customer billing events (see [[Freeside:3:Documentation:Developer/FS/cust event|FS::cust_event]]) for this invoice. | ||
+ | ; cust_main | ||
+ | :Returns the customer (see [[Freeside:3:Documentation:Developer/FS/cust main|FS::cust_main]]) for this invoice. | ||
+ | ; cust_suspend_if_balance_over AMOUNT | ||
+ | :Suspends the customer associated with this invoice if the total amount owed on this invoice and all older invoices is greater than the specified amount. | ||
+ | |||
+ | :Returns a list: an empty list on success or a list of errors. | ||
+ | ; cust_credit | ||
+ | :Depreciated. See the cust_credited method. | ||
+ | <code> | ||
+ | #Returns a list consisting of the total previous credited (see | ||
+ | #L<FS::cust_credit>) and unapplied for this customer, followed by the previous | ||
+ | #outstanding credits (FS::cust_credit objects). | ||
+ | </code> | ||
+ | ; cust_pay | ||
+ | :Depreciated. See the cust_bill_pay method. | ||
+ | |||
+ | :#Returns all payments (see [[Freeside:3:Documentation:Developer/FS/cust pay|FS::cust_pay]]) for this invoice. | ||
+ | ; cust_bill_pay | ||
+ | :Returns all payment applications (see [[Freeside:3:Documentation:Developer/FS/cust bill pay|FS::cust_bill_pay]]) for this invoice. | ||
+ | ; cust_credited; cust_credit_bill | ||
+ | :Returns all applied credits (see [[Freeside:3:Documentation:Developer/FS/cust credit bill|FS::cust_credit_bill]]) for this invoice. | ||
+ | ; cust_bill_pay_pkg PKGNUM | ||
+ | :Returns all payment applications (see [[Freeside:3:Documentation:Developer/FS/cust bill pay|FS::cust_bill_pay]]) for this invoice applied against the matching pkgnum. | ||
+ | ; cust_credit_bill_pkg PKGNUM | ||
+ | :Returns all credit applications (see [[Freeside:3:Documentation:Developer/FS/cust credit bill|FS::cust_credit_bill]]) for this invoice applied against the matching pkgnum. | ||
+ | ; cust_bill_batch | ||
+ | :Returns all invoice batch records ([[Freeside:3:Documentation:Developer/FS/cust bill batch|FS::cust_bill_batch]]) for this invoice. | ||
+ | ; discount_plans | ||
+ | :Returns all discount plans ([[Freeside:3:Documentation:Developer/FS/discount plan|FS::discount_plan]]) for this invoice, as a hash keyed by term length. | ||
+ | ; tax | ||
+ | :Returns the tax amount (see [[Freeside:3:Documentation:Developer/FS/cust bill pkg|FS::cust_bill_pkg]]) for this invoice. | ||
+ | ; owed | ||
+ | :Returns the amount owed (still outstanding) on this invoice, which is charged minus all payment applications (see [[Freeside:3:Documentation:Developer/FS/cust bill pay|FS::cust_bill_pay]]) and credit applications (see [[Freeside:3:Documentation:Developer/FS/cust credit bill|FS::cust_credit_bill]]). | ||
+ | ; hide | ||
+ | :Returns true if this invoice should be hidden. See the selfservice-hide_invoices-taxclass configuraiton setting. | ||
+ | ; apply_payments_and_credits [ OPTION => VALUE ... ] | ||
+ | :Applies unapplied payments and credits to this invoice. Payments with the no_auto_apply flag set will not be applied. | ||
+ | |||
+ | :A hash of optional arguments may be passed. Currently "manual" is supported. If true, a payment receipt is sent instead of a statement when 'payment_receipt_email' configuration option is set. | ||
+ | |||
+ | :If there is an error, returns the error, otherwise returns false. | ||
+ | ; send HASHREF | ||
+ | :Sends this invoice to the destinations configured for this customer: sends email, prints and/or faxes. See [[Freeside:3:Documentation:Developer/FS/cust main invoice|FS::cust_main_invoice]]. | ||
+ | |||
+ | :Options can be passed as a hashref. Positional parameters are no longer allowed. | ||
+ | |||
+ | :''template'': a suffix for alternate invoices | ||
+ | |||
+ | :''agentnum'': obsolete, now does nothing. | ||
+ | |||
+ | :''from'' overrides the default email invoice From: address. | ||
+ | |||
+ | :''amount'': obsolete, does nothing | ||
+ | |||
+ | :''notice_name'' overrides "Invoice" as the name of the sent document (templates from 10/2009 or newer required). | ||
+ | |||
+ | :''lpr'' overrides the system 'lpr' option as the command to print a document from standard input. | ||
+ | ; lpr_data HASHREF | ||
+ | :Returns the postscript or plaintext for this invoice as an arrayref. | ||
+ | |||
+ | :Options must be passed as a hashref. Positional parameters are no longer allowed. | ||
+ | |||
+ | :''template'', if specified, is the name of a suffix for alternate invoices. | ||
+ | |||
+ | :''notice_name'', if specified, overrides "Invoice" as the name of the sent document (templates from 10/2009 or newer required) | ||
+ | ; print HASHREF | ||
+ | :Prints this invoice. | ||
+ | |||
+ | :Options must be passed as a hashref. | ||
+ | |||
+ | :''template'', if specified, is the name of a suffix for alternate invoices. | ||
+ | |||
+ | :''notice_name'', if specified, overrides "Invoice" as the name of the sent document (templates from 10/2009 or newer required) | ||
+ | ; fax_invoice HASHREF | ||
+ | :Faxes this invoice. | ||
+ | |||
+ | :Options must be passed as a hashref. | ||
+ | |||
+ | :''template'', if specified, is the name of a suffix for alternate invoices. | ||
+ | |||
+ | :''notice_name'', if specified, overrides "Invoice" as the name of the sent document (templates from 10/2009 or newer required) | ||
+ | ; batch_invoice [ HASHREF ] | ||
+ | :Place this invoice into the open batch (see <tt>FS::bill_batch</tt>). If there isn't an open batch, one will be created. | ||
+ | |||
+ | :HASHREF may contain any options to be passed to <tt>print_pdf</tt>. | ||
+ | ; get_open_batch | ||
+ | :Returns the currently open batch as an FS::bill_batch object, creating a new one if necessary. (A per-agent batch if invoice_print_pdf-spoolagent is enabled) | ||
+ | ; ftp_invoice [ TEMPLATENAME ] | ||
+ | :Sends this invoice data via FTP. | ||
+ | |||
+ | :TEMPLATENAME is unused? | ||
+ | ; spool_invoice [ TEMPLATENAME ] | ||
+ | :Spools this invoice data (see [[Freeside:3:Documentation:Developer/FS/spool csv|FS::spool_csv]]) | ||
+ | |||
+ | :TEMPLATENAME is unused? | ||
+ | ; send_csv OPTION => VALUE, ... | ||
+ | :Sends invoice as a CSV data-file to a remote host with the specified protocol. | ||
+ | |||
+ | :Options are: | ||
+ | |||
+ | :protocol - currently only "ftp" server username password dir | ||
+ | |||
+ | :The file will be named "N-YYYYMMDDHHMMSS.csv" where N is the invoice number and YYMMDDHHMMSS is a timestamp. | ||
+ | |||
+ | :See [[#print_csv|"print_csv"]] for a description of the output format. | ||
+ | ; spool_csv | ||
+ | :Spools CSV invoice data. | ||
+ | |||
+ | :Options are: | ||
+ | :; format - any of FS::Misc::::Invoicing::spool_formats:; dest - if set (to POST, EMAIL or FAX), only sends spools invoices if the customer has the corresponding invoice destinations set (see [[Freeside:3:Documentation:Developer/FS/cust main invoice|FS::cust_main_invoice]]).:; agent_spools - if set to a true value, will spool to per-agent files rather than a single global file:; upload_targetnum - if set to a target (see [[Freeside:3:Documentation:Developer/FS/upload target|FS::upload_target]]), will append to that spool. [[Freeside:3:Documentation:Developer/FS/Cron/upload|FS::Cron::upload]] will then send the spool file to that destination.:; balanceover - if set, only spools the invoice if the total amount owed on this invoice and all older invoices is greater than the specified amount.:; time - the "current time". Controls the printing of past due messages in the ICS format.; print_csv OPTION => VALUE, ... | ||
+ | :Returns CSV data for this invoice. | ||
+ | |||
+ | :Options are: | ||
+ | |||
+ | :format - 'default', 'billco', 'oneline', 'bridgestone' | ||
+ | |||
+ | :Returns a list consisting of two scalars. The first is a single line of CSV header information for this invoice. The second is one or more lines of CSV detail information for this invoice. | ||
+ | |||
+ | :If ''format'' is not specified or "default", the fields of the CSV file are as follows: | ||
+ | |||
+ | :record_type, invnum, custnum, _date, charged, first, last, company, address1, address2, city, state, zip, country, pkg, setup, recur, sdate, edate | ||
+ | :; record type - '''record_type''' is either <tt>cust_bill</tt> or <tt>cust_bill_pkg</tt> | ||
+ | ::'''record_type''' is <tt>cust_bill</tt> for the initial header line only. The last five fields ('''pkg''' through '''edate''') are irrelevant, and all other fields are filled in. | ||
+ | |||
+ | ::'''record_type''' is <tt>cust_bill_pkg</tt> for detail lines. Only the first two fields ('''record_type''' and '''invnum''') and the last five fields ('''pkg''' through '''edate''') are filled in. | ||
+ | :; invnum - invoice number:; custnum - customer number:; _date - invoice date:; charged - total invoice amount:; first - customer first name:; last - customer first name:; company - company name:; address1 - address line 1:; address2 - address line 1:; city:; state:; zip:; country:; pkg - line item description:; setup - line item setup fee (one or both of '''setup''' and '''recur''' will be defined):; recur - line item recurring fee (one or both of '''setup''' and '''recur''' will be defined):; sdate - start date for recurring fee:; edate - end date for recurring fee | ||
+ | :If ''format'' is "billco", the fields of the header CSV file are as follows: | ||
+ | <code> | ||
+ | +-------------------------------------------------------------------+ | ||
+ | | FORMAT HEADER FILE | | ||
+ | |-------------------------------------------------------------------| | ||
+ | | Field | Description | Name | Type | Width | | ||
+ | | 1 | N/A-Leave Empty | RC | CHAR | 2 | | ||
+ | | 2 | N/A-Leave Empty | CUSTID | CHAR | 15 | | ||
+ | | 3 | Transaction Account No | TRACCTNUM | CHAR | 15 | | ||
+ | | 4 | Transaction Invoice No | TRINVOICE | CHAR | 15 | | ||
+ | | 5 | Transaction Zip Code | TRZIP | CHAR | 5 | | ||
+ | | 6 | Transaction Company Bill To | TRCOMPANY | CHAR | 30 | | ||
+ | | 7 | Transaction Contact Bill To | TRNAME | CHAR | 30 | | ||
+ | | 8 | Additional Address Unit Info | TRADDR1 | CHAR | 30 | | ||
+ | | 9 | Bill To Street Address | TRADDR2 | CHAR | 30 | | ||
+ | | 10 | Ancillary Billing Information | TRADDR3 | CHAR | 30 | | ||
+ | | 11 | Transaction City Bill To | TRCITY | CHAR | 20 | | ||
+ | | 12 | Transaction State Bill To | TRSTATE | CHAR | 2 | | ||
+ | | 13 | Bill Cycle Close Date | CLOSEDATE | CHAR | 10 | | ||
+ | | 14 | Bill Due Date | DUEDATE | CHAR | 10 | | ||
+ | | 15 | Previous Balance | BALFWD | NUM* | 9 | | ||
+ | | 16 | Pmt/CR Applied | CREDAPPLY | NUM* | 9 | | ||
+ | | 17 | Total Current Charges | CURRENTCHG | NUM* | 9 | | ||
+ | | 18 | Total Amt Due | TOTALDUE | NUM* | 9 | | ||
+ | | 19 | Total Amt Due | AMTDUE | NUM* | 9 | | ||
+ | | 20 | 30 Day Aging | AMT30 | NUM* | 9 | | ||
+ | | 21 | 60 Day Aging | AMT60 | NUM* | 9 | | ||
+ | | 22 | 90 Day Aging | AMT90 | NUM* | 9 | | ||
+ | | 23 | Y/N | AGESWITCH | CHAR | 1 | | ||
+ | | 24 | Remittance automation | SCANLINE | CHAR | 100 | | ||
+ | | 25 | Total Taxes & Fees | TAXTOT | NUM* | 9 | | ||
+ | | 26 | Customer Reference Number | CUSTREF | CHAR | 15 | | ||
+ | | 27 | Federal Tax*** | FEDTAX | NUM* | 9 | | ||
+ | | 28 | State Tax*** | STATETAX | NUM* | 9 | | ||
+ | | 29 | Other Taxes & Fees*** | OTHERTAX | NUM* | 9 | | ||
+ | +-------+-------------------------------+------------+------+-------+ | ||
+ | </code> | ||
+ | |||
+ | :If ''format'' is "billco", the fields of the detail CSV file are as follows: | ||
+ | <code> | ||
+ | FORMAT FOR DETAIL FILE | ||
+ | | | | | | ||
+ | Field | Description | Name | Type | Width | ||
+ | 1 | N/A-Leave Empty | RC | CHAR | 2 | ||
+ | 2 | N/A-Leave Empty | CUSTID | CHAR | 15 | ||
+ | 3 | Account Number | TRACCTNUM | CHAR | 15 | ||
+ | 4 | Invoice Number | TRINVOICE | CHAR | 15 | ||
+ | 5 | Line Sequence (sort order) | LINESEQ | NUM | 6 | ||
+ | 6 | Transaction Detail | DETAILS | CHAR | 100 | ||
+ | 7 | Amount | AMT | NUM* | 9 | ||
+ | 8 | Line Format Control** | LNCTRL | CHAR | 2 | ||
+ | 9 | Grouping Code | GROUP | CHAR | 2 | ||
+ | 10 | User Defined | ACCT CODE | CHAR | 15 | ||
+ | </code> | ||
+ | |||
+ | :If format is 'oneline', there is no detail file. Each invoice has a header line only, with the fields: | ||
+ | |||
+ | :Agent number, agent name, customer number, first name, last name, address line 1, address line 2, city, state, zip, invoice date, invoice number, amount charged, amount due, previous balance, due date. | ||
+ | |||
+ | :and then, for each line item, three columns containing the package number, description, and amount. | ||
+ | |||
+ | :If format is 'bridgestone', there is no detail file. Each invoice has a header line with the following fields in a fixed-width format: | ||
+ | |||
+ | :Customer number (in display format), date, name (first last), company, address 1, address 2, city, state, zip. | ||
+ | |||
+ | :This is a mailing list format, and has no per-invoice fields. To avoid sending redundant notices, the spooling event should have a "once" or "once_percust_every" condition. | ||
+ | ; comp | ||
+ | :Pays this invoice with a compliemntary payment. If there is an error, returns the error, otherwise returns false. | ||
+ | ; realtime_card | ||
+ | :Attempts to pay this invoice with a credit card payment via a Business::OnlinePayment realtime gateway. See http://search.cpan.org/search?mode=module&query=Business%3A%3AOnlinePayment for supported processors. | ||
+ | ; realtime_ach | ||
+ | :Attempts to pay this invoice with an electronic check (ACH) payment via a Business::OnlinePayment realtime gateway. See http://search.cpan.org/search?mode=module&query=Business%3A%3AOnlinePayment for supported processors. | ||
+ | ; realtime_lec | ||
+ | :Attempts to pay this invoice with phone bill (LEC) payment via a Business::OnlinePayment realtime gateway. See http://search.cpan.org/search?mode=module&query=Business%3A%3AOnlinePayment for supported processors. | ||
+ | ; batch_card OPTION => VALUE... | ||
+ | :Adds a payment for this invoice to the pending credit card batch (see [[Freeside:3:Documentation:Developer/FS/cust pay batch|FS::cust_pay_batch]]), or, if the '''realtime''' option is set to a true value, runs the payment using a realtime gateway. | ||
+ | ; invoice_barcode DIR_OR_FALSE | ||
+ | :Generates an invoice barcode PNG. If DIR_OR_FALSE is a true value, it is taken as the temp directory where the PNG file will be generated and the PNG file name is returned. Otherwise, the PNG image itself is returned. | ||
+ | ; invnum_date_pretty | ||
+ | :Returns a string with the invoice number and date, for example: "Invoice #54 (3/20/2008)". | ||
+ | |||
+ | :Intended for back-end context, with regard to translation and date formatting. | ||
+ | |||
+ | :Returns a list of detail items summarizing the usage charges on this invoice. Each one will have 'amount', 'description' (the usage charge name), and 'usage_classnum'. | ||
+ | |||
+ | :OPTIONS can include 'escape' (a function to escape the descriptions). | ||
+ | ; call_details [ OPTION => VALUE ... ] | ||
+ | :Returns an array of CSV strings representing the call details for this invoice The only option available is the boolean prepend_billed_number | ||
+ | |||
+ | ==SUBROUTINES== | ||
+ | ; process_reprint; process_reemail; process_refax; process_reftp; respool | ||
+ | ==CLASS METHODS== | ||
+ | ; owed_sql | ||
+ | :Returns an SQL fragment to retreive the amount owed (charged minus credited and paid). | ||
+ | ; net_sql | ||
+ | :Returns an SQL fragment to retreive the net amount (charged minus credited). | ||
+ | ; paid_sql | ||
+ | :Returns an SQL fragment to retreive the amount paid against this invoice. | ||
+ | ; credited_sql | ||
+ | :Returns an SQL fragment to retreive the amount credited against this invoice. | ||
+ | ; due_date_sql | ||
+ | :Returns an SQL fragment to retrieve the due date of an invoice. Currently only supported on PostgreSQL. | ||
+ | |||
+ | ==BUGS== | ||
+ | The delete method. | ||
+ | |||
+ | ==SEE ALSO== | ||
+ | [[Freeside:3:Documentation:Developer/FS/Record|FS::Record]], [[Freeside:3:Documentation:Developer/FS/cust main|FS::cust_main]], [[Freeside:3:Documentation:Developer/FS/cust bill pay|FS::cust_bill_pay]], [[Freeside:3:Documentation:Developer/FS/cust pay|FS::cust_pay]], [[Freeside:3:Documentation:Developer/FS/cust bill pkg|FS::cust_bill_pkg]], [[Freeside:3:Documentation:Developer/FS/cust bill credit|FS::cust_bill_credit]], schema.html from the base documentation. | ||
+ | |||
+ | ==POD ERRORS== | ||
+ | Hey! '''The above document had some coding errors, which are explained below:''' | ||
+ | |||
+ | ; Around line 2687: | ||
+ | :Unknown directive: =sub |
Latest revision as of 09:29, 21 July 2015
Contents
NAME
FS::cust_bill - Object methods for cust_bill records
SYNOPSIS
use FS::cust_bill; $record = new FS::cust_bill \%hash; $record = new FS::cust_bill { 'column' => 'value' }; $error = $record->insert; $error = $new_record->replace($old_record); $error = $record->delete; $error = $record->check; ( $total_previous_balance, @previous_cust_bill ) = $record->previous; @cust_bill_pkg_objects = $cust_bill->cust_bill_pkg; ( $total_previous_credits, @previous_cust_credit ) = $record->cust_credit; @cust_pay_objects = $cust_bill->cust_pay; $tax_amount = $record->tax; @lines = $cust_bill->print_text; @lines = $cust_bill->print_text('time' => $time);
DESCRIPTION
An FS::cust_bill object represents an invoice; a declaration that a customer owes you money. The specific charges are itemized as cust_bill_pkg records (see FS::cust_bill_pkg). FS::cust_bill inherits from FS::Record. The following fields are currently supported:
Regular fields
- invnum - primary key (assigned automatically for new invoices); custnum - customer (see FS::cust_main); _date - specified as a UNIX timestamp; see "time" in perlfunc. Also see Time::Local and Date::Parse for conversion functions.; charged - amount of this invoice; invoice_terms - optional terms override for this specific invoice
Deprecated fields
- billing_balance - the customer's balance immediately before generating this invoice. DEPRECATED. Use the "balance date" in FS::cust main|FS::cust_main#balance_date|"balance_date" in FS::cust_main method to determine the customer's balance at a specific time.; previous_balance - the customer's balance immediately after generating the invoice before this one. DEPRECATED.; printed - formerly used to track the number of times an invoice had been printed; no longer used.
Specific use cases
- closed - books closed flag, empty or `Y'; statementnum - invoice aggregation (see FS::cust_statement); agent_invid - legacy invoice number; promised_date - customer promised payment date, for collection
METHODS
- new HASHREF
- Creates a new invoice. To add the invoice to the database, see "insert". Invoices are normally created by calling the bill method of a customer object (see FS::cust_main).
- insert
- Adds this invoice to the database ("Posts" the invoice). If there is an error, returns the error, otherwise returns false.
- void
- Voids this invoice: deletes the invoice and adds a record of the voided invoice to the FS::cust_bill_void table (and related tables starting from FS::cust_bill_pkg_void).
- delete
- This method now works but you probably shouldn't use it. Instead, apply a credit against the invoice, or use the new void method.
- Using this method to delete invoices outright is really, really bad. There would be no record you ever posted this invoice, and there are no check to make sure charged = 0 or that there are no associated cust_bill_pkg records.
- Really, don't use it.
- replace [ OLD_RECORD ]
- You can, but probably shouldn't modify invoices...
- Replaces the OLD_RECORD with this one in the database, or, if OLD_RECORD is not supplied, replaces this record. If there is an error, returns the error, otherwise returns false.
- add_cc_surcharge
- Giant hack
- check
- Checks all fields to make sure this is a valid invoice. If there is an error, returns the error, otherwise returns false. Called by the insert and replace methods.
- display_invnum
- Returns the displayed invoice number for this invoice: agent_invid if cust_bill-default_agent_invid is set and it has a value, invnum otherwise.
- previous_bill
- Returns the customer's last invoice before this one.
- previous
- Returns a list consisting of the total previous balance for this customer, followed by the previous outstanding invoices (as FS::cust_bill objects also).
- enable_previous
- Whether to show the 'Previous Charges' section when printing this invoice. The negation of the 'disable_previous_balance' config setting.
- cust_bill_pkg
- Returns the line items (see FS::cust_bill_pkg) for this invoice.
- cust_bill_pkg_pkgnum PKGNUM
- Returns the line items (see FS::cust_bill_pkg) for this invoice and specified pkgnum.
- cust_pkg
- Returns the packages (see FS::cust_pkg) corresponding to the line items for this invoice.
- no_auto
- Returns true if any of the packages (or their definitions) corresponding to the line items for this invoice have the no_auto flag set.
- open_cust_bill_pkg
- Returns the open line items for this invoice.
- Note that cust_bill_pkg with both setup and recur fees are returned as two separate line items, each with only one fee.
- cust_bill_event
- Returns the completed invoice events (deprecated, old-style events - see FS::cust_bill_event) for this invoice.
- num_cust_bill_event
- Returns the number of completed invoice events (deprecated, old-style events - see FS::cust_bill_event) for this invoice.
- cust_event
- Returns the new-style customer billing events (see FS::cust_event) for this invoice.
- num_cust_event
- Returns the number of new-style customer billing events (see FS::cust_event) for this invoice.
- cust_main
- Returns the customer (see FS::cust_main) for this invoice.
- cust_suspend_if_balance_over AMOUNT
- Suspends the customer associated with this invoice if the total amount owed on this invoice and all older invoices is greater than the specified amount.
- Returns a list: an empty list on success or a list of errors.
- cust_credit
- Depreciated. See the cust_credited method.
#Returns a list consisting of the total previous credited (see #L<FS::cust_credit>) and unapplied for this customer, followed by the previous #outstanding credits (FS::cust_credit objects).
- cust_pay
- Depreciated. See the cust_bill_pay method.
- Returns all payments (see FS::cust_pay) for this invoice.
- cust_bill_pay
- Returns all payment applications (see FS::cust_bill_pay) for this invoice.
- cust_credited; cust_credit_bill
- Returns all applied credits (see FS::cust_credit_bill) for this invoice.
- cust_bill_pay_pkg PKGNUM
- Returns all payment applications (see FS::cust_bill_pay) for this invoice applied against the matching pkgnum.
- cust_credit_bill_pkg PKGNUM
- Returns all credit applications (see FS::cust_credit_bill) for this invoice applied against the matching pkgnum.
- cust_bill_batch
- Returns all invoice batch records (FS::cust_bill_batch) for this invoice.
- discount_plans
- Returns all discount plans (FS::discount_plan) for this invoice, as a hash keyed by term length.
- tax
- Returns the tax amount (see FS::cust_bill_pkg) for this invoice.
- owed
- Returns the amount owed (still outstanding) on this invoice, which is charged minus all payment applications (see FS::cust_bill_pay) and credit applications (see FS::cust_credit_bill).
- hide
- Returns true if this invoice should be hidden. See the selfservice-hide_invoices-taxclass configuraiton setting.
- apply_payments_and_credits [ OPTION => VALUE ... ]
- Applies unapplied payments and credits to this invoice. Payments with the no_auto_apply flag set will not be applied.
- A hash of optional arguments may be passed. Currently "manual" is supported. If true, a payment receipt is sent instead of a statement when 'payment_receipt_email' configuration option is set.
- If there is an error, returns the error, otherwise returns false.
- send HASHREF
- Sends this invoice to the destinations configured for this customer: sends email, prints and/or faxes. See FS::cust_main_invoice.
- Options can be passed as a hashref. Positional parameters are no longer allowed.
- template: a suffix for alternate invoices
- agentnum: obsolete, now does nothing.
- from overrides the default email invoice From: address.
- amount: obsolete, does nothing
- notice_name overrides "Invoice" as the name of the sent document (templates from 10/2009 or newer required).
- lpr overrides the system 'lpr' option as the command to print a document from standard input.
- lpr_data HASHREF
- Returns the postscript or plaintext for this invoice as an arrayref.
- Options must be passed as a hashref. Positional parameters are no longer allowed.
- template, if specified, is the name of a suffix for alternate invoices.
- notice_name, if specified, overrides "Invoice" as the name of the sent document (templates from 10/2009 or newer required)
- print HASHREF
- Prints this invoice.
- Options must be passed as a hashref.
- template, if specified, is the name of a suffix for alternate invoices.
- notice_name, if specified, overrides "Invoice" as the name of the sent document (templates from 10/2009 or newer required)
- fax_invoice HASHREF
- Faxes this invoice.
- Options must be passed as a hashref.
- template, if specified, is the name of a suffix for alternate invoices.
- notice_name, if specified, overrides "Invoice" as the name of the sent document (templates from 10/2009 or newer required)
- batch_invoice [ HASHREF ]
- Place this invoice into the open batch (see FS::bill_batch). If there isn't an open batch, one will be created.
- HASHREF may contain any options to be passed to print_pdf.
- get_open_batch
- Returns the currently open batch as an FS::bill_batch object, creating a new one if necessary. (A per-agent batch if invoice_print_pdf-spoolagent is enabled)
- ftp_invoice [ TEMPLATENAME ]
- Sends this invoice data via FTP.
- TEMPLATENAME is unused?
- spool_invoice [ TEMPLATENAME ]
- Spools this invoice data (see FS::spool_csv)
- TEMPLATENAME is unused?
- send_csv OPTION => VALUE, ...
- Sends invoice as a CSV data-file to a remote host with the specified protocol.
- Options are:
- protocol - currently only "ftp" server username password dir
- The file will be named "N-YYYYMMDDHHMMSS.csv" where N is the invoice number and YYMMDDHHMMSS is a timestamp.
- See "print_csv" for a description of the output format.
- spool_csv
- Spools CSV invoice data.
- Options are:
- format - any of FS::Misc::::Invoicing::spool_formats
- ; dest - if set (to POST, EMAIL or FAX), only sends spools invoices if the customer has the corresponding invoice destinations set (see FS::cust_main_invoice).:; agent_spools - if set to a true value, will spool to per-agent files rather than a single global file:; upload_targetnum - if set to a target (see FS::upload_target), will append to that spool. FS::Cron::upload will then send the spool file to that destination.:; balanceover - if set, only spools the invoice if the total amount owed on this invoice and all older invoices is greater than the specified amount.:; time - the "current time". Controls the printing of past due messages in the ICS format.; print_csv OPTION => VALUE, ...
- Returns CSV data for this invoice.
- Options are:
- format - 'default', 'billco', 'oneline', 'bridgestone'
- Returns a list consisting of two scalars. The first is a single line of CSV header information for this invoice. The second is one or more lines of CSV detail information for this invoice.
- If format is not specified or "default", the fields of the CSV file are as follows:
- record_type, invnum, custnum, _date, charged, first, last, company, address1, address2, city, state, zip, country, pkg, setup, recur, sdate, edate
- record type - record_type is either cust_bill or cust_bill_pkg
- record_type is cust_bill for the initial header line only. The last five fields (pkg through edate) are irrelevant, and all other fields are filled in.
- record_type is cust_bill_pkg for detail lines. Only the first two fields (record_type and invnum) and the last five fields (pkg through edate) are filled in.
- invnum - invoice number
- ; custnum - customer number:; _date - invoice date:; charged - total invoice amount:; first - customer first name:; last - customer first name:; company - company name:; address1 - address line 1:; address2 - address line 1:; city:; state:; zip:; country:; pkg - line item description:; setup - line item setup fee (one or both of setup and recur will be defined):; recur - line item recurring fee (one or both of setup and recur will be defined):; sdate - start date for recurring fee:; edate - end date for recurring fee
- If format is "billco", the fields of the header CSV file are as follows:
+-------------------------------------------------------------------+ | FORMAT HEADER FILE | |-------------------------------------------------------------------| | Field | Description | Name | Type | Width | | 1 | N/A-Leave Empty | RC | CHAR | 2 | | 2 | N/A-Leave Empty | CUSTID | CHAR | 15 | | 3 | Transaction Account No | TRACCTNUM | CHAR | 15 | | 4 | Transaction Invoice No | TRINVOICE | CHAR | 15 | | 5 | Transaction Zip Code | TRZIP | CHAR | 5 | | 6 | Transaction Company Bill To | TRCOMPANY | CHAR | 30 | | 7 | Transaction Contact Bill To | TRNAME | CHAR | 30 | | 8 | Additional Address Unit Info | TRADDR1 | CHAR | 30 | | 9 | Bill To Street Address | TRADDR2 | CHAR | 30 | | 10 | Ancillary Billing Information | TRADDR3 | CHAR | 30 | | 11 | Transaction City Bill To | TRCITY | CHAR | 20 | | 12 | Transaction State Bill To | TRSTATE | CHAR | 2 | | 13 | Bill Cycle Close Date | CLOSEDATE | CHAR | 10 | | 14 | Bill Due Date | DUEDATE | CHAR | 10 | | 15 | Previous Balance | BALFWD | NUM* | 9 | | 16 | Pmt/CR Applied | CREDAPPLY | NUM* | 9 | | 17 | Total Current Charges | CURRENTCHG | NUM* | 9 | | 18 | Total Amt Due | TOTALDUE | NUM* | 9 | | 19 | Total Amt Due | AMTDUE | NUM* | 9 | | 20 | 30 Day Aging | AMT30 | NUM* | 9 | | 21 | 60 Day Aging | AMT60 | NUM* | 9 | | 22 | 90 Day Aging | AMT90 | NUM* | 9 | | 23 | Y/N | AGESWITCH | CHAR | 1 | | 24 | Remittance automation | SCANLINE | CHAR | 100 | | 25 | Total Taxes & Fees | TAXTOT | NUM* | 9 | | 26 | Customer Reference Number | CUSTREF | CHAR | 15 | | 27 | Federal Tax*** | FEDTAX | NUM* | 9 | | 28 | State Tax*** | STATETAX | NUM* | 9 | | 29 | Other Taxes & Fees*** | OTHERTAX | NUM* | 9 | +-------+-------------------------------+------------+------+-------+
- If format is "billco", the fields of the detail CSV file are as follows:
FORMAT FOR DETAIL FILE | | | | Field | Description | Name | Type | Width 1 | N/A-Leave Empty | RC | CHAR | 2 2 | N/A-Leave Empty | CUSTID | CHAR | 15 3 | Account Number | TRACCTNUM | CHAR | 15 4 | Invoice Number | TRINVOICE | CHAR | 15 5 | Line Sequence (sort order) | LINESEQ | NUM | 6 6 | Transaction Detail | DETAILS | CHAR | 100 7 | Amount | AMT | NUM* | 9 8 | Line Format Control** | LNCTRL | CHAR | 2 9 | Grouping Code | GROUP | CHAR | 2 10 | User Defined | ACCT CODE | CHAR | 15
- If format is 'oneline', there is no detail file. Each invoice has a header line only, with the fields:
- Agent number, agent name, customer number, first name, last name, address line 1, address line 2, city, state, zip, invoice date, invoice number, amount charged, amount due, previous balance, due date.
- and then, for each line item, three columns containing the package number, description, and amount.
- If format is 'bridgestone', there is no detail file. Each invoice has a header line with the following fields in a fixed-width format:
- Customer number (in display format), date, name (first last), company, address 1, address 2, city, state, zip.
- This is a mailing list format, and has no per-invoice fields. To avoid sending redundant notices, the spooling event should have a "once" or "once_percust_every" condition.
- comp
- Pays this invoice with a compliemntary payment. If there is an error, returns the error, otherwise returns false.
- realtime_card
- Attempts to pay this invoice with a credit card payment via a Business::OnlinePayment realtime gateway. See http://search.cpan.org/search?mode=module&query=Business%3A%3AOnlinePayment for supported processors.
- realtime_ach
- Attempts to pay this invoice with an electronic check (ACH) payment via a Business::OnlinePayment realtime gateway. See http://search.cpan.org/search?mode=module&query=Business%3A%3AOnlinePayment for supported processors.
- realtime_lec
- Attempts to pay this invoice with phone bill (LEC) payment via a Business::OnlinePayment realtime gateway. See http://search.cpan.org/search?mode=module&query=Business%3A%3AOnlinePayment for supported processors.
- batch_card OPTION => VALUE...
- Adds a payment for this invoice to the pending credit card batch (see FS::cust_pay_batch), or, if the realtime option is set to a true value, runs the payment using a realtime gateway.
- invoice_barcode DIR_OR_FALSE
- Generates an invoice barcode PNG. If DIR_OR_FALSE is a true value, it is taken as the temp directory where the PNG file will be generated and the PNG file name is returned. Otherwise, the PNG image itself is returned.
- invnum_date_pretty
- Returns a string with the invoice number and date, for example: "Invoice #54 (3/20/2008)".
- Intended for back-end context, with regard to translation and date formatting.
- Returns a list of detail items summarizing the usage charges on this invoice. Each one will have 'amount', 'description' (the usage charge name), and 'usage_classnum'.
- OPTIONS can include 'escape' (a function to escape the descriptions).
- call_details [ OPTION => VALUE ... ]
- Returns an array of CSV strings representing the call details for this invoice The only option available is the boolean prepend_billed_number
SUBROUTINES
- process_reprint; process_reemail; process_refax; process_reftp; respool
CLASS METHODS
- owed_sql
- Returns an SQL fragment to retreive the amount owed (charged minus credited and paid).
- net_sql
- Returns an SQL fragment to retreive the net amount (charged minus credited).
- paid_sql
- Returns an SQL fragment to retreive the amount paid against this invoice.
- credited_sql
- Returns an SQL fragment to retreive the amount credited against this invoice.
- due_date_sql
- Returns an SQL fragment to retrieve the due date of an invoice. Currently only supported on PostgreSQL.
BUGS
The delete method.
SEE ALSO
FS::Record, FS::cust_main, FS::cust_bill_pay, FS::cust_pay, FS::cust_bill_pkg, FS::cust_bill_credit, schema.html from the base documentation.
POD ERRORS
Hey! The above document had some coding errors, which are explained below:
- Around line 2687:
- Unknown directive: =sub