use vars qw($base_dir @config_items @base_items @card_types $DEBUG);
use strict;
+use vars qw( $base_dir @config_items @base_items @card_types @invoice_terms
+ $DEBUG
+ );
use Carp;
use IO::File;
use File::Basename;
use MIME::Base64;
+use Email::Address;
use FS::ConfItem;
use FS::ConfDefaults;
use FS::Conf_compat17;
'key' => $_,
'base_key' => $proto->key,
'section' => $proto->section,
- 'description' => 'Alternate ' . $proto->description . ' See the <a href="http://www.freeside.biz/mediawiki/index.php/Freeside:2.1:Documentation:Administration#Invoice_templates">billing documentation</a> for details.',
+ 'description' => 'Alternate ' . $proto->description . ' See the <a href="http://www.freeside.biz/mediawiki/index.php/Freeside:3:Documentation:Administration#Invoice_templates">billing documentation</a> for details.',
'type' => $proto->type,
};
} &$listmaker($base);
sub invoice_from_full {
my ($self, $agentnum) = @_;
- return $self->config('invoice_from_name', $agentnum ) ?
- $self->config('invoice_from_name', $agentnum ) . ' <' .
- $self->config('invoice_from', $agentnum ) . '>' :
- $self->config('invoice_from', $agentnum );
+
+ my $name = $self->config('invoice_from_name', $agentnum)
+ || $self->config('company_name', $agentnum);
+
+ Email::Address->new( $name => $self->config('invoice_from', $agentnum ) )
+ ->format;
}
=back
logo.eps
);
+@invoice_terms = (
+ '',
+ 'Payable upon receipt',
+ 'Net 0', 'Net 3', 'Net 5', 'Net 7', 'Net 9', 'Net 10', 'Net 14',
+ 'Net 15', 'Net 18', 'Net 20', 'Net 21', 'Net 25', 'End of Month', 'Net 30',
+ 'Net 45', 'Net 60', 'Net 90'
+);
+
my %msg_template_options = (
'type' => 'select-sub',
'options_sub' => sub {
);
map { $_->gatewaynum, $_->label } @gateways;
},
+ 'per_agent' => 1,
);
my %invoice_mode_options = (
'section' => 'billing',
'description' => 'Add a credit card surcharge to invoices, as a % of the invoice total. WARNING: Although recently permitted to US merchants in general, specific consumer protection laws may prohibit or restrict this practice in California, Colorado, Connecticut, Florda, Kansas, Maine, Massachusetts, New York, Oklahome, and Texas. Surcharging is also generally prohibited in most countries outside the US, AU and UK. When allowed, typically not permitted to be above 4%.',
'type' => 'text',
+ 'per_agent' => 1,
+ },
+
+ {
+ 'key' => 'credit-card-surcharge-flatfee',
+ 'section' => 'billing',
+ 'description' => 'Add a credit card surcharge to invoices, as a flat fee. WARNING: Although recently permitted to US merchants in general, specific consumer protection laws may prohibit or restrict this practice in California, Colorado, Connecticut, Florda, Kansas, Maine, Massachusetts, New York, Oklahome, and Texas. Surcharging is also generally prohibited in most countries outside the US, AU and UK. When allowed, typically not permitted to be above 4%.',
+ 'type' => 'text',
+ 'per_agent' => 1,
+ },
+
+ {
+ 'key' => 'credit-card-surcharge-text',
+ 'section' => 'billing',
+ 'description' => 'Text for the credit card surcharge invoice line. If not set, it will default to Credit Card Surcharge.',
+ 'type' => 'text',
+ 'per_agent' => 1,
},
{
'per_agent' => 1,
},
+ {
+ 'key' => 'email-to-voice_domain',
+ 'section' => 'email_to_voice_services',
+ 'description' => 'The domain name that phone numbers will be attached to for sending email to voice emails via a 3rd party email to voice service. You will get this domain from your email to voice service provider. This is utilized on the email customer page or when using the email to voice billing event action. There you will be able to select the phone number for the email to voice service.',
+ 'type' => 'text',
+ 'per_agent' => 1,
+ },
+
{
'key' => 'next-bill-ignore-time',
'section' => 'billing',
'select_enum' => [ '', qw( USD AUD CAD DKK EUR GBP ILS JPY NZD ) ],
},
+ {
+ 'key' => 'business-onlinepayment-verification',
+ 'section' => 'billing',
+ 'description' => 'Run a $1 authorization (followed by a void) to verify new credit card information.',
+ 'type' => 'checkbox',
+ },
+
{
'key' => 'currency',
'section' => 'billing',
'section' => 'invoicing',
'description' => 'Indicates that html and latex invoices should be in summary style and make use of invoice_latexsummary.',
'type' => 'checkbox',
+ 'per_agent' => 1,
},
{
'key' => 'invoice_template',
'section' => 'invoicing',
- 'description' => 'Text template file for invoices. Used if no invoice_html template is defined, and also seen by users using non-HTML capable mail clients. See the <a href="http://www.freeside.biz/mediawiki/index.php/Freeside:2.1:Documentation:Administration#Plaintext_invoice_templates">billing documentation</a> for details.',
+ 'description' => 'Text template file for invoices. Used if no invoice_html template is defined, and also seen by users using non-HTML capable mail clients. See the <a href="http://www.freeside.biz/mediawiki/index.php/Freeside:3:Documentation:Administration#Plaintext_invoice_templates">billing documentation</a> for details.',
'type' => 'textarea',
},
{
'key' => 'invoice_latexextracouponspace',
'section' => 'invoicing',
- 'description' => 'Optional LaTeX invoice textheight space to reserve for a tear off coupon. Include units. Default is 3.6cm',
+ 'description' => 'Optional LaTeX invoice textheight space to reserve for a tear off coupon. Include units. Default is 2.7 inches.',
'type' => 'text',
'per_agent' => 1,
'validate' => sub { shift =~
{
'key' => 'invoice_latexcouponfootsep',
'section' => 'invoicing',
- 'description' => 'Optional LaTeX invoice separation between tear off coupon and footer. Include units.',
+ 'description' => 'Optional LaTeX invoice separation between bottom of coupon address and footer. Include units. Default is 0.2 inches.',
'type' => 'text',
'per_agent' => 1,
'validate' => sub { shift =~
{
'key' => 'invoice_latexcouponamountenclosedsep',
'section' => 'invoicing',
- 'description' => 'Optional LaTeX invoice separation between total due and amount enclosed line. Include units.',
+ 'description' => 'Optional LaTeX invoice separation between total due and amount enclosed line. Include units. Default is 2.25 em.',
'type' => 'text',
'per_agent' => 1,
'validate' => sub { shift =~
{
'key' => 'invoice_latexcoupontoaddresssep',
'section' => 'invoicing',
- 'description' => 'Optional LaTeX invoice separation between invoice data and the to address (usually invoice_latexreturnaddress). Include units.',
+ 'description' => 'Optional LaTeX invoice separation between invoice data and the address (usually invoice_latexreturnaddress). Include units. Default is 1 inch.',
'type' => 'text',
'per_agent' => 1,
'validate' => sub { shift =~
{
'key' => 'invoice_latexverticalreturnaddress',
- 'section' => 'invoicing',
- 'description' => 'Place the return address under the company logo rather than beside it.',
+ 'section' => 'deprecated',
+ 'description' => 'Deprecated. With old invoice_latex template, places the return address under the company logo rather than beside it.',
'type' => 'checkbox',
'per_agent' => 1,
},
'type' => 'textarea'
},
+ {
+ 'key' => 'quotation_disable_after_days',
+ 'section' => '',
+ 'description' => 'The number of days, if set, after which a non-converted quotation will be automatically disabled.',
+ 'type' => 'text'
+ },
+
{
'key' => 'invoice_print_pdf',
'section' => 'invoicing',
{
'key' => 'invoice_default_terms',
'section' => 'invoicing',
- 'description' => 'Optional default invoice term, used to calculate a due date printed on invoices.',
+ 'description' => 'Optional default invoice term, used to calculate a due date printed on invoices. WARNING: If you do not want to change the terms on existing invoices, do not change this after going live.',
'type' => 'select',
'per_agent' => 1,
- 'select_enum' => [
- '', 'Payable upon receipt', 'Net 0', 'Net 3', 'Net 5', 'Net 7', 'Net 9', 'Net 10', 'Net 14',
- 'Net 15', 'Net 18', 'Net 20', 'Net 21', 'Net 25', 'Net 30', 'Net 45',
- 'Net 60', 'Net 90'
- ], },
+ 'select_enum' => \@invoice_terms,
+ },
{
'key' => 'invoice_show_prior_due_date',
'type' => 'checkbox',
},
+ {
+ 'key' => 'invoice_omit_due_date',
+ 'section' => 'invoicing',
+ 'description' => 'Omit the "Please pay by (date)" from invoices.',
+ 'type' => 'checkbox',
+ 'per_agent' => 1,
+ },
+
+ {
+ 'key' => 'invoice_pay_by_msg',
+ 'section' => 'invoicing',
+ 'description' => 'Test of the "Please pay by (date)" message. Include [_1] to indicate the date, for example: "Please pay by [_1]"',
+ 'type' => 'text',
+ 'per_agent' => 1,
+ },
+
{
'key' => 'invoice_sections',
'section' => 'invoicing',
- 'description' => 'Split invoice into sections and label according to package category when enabled.',
+ 'description' => 'Split invoice into sections and label according to either package category or location when enabled.',
'type' => 'checkbox',
'per_agent' => 1,
+ 'config_bool' => 1,
+ },
+
+ {
+ 'key' => 'invoice_sections_multilocation',
+ 'section' => 'invoicing',
+ 'description' => 'Enable invoice_sections for for any bill with at least this many locations on the bill.',
+ 'type' => 'text',
+ 'per_agent' => 1,
+ 'validate' => sub { shift =~ /^\d+$/ ? undef : 'Please enter a number' },
},
{
'select_enum' => [ qw(category location) ],
},
+ {
+ 'key' => 'invoice_sections_with_taxes',
+ 'section' => 'invoicing',
+ 'description' => 'Include taxes within each section of mutli-section invoices.',
+ 'type' => 'checkbox',
+ 'per_agent' => 1,
+ 'agent_bool' => 1,
+ },
+
{
'key' => 'summary_subtotals_method',
'section' => 'invoicing',
'description' => 'Template to use for manual payment receipts.',
%msg_template_options,
},
+
+ {
+ 'key' => 'payment_receipt_msgnum_auto',
+ 'section' => 'notification',
+ 'description' => 'Automatic payments will cause a post-payment to use a message template for automatic payment receipts rather than a post payment statement.',
+ %msg_template_options,
+ },
{
'key' => 'payment_receipt_from',
},
{
- 'key' => 'unsuspendauto',
+ 'key' => 'unsuspend_balance',
'section' => 'billing',
- 'description' => 'Enables the automatic unsuspension of suspended packages when a customer\'s balance due changes from positive to zero or negative as the result of a payment or credit',
- 'type' => 'checkbox',
+ 'description' => 'Enables the automatic unsuspension of suspended packages when a customer\'s balance due is at or below the specified amount after a payment or credit',
+ 'type' => 'select',
+ 'select_enum' => [
+ '', 'Zero', 'Latest invoice charges', 'Charges not past due'
+ ],
},
{
'type' => 'checkbox',
},
+ {
+ 'key' => 'google_maps_api_key',
+ 'section' => 'UI',
+ 'description' => 'API key for google maps. This must be set for map and directions links to work. See <a href="https://developers.google.com/maps/documentation/javascript/get-api-key" target="_top">Getting a Google Maps API Key</a>',
+ 'type' => 'text',
+ },
+
+ {
+ 'key' => 'company_physical_address',
+ 'section' => 'UI',
+ 'description' => 'Your physical company address, for use in supplying google map directions, defaults to company_address',
+ 'type' => 'textarea',
+ 'per_agent' => 1,
+ },
+
{
'key' => 'show_ship_company',
'section' => 'UI',
'type' => 'checkbox',
},
+ {
+ 'key' => 'cancel_msgnum-referring_cust-pkg_class',
+ 'section' => 'notification',
+ 'description' => 'Enable cancellation messages to the referring customer for these package classes.',
+ 'type' => 'select-pkg_class',
+ 'multiple' => 1,
+ },
+
+ {
+ 'key' => 'cancel_msgnum-referring_cust',
+ 'section' => 'notification',
+ 'description' => 'Template to use for cancellation emails sent to the referring customer.',
+ %msg_template_options,
+ },
+
{
'key' => 'require_cardname',
'section' => 'billing',
'type' => 'checkbox',
},
+ {
+ 'key' => 'radius-canopy',
+ 'section' => '',
+ 'description' => 'Enable RADIUS attributes for Cambium (formerly Motorola) Canopy (Motorola-Canopy-Gateway).',
+ 'type' => 'checkbox',
+ },
+
{
'key' => 'svc_broadband-radius',
'section' => '',
],
},
+ {
+ 'key' => 'selfservice-password_reset_hours',
+ 'section' => 'self-service',
+ 'description' => 'Numbers of hours an email password reset is valid. Defaults to 24.',
+ 'type' => 'text',
+ },
+
{
'key' => 'selfservice-password_reset_msgnum',
'section' => 'self-service',
{
'key' => 'ticket_system',
'section' => 'ticketing',
- 'description' => 'Ticketing system integration. <b>RT_Internal</b> uses the built-in RT ticketing system (see the <a href="http://www.freeside.biz/mediawiki/index.php/Freeside:2.1:Documentation:RT_Installation">integrated ticketing installation instructions</a>). <b>RT_External</b> accesses an external RT installation in a separate database (local or remote).',
+ 'description' => 'Ticketing system integration. <b>RT_Internal</b> uses the built-in RT ticketing system (see the <a href="http://www.freeside.biz/mediawiki/index.php/Freeside:3:Documentation:RT_Installation">integrated ticketing installation instructions</a>). <b>RT_External</b> accesses an external RT installation in a separate database (local or remote).',
'type' => 'select',
#'select_enum' => [ '', qw(RT_Internal RT_Libs RT_External) ],
'select_enum' => [ '', qw(RT_Internal RT_External) ],
{
'key' => 'ticket_system-appointment-queueid',
'section' => 'ticketing',
- 'description' => 'Custom field from the ticketing system to use as an appointment classification.',
+ 'description' => 'Ticketing queue to use for appointments.',
#false laziness w/above
'type' => 'select-sub',
'options_sub' => sub {
{
'key' => 'ticket_system-appointment-custom_field',
'section' => 'ticketing',
- 'description' => 'Custom field from the ticketing system to use as an appointment classification.',
+ 'description' => 'Ticketing custom field to use as an appointment classification.',
'type' => 'text',
},
{
'key' => 'cust_main-require_address2',
'section' => 'UI',
- 'description' => 'Second address field is required (on service address only, if billing and service addresses differ). Also enables "Unit" labeling of address2 on customer view and edit pages. Useful for multi-tenant applications. See also: address2-search',
+ 'description' => 'Second address field is required. Also enables "Unit" labeling of address2 on customer view and edit pages. Useful for multi-tenant applications. See also: address2-search', # service address only part not working in the modern world, see #41184 (on service address only, if billing and service addresses differ)
'type' => 'checkbox',
},
'type' => 'checkbox',
},
+ {
+ 'key' => 'invoice-all_pkg_addresses',
+ 'section' => 'invoicing',
+ 'description' => 'Show all package addresses on invoices, even the default.',
+ 'type' => 'checkbox',
+ },
+
{
'key' => 'invoice-unitprice',
'section' => 'invoicing',
'type' => 'checkbox',
},
+ {
+ 'key' => 'cust_main_note-require_class',
+ 'section' => 'UI',
+ 'description' => 'Require customer note classes for customer notes',
+ 'type' => 'checkbox',
+ },
+
{
'key' => 'cust_main-ticket_statuses',
'section' => 'UI',
{
'key' => 'support-key',
'section' => '',
- 'description' => 'A support key enables access to commercial services delivered over the network, such as the payroll module, access to the internal ticket system, priority support and optional backups.',
+ 'description' => 'A support key enables access to commercial services delivered over the network, such as address normalization and invoice printing.',
+ 'type' => 'text',
+ },
+
+ {
+ 'key' => 'freesideinc-webservice-svcpart',
+ 'section' => '',
+ 'description' => 'Do not set this.',
'type' => 'text',
},
},
{
- 'key' => 'password-generated-allcaps',
+ 'key' => 'password-generated-characters',
'section' => 'password',
- 'description' => 'Causes passwords automatically generated to consist entirely of capital letters',
- 'type' => 'checkbox',
+ 'description' => 'Set of characters to use when generating random passwords. This must contain at least one lowercase letter, uppercase letter, digit, and punctuation mark.',
+ 'type' => 'textarea',
},
{
'per_agent' => 1,
},
+ {
+ 'key' => 'cust_main-require_classnum',
+ 'section' => '',
+ 'description' => 'Customer class is required: require customer class for all customer records.',
+ 'type' => 'checkbox',
+ },
+
{
'key' => 'cust_main-check_unique',
'section' => '',
'' => 'Numeric only',
'\d{7}' => 'Numeric only, exactly 7 digits',
'ww?d+' => 'Numeric with one or two letter prefix',
+ 'd+-w' => 'Numeric with a dash and one letter suffix',
],
},
'section' => 'invoicing',
'description' => 'Text for the label of the total previous balance, when it is shown separately. Defaults to "Previous Balance".',
'type' => 'text',
+ 'per_locale' => 1,
},
{
'section' => 'invoicing',
'description' => 'Text for the label of the total of new charges, when it is shown separately. If invoice_show_prior_due_date is enabled, the due date of current charges will be appended. Defaults to "Total New Charges".',
'type' => 'text',
+ 'per_locale' => 1,
},
{
'usps' => 'U.S. Postal Service',
'uscensus' => 'U.S. Census Bureau',
'ezlocate' => 'EZLocate',
- 'tomtom' => 'TomTom',
'melissa' => 'Melissa WebSmart',
+ 'freeside' => 'Freeside web service (support contract required)',
],
},
'type' => 'text',
},
- {
- 'key' => 'tomtom-userid',
- 'section' => 'UI',
- 'description' => 'TomTom geocoding service API key. See <a href="http://www.tomtom.com/">the TomTom website</a> to obtain a key. This is recommended for addresses in the United States only.',
- 'type' => 'text',
- },
-
{
'key' => 'ezlocate-userid',
'section' => 'UI',
'section' => 'UI',
'description' => 'The year to use in census tract lookups. NOTE: you need to select 2012 or 2013 for Year 2010 Census tract codes. A selection of 2011 provides Year 2000 Census tract codes. Use the freeside-censustract-update tool if exisitng customers need to be changed.',
'type' => 'select',
- 'select_enum' => [ qw( 2013 2012 2011 ) ],
+ 'select_enum' => [ qw( 2017 2016 2015 ) ],
},
{
'key' => 'tax_district_method',
- 'section' => 'UI',
+ 'section' => 'billing', # 'UI', #???
'description' => 'The method to use to look up tax district codes.',
'type' => 'select',
#'select_hash' => [ FS::Misc::Geo::get_district_methods() ],
],
},
+ {
+ 'key' => 'tax_district_taxname',
+ 'section' => 'billing',
+ 'description' => 'The tax name to display on the invoice for district sales taxes. Defaults to "Tax".',
+ 'type' => 'text',
+ },
+
{
'key' => 'company_latitude',
'section' => 'UI',
{
'key' => 'cust_main-default_agent_custid',
'section' => 'UI',
- 'description' => 'Display the agent_custid field when available instead of the custnum field.',
+ 'description' => 'Display the agent_custid field when available instead of the custnum field. Restart Apache after changing.',
'type' => 'checkbox',
},
'per_agent' => 1,
},
- {
- 'key' => 'cust_main-custnum-display_special',
- 'section' => 'UI',
- 'description' => 'Use this customer number prefix format',
- 'type' => 'select',
- 'select_hash' => [ '' => '',
- 'CoStAg' => 'CoStAg (country, state, agent name or display_prefix)',
- 'CoStCl' => 'CoStCl (country, state, class name)' ],
- },
-
{
'key' => 'cust_main-custnum-display_length',
'section' => 'UI',
- 'description' => 'Zero fill the customer number to this many digits for display purposes.',
+ 'description' => 'Zero fill the customer number to this many digits for display purposes. Restart Apache after changing.',
'type' => 'text',
},
{
'key' => 'part_pkg-delay_cancel-days',
'section' => '',
- 'description' => 'Expire packages in this many days when using delay_cancel (default is 1)',
+ 'description' => 'Number of days to suspend when using automatic suspension period before cancel (default is 1)',
'type' => 'text',
'validate' => sub { (($_[0] =~ /^\d*$/) && (($_[0] eq '') || $_[0]))
- ? 'Must specify an integer number of days'
- : '' }
+ ? ''
+ : 'Must specify an integer number of days' }
},
{
'Change billing address',
'Change service address',
'Change payment information',
+ 'Change packages',
'Change password(s)',
'Logout',
],
# 'type' => 'text',
# },
+ {
+ 'key' => 'cdr-skip_duplicate_rewrite',
+ 'section' => 'telephony',
+ 'description' => 'Use the freeside-cdrrewrited daemon to prevent billing CDRs with a src, dst and calldate identical to an existing CDR',
+ 'type' => 'checkbox',
+ },
+
{
'key' => 'cdr-charged_party_rewrite',
'section' => 'telephony',
'type' => 'checkbox',
},
+ {
+ 'key' => 'cdr-userfield_dnis_rewrite',
+ 'section' => 'telephony',
+ 'description' => 'If the CDR userfield contains "DNIS=" followed by a sequence of digits, use that as the destination number for the call.',
+ 'type' => 'checkbox',
+ },
+
+ {
+ 'key' => 'cdr-intl_to_domestic_rewrite',
+ 'section' => 'telephony',
+ 'description' => 'Strip the "011" international prefix from CDR destination numbers if the rest of the number is 7 digits or shorter, and so probably does not contain a country code.',
+ 'type' => 'checkbox',
+ },
+
{
'key' => 'cdr-gsm_tap3-sender',
'section' => 'telephony',
{
'key' => 'tax-cust_exempt-groups-require_individual_nums',
'section' => 'deprecated',
- 'description' => 'Deprecated: see tax-cust_exempt-groups-number_requirement',
+ 'description' => 'Deprecated: see tax-cust_exempt-groups-num_req',
'type' => 'checkbox',
},
my @part_export =
map { qsearch( 'part_export', {exporttype => $_ } ) }
keys %{FS::part_export::export_info('cust_main')};
- map { $_->exportnum => $_->exporttype.' to '.$_->machine } @part_export;
+ map { $_->exportnum => $_->exportname } @part_export;
},
'option_sub' => sub {
require FS::Record;
'part_export', { 'exportnum' => shift }
);
$part_export
- ? $part_export->exporttype.' to '.$part_export->machine
+ ? $part_export->exportname
: '';
},
},
{
'key' => 'cust_location-exports',
'section' => '',
- 'description' => 'Export(s) to call on cust_location insert, modification and deletion.',
+ 'description' => 'Export(s) to call on cust_location insert or modification',
'type' => 'select-sub',
'multiple' => 1,
'options_sub' => sub {
my @part_export =
map { qsearch( 'part_export', {exporttype => $_ } ) }
keys %{FS::part_export::export_info('cust_location')};
- map { $_->exportnum => $_->exporttype.' to '.$_->machine } @part_export;
+ map { $_->exportnum => $_->exportname } @part_export;
},
'option_sub' => sub {
require FS::Record;
'part_export', { 'exportnum' => shift }
);
$part_export
- ? $part_export->exporttype.' to '.$part_export->machine
+ ? $part_export->exportname
: '';
},
},
{
'key' => 'note-classes',
- 'section' => 'UI',
- 'description' => 'Use customer note classes',
+ 'section' => 'deprecated',
+ 'description' => 'Use customer note classes (now automatically used if classes are defined)',
'type' => 'select',
'select_hash' => [
0 => 'Disabled',
{
'key' => 'cust_bill-latex_lineitem_maxlength',
- 'section' => 'invoicing',
- 'description' => 'Truncate long line items to this number of characters on typeset invoices, to avoid losing things off the right margin. Defaults to 50. ',
+ 'section' => 'deprecated',
+ 'description' => 'With old invoice_latex template, truncate long line items to this number of characters on typeset invoices, to avoid losing things off the right margin. Defaults to 50. (With current invoice_latex template, this is handled internally in the template itself instead.)',
'type' => 'text',
},
{
'key' => 'cust_main-status_module',
'section' => 'UI',
- 'description' => 'Which module to use for customer status display. The "Classic" module (the default) considers accounts with cancelled recurring packages but un-cancelled one-time charges Inactive. The "Recurring" module considers those customers Cancelled. Similarly for customers with suspended recurring packages but one-time charges.', #other differences?
+ 'description' => 'Which module to use for customer status display. The "Classic" module (the default) considers accounts with cancelled recurring packages but un-cancelled one-time charges Inactive. The "Recurring" module considers those customers Cancelled. Similarly for customers with suspended recurring packages but one-time charges. Restart Apache after changing.', #other differences?
'type' => 'select',
'select_enum' => [ 'Classic', 'Recurring' ],
},
{
'key' => 'translate-auto-insert',
'section' => '',
- 'description' => 'Auto-insert untranslated strings for selected non-en_US locales with their default/en_US values. Do not turn this on unless translating the interface into a new language.',
+ 'description' => 'Auto-insert untranslated strings for selected non-en_US locales with their default/en_US values. Do not turn this on unless translating the interface into a new language. Restart Apache after changing.',
'type' => 'select',
'multiple' => 1,
'select_enum' => [ grep { $_ ne 'en_US' } FS::Locales::locales ],
'rate_low' => 'Lowest rate first',
],
},
+
+ {
+ 'key' => 'cdr-lrn_lookup',
+ 'section' => 'telephony',
+ 'description' => 'Look up LRNs of destination numbers for exact matching to the terminating carrier. This feature requires a Freeside support contract for paid access to the central NPAC database; see <a href ="#support-key">support-key</a>.',
+ 'type' => 'checkbox',
+ },
{
'key' => 'brand-agent',
'type' => 'checkbox',
},
+ {
+ 'key' => 'selfservice-ACH_info_readonly',
+ 'section' => 'self-service',
+ 'description' => 'make ACH on self service portal read only',
+ 'type' => 'checkbox',
+ },
+
{
'key' => 'selfservice-announcement',
'section' => 'self-service',
{ key => "vonage-password", section => "deprecated", description => "<b>DEPRECATED</b>", type => "text" },
{ key => "vonage-fromnumber", section => "deprecated", description => "<b>DEPRECATED</b>", type => "text" },
+ {
+ 'key' => 'selfservice-db_profile',
+ 'section' => 'development',
+ 'description' => 'Enable collection and logging of database profiling information for self-service servers. This has significant overhead, do not leave enabled in production beyond that necessary to collect profiling data.',
+ 'type' => 'checkbox',
+ },
+
+
# for internal use only; test databases should declare this option and
# everyone else should pretend it doesn't exist
#{
);
1;
-