X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2FConf.pm;h=d09212d4ada4c2b029bfd627fdacfe241ec28e81;hb=a238acfb85cd4bef6a99bfe3560a0999c9386dfb;hp=0e89008af245db8c19d39aad0d91dbe1baa8a7f7;hpb=e440bae0f6f832117318b241e93f91d22995013f;p=freeside.git diff --git a/FS/FS/Conf.pm b/FS/FS/Conf.pm index 0e89008af..d09212d4a 100644 --- a/FS/FS/Conf.pm +++ b/FS/FS/Conf.pm @@ -2,6 +2,9 @@ package FS::Conf; 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; @@ -571,7 +574,7 @@ sub _orbase_items { 'key' => $_, 'base_key' => $proto->key, 'section' => $proto->section, - 'description' => 'Alternate ' . $proto->description . ' See the billing documentation for details.', + 'description' => 'Alternate ' . $proto->description . ' See the billing documentation for details.', 'type' => $proto->type, }; } &$listmaker($base); @@ -689,6 +692,14 @@ logo.png 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', 'Net 30', 'Net 45', + 'Net 60', 'Net 90' +); + my %msg_template_options = ( 'type' => 'select-sub', 'options_sub' => sub { @@ -1056,6 +1067,13 @@ my $validate_email = sub { $_[0] =~ }, { + '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', 'description' => 'Currency', @@ -1327,7 +1345,7 @@ my $validate_email = sub { $_[0] =~ { '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 billing documentation 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 billing documentation for details.', 'type' => 'textarea', }, @@ -1502,7 +1520,7 @@ and customer address. Include units.', { '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 =~ @@ -1514,7 +1532,7 @@ and customer address. Include units.', { '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 =~ @@ -1526,7 +1544,7 @@ and customer address. Include units.', { '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 =~ @@ -1537,7 +1555,7 @@ and customer address. Include units.', { '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 =~ @@ -1555,8 +1573,8 @@ and customer address. Include units.', { '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, }, @@ -1649,11 +1667,8 @@ and customer address. Include units.', 'description' => 'Optional default invoice term, used to calculate a due date printed on invoices.', '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', @@ -2101,10 +2116,13 @@ and customer address. Include units.', }, { - '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' + ], }, { @@ -2756,6 +2774,13 @@ and customer address. Include units.', }, { + 'key' => 'radius-canopy', + 'section' => '', + 'description' => 'Enable RADIUS attributes for Cambium (formerly Motorola) Canopy (Motorola-Canopy-Gateway).', + 'type' => 'checkbox', + }, + + { 'key' => 'svc_broadband-radius', 'section' => '', 'description' => 'Enable RADIUS groups for broadband services.', @@ -3221,7 +3246,7 @@ and customer address. Include units.', { 'key' => 'ticket_system', 'section' => 'ticketing', - 'description' => 'Ticketing system integration. RT_Internal uses the built-in RT ticketing system (see the integrated ticketing installation instructions). RT_External accesses an external RT installation in a separate database (local or remote).', + 'description' => 'Ticketing system integration. RT_Internal uses the built-in RT ticketing system (see the integrated ticketing installation instructions). RT_External 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) ], @@ -3276,12 +3301,14 @@ and customer address. Include units.', } }, }, + { 'key' => 'ticket_system-force_default_queueid', 'section' => 'ticketing', 'description' => 'Disallow queue selection when creating new tickets from customer view.', 'type' => 'checkbox', }, + { 'key' => 'ticket_system-selfservice_queueid', 'section' => 'ticketing', @@ -3360,6 +3387,41 @@ and customer address. Include units.', }, { + 'key' => 'ticket_system-appointment-queueid', + 'section' => 'ticketing', + 'description' => 'Ticketing queue to use for appointments.', + #false laziness w/above + 'type' => 'select-sub', + 'options_sub' => sub { + my $conf = new FS::Conf; + if ( $conf->config('ticket_system') ) { + eval "use FS::TicketSystem;"; + die $@ if $@; + FS::TicketSystem->queues(); + } else { + (); + } + }, + 'option_sub' => sub { + my $conf = new FS::Conf; + if ( $conf->config('ticket_system') ) { + eval "use FS::TicketSystem;"; + die $@ if $@; + FS::TicketSystem->queue(shift); + } else { + ''; + } + }, + }, + + { + 'key' => 'ticket_system-appointment-custom_field', + 'section' => 'ticketing', + 'description' => 'Ticketing custom field to use as an appointment classification.', + 'type' => 'text', + }, + + { 'key' => 'ticket_system-escalation', 'section' => 'ticketing', 'description' => 'Enable priority escalation of tickets as part of daily batch processing.', @@ -3451,7 +3513,7 @@ and customer address. Include units.', { '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', }, @@ -3806,6 +3868,13 @@ and customer address. Include units.', }, { + 'key' => 'invoice-all_pkg_addresses', + 'section' => 'invoicing', + 'description' => 'Show all package addresses on invoices, even the default.', + 'type' => 'checkbox', + }, + + { 'key' => 'invoice-unitprice', 'section' => 'invoicing', 'description' => 'Enable unit pricing on invoices and quantities on packages.', @@ -4146,7 +4215,14 @@ and customer address. Include units.', { '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', }, @@ -4256,10 +4332,10 @@ and customer address. Include units.', }, { - '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', }, { @@ -4270,6 +4346,14 @@ and customer address. Include units.', }, { + 'key' => 'password-insecure', + 'section' => 'password', + 'description' => 'Disable all password security checks and allow entry of insecure passwords. NOT RECOMMENDED.', + 'type' => 'checkbox', + 'per_agent' => 1, + }, + + { 'key' => 'datavolume-forcemegabytes', 'section' => 'UI', 'description' => 'All data volumes are expressed in megabytes', @@ -4534,8 +4618,8 @@ and customer address. Include units.', 'usps' => 'U.S. Postal Service', 'uscensus' => 'U.S. Census Bureau', 'ezlocate' => 'EZLocate', - 'tomtom' => 'TomTom', 'melissa' => 'Melissa WebSmart', + 'freeside' => 'Freeside web service (support contract required)', ], }, @@ -4554,13 +4638,6 @@ and customer address. Include units.', }, { - 'key' => 'tomtom-userid', - 'section' => 'UI', - 'description' => 'TomTom geocoding service API key. See the TomTom website to obtain a key. This is recommended for addresses in the United States only.', - 'type' => 'text', - }, - - { 'key' => 'ezlocate-userid', 'section' => 'UI', 'description' => 'User ID for EZ-Locate service. See the TomTom website for access and pricing information.', @@ -4683,7 +4760,7 @@ and customer address. Include units.', { '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', }, @@ -4720,19 +4797,9 @@ and customer address. Include units.', }, { - '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', }, @@ -4760,11 +4827,11 @@ and customer address. Include units.', { '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' } }, { @@ -5254,6 +5321,20 @@ and customer address. Include units.', }, { + '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', 'description' => 'GSM TAP3 Sender network (5 letter code)', @@ -5388,7 +5469,7 @@ and customer address. Include units.', { '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', }, @@ -5531,7 +5612,7 @@ and customer address. Include units.', 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; @@ -5540,7 +5621,7 @@ and customer address. Include units.', 'part_export', { 'exportnum' => shift } ); $part_export - ? $part_export->exporttype.' to '.$part_export->machine + ? $part_export->exportname : ''; }, }, @@ -5549,7 +5630,7 @@ and customer address. Include units.', { '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 { @@ -5558,7 +5639,7 @@ and customer address. Include units.', 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; @@ -5567,7 +5648,7 @@ and customer address. Include units.', 'part_export', { 'exportnum' => shift } ); $part_export - ? $part_export->exporttype.' to '.$part_export->machine + ? $part_export->exportname : ''; }, }, @@ -5727,7 +5808,7 @@ and customer address. Include units.', { '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' ], }, @@ -5819,7 +5900,7 @@ and customer address. Include units.', { '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 ],