X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2FConf.pm;h=ebfad2c361514c31db13dfa5c41c43e2f17d5882;hb=b45292bc0dcdf4604a97fca130dc2a3bc54a9f49;hp=73ca9073b7ee8515483a31b4042ec4a96614abfe;hpb=2ae0d46c96d1272f8c33c60bc80ac55a7f2ef0e7;p=freeside.git diff --git a/FS/FS/Conf.pm b/FS/FS/Conf.pm index 73ca9073b..ebfad2c36 100644 --- a/FS/FS/Conf.pm +++ b/FS/FS/Conf.pm @@ -8,6 +8,7 @@ use MIME::Base64; use FS::ConfItem; use FS::ConfDefaults; use FS::Conf_compat17; +use FS::payby; use FS::conf; use FS::Record qw(qsearch qsearchs); use FS::UID qw(dbh datasrc use_confcompat); @@ -91,13 +92,14 @@ sub _usecompat { $compat->$method(@_); } +# needs a non _ name, called externally by config-view now (and elsewhere?) sub _config { my($self,$name,$agentnum)=@_; my $hashref = { 'name' => $name }; $hashref->{agentnum} = $agentnum; local $FS::Record::conf = undef; # XXX evil hack prevents recursion my $cv = FS::Record::qsearchs('conf', $hashref); - if (!$cv && defined($agentnum)) { + if (!$cv && defined($agentnum) && $agentnum) { $hashref->{agentnum} = ''; $cv = FS::Record::qsearchs('conf', $hashref); } @@ -108,7 +110,11 @@ sub config { my $self = shift; return $self->_usecompat('config', @_) if use_confcompat; - my($name,$agentnum)=@_; + my($name, $agentnum)=@_; + + carp "FS::Conf->config($name, $agentnum) called" + if $DEBUG > 1; + my $cv = $self->_config($name, $agentnum) or return; if ( wantarray ) { @@ -146,7 +152,11 @@ sub exists { my $self = shift; return $self->_usecompat('exists', @_) if use_confcompat; - my($name,$agentnum)=@_; + my($name, $agentnum)=@_; + + carp "FS::Conf->exists($name, $agentnum) called" + if $DEBUG > 1; + defined($self->_config($name, $agentnum)); } @@ -326,7 +336,7 @@ sub import_config_item { warn "Inserting $key\n" if $DEBUG; local $/; my $value = readline(new IO::File "$dir/$key"); - if ($item->type eq 'binary') { + if ($item->type =~ /^(binary|image)$/ ) { $self->set_binary($key, $value); }else{ $self->set($key, $value); @@ -355,7 +365,8 @@ sub verify_config_item { $error .= "$key fails existential comparison; " if $self->exists($key) xor $compat->exists($key); - unless ($type eq 'binary') { + if ( $type !~ /^(binary|image)$/ ) { + { no warnings; $error .= "$key fails scalar comparison; " @@ -372,22 +383,24 @@ sub verify_config_item { $error .= "$key fails list comparison; " unless $r; } - } - if ($type eq 'binary') { + } else { + $error .= "$key fails binary comparison; " unless scalar($self->config_binary($key)) eq scalar($compat->config_binary($key)); - } - if ($error =~ /existential comparison/ && $item->section eq 'deprecated') { - my $proto; - for ( @config_items ) { $proto = $_; last if $proto->key eq $key; } - unless ($proto->key eq $key) { - warn "removed config item $error\n" if $DEBUG; - $error = ''; - } } +#remove deprecated config on our own terms, not freeside-upgrade's +# if ($error =~ /existential comparison/ && $item->section eq 'deprecated') { +# my $proto; +# for ( @config_items ) { $proto = $_; last if $proto->key eq $key; } +# unless ($proto->key eq $key) { +# warn "removed config item $error\n" if $DEBUG; +# $error = ''; +# } +# } + $error; } @@ -439,11 +452,12 @@ sub _orbase_items { die "don't know about $base items" unless $proto->key eq $base; map { new FS::ConfItem { - 'key' => $_, - 'section' => $proto->section, - 'description' => 'Alternate ' . $proto->description . ' See the billing documentation for details.', - 'type' => $proto->type, - }; + 'key' => $_, + 'base_key' => $proto->key, + 'section' => $proto->section, + 'description' => 'Alternate ' . $proto->description . ' See the billing documentation for details.', + 'type' => $proto->type, + }; } &$listmaker($base); } @base_items, ); @@ -471,7 +485,7 @@ sub config_items { =item init-config DIR -Imports the non-deprecated configuration items from DIR (1.7 compatible) +Imports the configuration items from DIR (1.7 compatible) to conf records in the database. =cut @@ -533,21 +547,7 @@ worry that config_items is freeside-specific and icky. invoice_latexfooter invoice_latexsmallfooter invoice_latexnotes - invoice_html - invoice_htmlreturnaddress - invoice_htmlfooter - invoice_htmlnotes - logo.png - logo.eps - ); - -@base_items = qw ( - invoice_template - invoice_latex - invoice_latexreturnaddress - invoice_latexfooter - invoice_latexsmallfooter - invoice_latexnotes + invoice_latexcoupon invoice_html invoice_htmlreturnaddress invoice_htmlfooter @@ -568,14 +568,18 @@ worry that config_items is freeside-specific and icky. { 'key' => 'alerter_template', 'section' => 'billing', - 'description' => 'Template file for billing method expiration alerts. See the billing documentation for details.', + 'description' => 'Template file for billing method expiration alerts. See the billing documentation for details.', 'type' => 'textarea', + 'per-agent' => 1, }, { 'key' => 'apacheip', - 'section' => 'deprecated', - 'description' => 'DEPRECATED, add an apache export instead. Used to be the current IP address to assign to new virtual hosts', + #not actually deprecated yet + #'section' => 'deprecated', + #'description' => 'DEPRECATED, add an apache export instead. Used to be the current IP address to assign to new virtual hosts', + 'section' => '', + 'description' => 'IP address to assign to new virtual hosts', 'type' => 'text', }, @@ -621,6 +625,17 @@ worry that config_items is freeside-specific and icky. 'type' => 'textarea', }, + { + 'key' => 'business-onlinepayment-namespace', + 'section' => 'billing', + 'description' => 'Specifies which perl module namespace (which group of collection routines) is used by default.', + 'type' => 'select', + 'select_hash' => [ + 'Business::OnlinePayment' => 'Direct API (Business::OnlinePayment)', + 'Business::OnlineThirdPartyPayment' => 'Web API (Business::ThirdPartyPayment)', + ], + }, + { 'key' => 'business-onlinepayment-description', 'section' => 'billing', @@ -676,8 +691,11 @@ worry that config_items is freeside-specific and icky. { 'key' => 'deletecredits', - 'section' => 'deprecated', - 'description' => 'DEPRECATED, now controlled by ACLs. Used to enable deletion of unclosed credits. Be very careful! Only delete credits that were data-entry errors, not adjustments. Optionally specify one or more comma-separated email addresses to be notified when a credit is deleted.', + #not actually deprecated yet + #'section' => 'deprecated', + #'description' => 'DEPRECATED, now controlled by ACLs. Used to enable deletion of unclosed credits. Be very careful! Only delete credits that were data-entry errors, not adjustments. Optionally specify one or more comma-separated email addresses to be notified when a credit is deleted.', + 'section' => '', + 'description' => 'One or more comma-separated email addresses to be notified when a credit is deleted.', 'type' => [qw( checkbox text )], }, @@ -744,6 +762,13 @@ worry that config_items is freeside-specific and icky. 'type' => 'textarea', }, + { + 'key' => 'auto_router', + 'section' => '', + 'description' => 'Automatically choose the correct router/block based on supplied ip address when possible while provisioning broadband services', + 'type' => 'checkbox', + }, + { 'key' => 'hidecancelledpackages', 'section' => 'UI', @@ -770,19 +795,28 @@ worry that config_items is freeside-specific and icky. 'section' => 'required', 'description' => 'Return address on email invoices', 'type' => 'text', + 'per_agent' => 1, + }, + + { + 'key' => 'invoice_subject', + 'section' => 'billing', + 'description' => 'Subject: header on email invoices. Defaults to "Invoice". The following substitutions are available: $name, $name_short, $invoice_number, and $invoice_date.', + 'type' => 'text', + 'per_agent' => 1, }, { 'key' => 'invoice_template', 'section' => 'billing', - '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', }, { 'key' => 'invoice_html', 'section' => 'billing', - 'description' => 'Optional HTML template for invoices. See the billing documentation for details.', + 'description' => 'Optional HTML template for invoices. See the billing documentation for details.', 'type' => 'textarea', }, @@ -792,6 +826,7 @@ worry that config_items is freeside-specific and icky. 'section' => 'billing', 'description' => 'Notes section for HTML invoices. Defaults to the same data in invoice_latexnotes if not specified.', 'type' => 'textarea', + 'per_agent' => 1, }, { @@ -799,6 +834,7 @@ worry that config_items is freeside-specific and icky. 'section' => 'billing', 'description' => 'Footer for HTML invoices. Defaults to the same data in invoice_latexfooter if not specified.', 'type' => 'textarea', + 'per_agent' => 1, }, { @@ -811,7 +847,7 @@ worry that config_items is freeside-specific and icky. { 'key' => 'invoice_latex', 'section' => 'billing', - 'description' => 'Optional LaTeX template for typeset PostScript invoices. See the billing documentation for details.', + 'description' => 'Optional LaTeX template for typeset PostScript invoices. See the billing documentation for details.', 'type' => 'textarea', }, @@ -820,6 +856,7 @@ worry that config_items is freeside-specific and icky. 'section' => 'billing', 'description' => 'Notes section for LaTeX typeset PostScript invoices.', 'type' => 'textarea', + 'per_agent' => 1, }, { @@ -827,6 +864,15 @@ worry that config_items is freeside-specific and icky. 'section' => 'billing', 'description' => 'Footer for LaTeX typeset PostScript invoices.', 'type' => 'textarea', + 'per_agent' => 1, + }, + + { + 'key' => 'invoice_latexcoupon', + 'section' => 'billing', + 'description' => 'Remittance coupon for LaTeX typeset PostScript invoices.', + 'type' => 'textarea', + 'per_agent' => 1, }, { @@ -841,6 +887,7 @@ worry that config_items is freeside-specific and icky. 'section' => 'billing', 'description' => 'Optional small footer for multi-page LaTeX typeset PostScript invoices.', 'type' => 'textarea', + 'per_agent' => 1, }, { @@ -873,10 +920,17 @@ worry that config_items is freeside-specific and icky. 'type' => 'checkbox', }, + { + 'key' => 'separate_usage', + 'section' => 'billing', + 'description' => 'Split the rated call usage into a separate line from the recurring charges.', + 'type' => 'checkbox', + }, + { 'key' => 'payment_receipt_email', 'section' => 'billing', - 'description' => 'Template file for payment receipts. Payment receipts are sent to the customer email invoice destination(s) when a payment is received. See the Text::Template documentation for details on the template substitution language. The following variables are available:
$date
$name
$paynum
- Freeside payment number $paid
- Amount of payment $payby
- Payment type (Card, Check, Electronic check, etc.) $payinfo
- Masked credit card number or check number $balance
- New balance$date
$name
$paynum
- Freeside payment number $paid
- Amount of payment $payby
- Payment type (Card, Check, Electronic check, etc.) $payinfo
- Masked credit card number or check number $balance
- New balance$username
$password
$first
$last
$pkg
$username
$password
$first
$last
$pkg
$first, $last, etc
). The following additional variables are available$payby
- a friendler represenation of the field$payinfo
- the masked payment information$expdate
- the time at which the payment method expires (a UNIX timestamp)$returnaddress
- the invoice return address for this customer\'s agent$first, $last, etc
). The following additional variables are available$payby
- a friendler represenation of the field$payinfo
- the masked payment information$expdate
- the time at which the payment method expires (a UNIX timestamp)$returnaddress
- the invoice return address for this customer\'s agent$username
$password
$first
$last
$pkg
$column
$amount
$threshold
$username
$password
$first
$last
$pkg
$column
$amount
$threshold
$packages
allowing $packages->[0]
thru $packages->[n]
$package
the first package, same as $packages->[0]
$recurdates
allowing $recurdates->[0]
thru $recurdates->[n]
$recurdate
the first recurdate, same as $recurdate->[0]
$first
$last
$packages
allowing $packages->[0]
thru $packages->[n]
$package
the first package, same as $packages->[0]
$recurdates
allowing $recurdates->[0]
thru $recurdates->[n]
$recurdate
the first recurdate, same as $recurdate->[0]
$first
$last
$payby
$expdate
most likely only confuse
'type' => 'textarea',
},
@@ -2055,15 +2347,18 @@ worry that config_items is freeside-specific and icky.
{
'key' => 'logo.png',
'section' => 'billing', #?
- 'description' => 'An image to include in some types of invoices',
- 'type' => 'binary',
+ 'description' => 'Company logo for HTML invoices and the backoffice interface, in PNG format. Suggested size somewhere near 92x62.',
+ 'type' => 'image',
+ 'per_agent' => 1, #XXX just view/logo.cgi, which is for the global
+ #old-style editor anyway...?
},
{
'key' => 'logo.eps',
'section' => 'billing', #?
- 'description' => 'An image to include in some types of invoices',
- 'type' => 'binary',
+ 'description' => 'Company logo for printed and PDF invoices, in EPS format.',
+ 'type' => 'image',
+ 'per_agent' => 1, #XXX as above, kinda
},
{
@@ -2133,7 +2428,7 @@ worry that config_items is freeside-specific and icky.
{
'key' => 'cust_main-require_phone',
'section' => '',
- 'description' => 'Require daytime or night for all customer records.',
+ 'description' => 'Require daytime or night phone for all customer records.',
'type' => 'checkbox',
},
@@ -2172,8 +2467,8 @@ worry that config_items is freeside-specific and icky.
{
'key' => 'referral_credit_type',
- 'section' => 'billing',
- 'description' => 'The group to use for new, automatically generated credit reasons resulting from referrals.',
+ 'section' => 'deprecated',
+ 'description' => 'Used to be the group to use for new, automatically generated credit reasons resulting from referrals. Now set in a package billing event for the referral.',
'type' => 'select-sub',
'options_sub' => sub { require FS::Record;
require FS::reason_type;
@@ -2222,7 +2517,7 @@ worry that config_items is freeside-specific and icky.
{
'key' => 'card_masking_method',
'section' => 'UI',
- 'description' => 'Digits to display when masking credit cards. Note that the first six digits are necessary to canonically identify the credit card type (Visa/MC, Amex, Discover, Maestro, etc.) in all cases. The first four digits can identify the most common credit card types in most cases (Visa/MC, Amex, and Discover). The first two digits can distinguish between Visa/MC and Amex.',
+ 'description' => 'Digits to display when masking credit cards. Note that the first six digits are necessary to canonically identify the credit card type (Visa/MC, Amex, Discover, Maestro, etc.) in all cases. The first four digits can identify the most common credit card types in most cases (Visa/MC, Amex, and Discover). The first two digits can distinguish between Visa/MC and Amex. Note: You should manually remove stored paymasks if you change this value on an existing database, to avoid problems using stored cards.',
'type' => 'select',
'select_hash' => [
'' => '123456xxxxxx1234',
@@ -2243,6 +2538,13 @@ worry that config_items is freeside-specific and icky.
'type' => 'checkbox',
},
+ {
+ 'key' => 'previous_balance-summary_only',
+ 'section' => 'billing',
+ 'description' => 'Only show a single line summarizing the total previous balance rather than one line per invoice.',
+ 'type' => 'checkbox',
+ },
+
{
'key' => 'usps_webtools-userid',
'section' => 'UI',
@@ -2264,6 +2566,222 @@ worry that config_items is freeside-specific and icky.
'type' => 'checkbox',
},
+ {
+ 'key' => 'disable_acl_changes',
+ 'section' => '',
+ 'description' => 'Disable all ACL changes, for demos.',
+ 'type' => 'checkbox',
+ },
+
+ {
+ 'key' => 'cust_main-edit_agent_custid',
+ 'section' => 'UI',
+ 'description' => 'Enable editing of the agent_custid field.',
+ 'type' => 'checkbox',
+ },
+
+ {
+ 'key' => 'cust_main-default_agent_custid',
+ 'section' => 'UI',
+ 'description' => 'Display the agent_custid field instead of the custnum field.',
+ 'type' => 'checkbox',
+ },
+
+ {
+ 'key' => 'cust_main-auto_agent_custid',
+ 'section' => 'UI',
+ 'description' => 'Automatically assign an agent_custid - select format',
+ 'type' => 'select',
+ 'select_hash' => [ '' => 'No',
+ '1YMMXXXXXXXX' => '1YMMXXXXXXXX',
+ ],
+ },
+
+ {
+ 'key' => 'cust_main-default_areacode',
+ 'section' => 'UI',
+ 'description' => 'Default area code for customers.',
+ 'type' => 'text',
+ },
+
+ {
+ 'key' => 'mcp_svcpart',
+ 'section' => '',
+ 'description' => 'Master Control Program svcpart. Leave this blank.',
+ 'type' => 'text',
+ },
+
+ {
+ 'key' => 'cust_bill-max_same_services',
+ 'section' => 'billing',
+ 'description' => 'Maximum number of the same service to list individually on invoices before condensing to a single line listing the number of services. Defaults to 5.',
+ 'type' => 'text',
+ },
+
+ {
+ 'key' => 'suspend_email_admin',
+ 'section' => '',
+ 'description' => 'Destination admin email address to enable suspension notices',
+ 'type' => 'text',
+ },
+
+ {
+ 'key' => 'email_report-subject',
+ 'section' => '',
+ 'description' => 'Subject for reports emailed by freeside-fetch. Defaults to "Freeside report".',
+ 'type' => 'text',
+ },
+
+ {
+ 'key' => 'selfservice-head',
+ 'section' => '',
+ 'description' => 'HTML for the HEAD section of the self-service interface, typically used for LINK stylesheet tags',
+ 'type' => 'textarea', #htmlarea?
+ },
+
+
+ {
+ 'key' => 'selfservice-body_header',
+ 'section' => '',
+ 'description' => 'HTML header for the self-service interface',
+ 'type' => 'textarea', #htmlarea?
+ },
+
+ {
+ 'key' => 'selfservice-body_footer',
+ 'section' => '',
+ 'description' => 'HTML header for the self-service interface',
+ 'type' => 'textarea', #htmlarea?
+ },
+
+
+ {
+ 'key' => 'selfservice-body_bgcolor',
+ 'section' => '',
+ 'description' => 'HTML background color for the self-service interface, for example, #FFFFFF',
+ 'type' => 'text',
+ },
+
+ {
+ 'key' => 'selfservice-box_bgcolor',
+ 'section' => '',
+ 'description' => 'HTML color for self-service interface input boxes, for example, #C0C0C0"',
+ 'type' => 'text',
+ },
+
+ {
+ 'key' => 'signup-no_company',
+ 'section' => '',
+ 'description' => "Don't display a field for company name on signup.",
+ 'type' => 'checkbox',
+ },
+
+ {
+ 'key' => 'signup-recommend_email',
+ 'section' => '',
+ 'description' => 'Encourage the entry of an invoicing email address on signup.',
+ 'type' => 'checkbox',
+ },
+
+ {
+ 'key' => 'signup-recommend_daytime',
+ 'section' => '',
+ 'description' => 'Encourage the entry of a daytime phone number invoicing email address on signup.',
+ 'type' => 'checkbox',
+ },
+
+ {
+ 'key' => 'svc_phone-radius-default_password',
+ 'section' => '',
+ 'description' => 'Default password when exporting svc_phone records to RADIUS',
+ 'type' => 'text',
+ },
+
+ {
+ 'key' => 'svc_phone-allow_alpha_phonenum',
+ 'section' => '',
+ 'description' => 'Allow letters in phone numbers.',
+ 'type' => 'checkbox',
+ },
+
+ {
+ 'key' => 'default_phone_countrycode',
+ 'section' => '',
+ 'description' => 'Default countrcode',
+ 'type' => 'text',
+ },
+
+ {
+ 'key' => 'cdr-charged_party-accountcode',
+ 'section' => '',
+ 'description' => 'Set the charged_party field of CDRs to the accountcode.',
+ 'type' => 'checkbox',
+ },
+
+ {
+ 'key' => 'cdr-charged_party_rewrite',
+ 'section' => '',
+ 'description' => 'Do charged party rewriting in the freeside-cdrrewrited daemon; useful if CDRs are being dropped off directly in the database and require special charged_party processing such as cdr-charged_party-accountcode.',
+ 'type' => 'checkbox',
+ },
+
+ {
+ 'key' => 'cdr-taqua-da_rewrite',
+ 'section' => '',
+ 'description' => 'For the Taqua CDR format, a comma-separated list of directory assistance 800 numbers. Any CDRs with these numbers as "BilledNumber" will be rewritten to the "CallingPartyNumber" (and CallType "12") on import.',
+ 'type' => 'text',
+ },
+
+ {
+ 'key' => 'cust_pkg-show_autosuspend',
+ 'section' => 'UI',
+ 'description' => 'Show package auto-suspend dates. Use with caution for now; can slow down customer view for large insallations.',
+ 'type' => 'checkbox',
+ },
+
+ {
+ 'key' => 'cdr-asterisk_forward_rewrite',
+ 'section' => '',
+ 'description' => 'Enable special processing for CDRs representing forwarded calls: For CDRs that have a dcontext that starts with "Local/" but does not match dst, set charged_party to dst, parse a new dst from dstchannel, and set amaflags to "2" ("BILL"/"BILLING").',
+ 'type' => 'checkbox',
+ },
+
+ {
+ 'key' => 'sg-multicustomer_hack',
+ 'section' => '',
+ 'description' => "Don't use this.",
+ 'type' => 'checkbox',
+ },
+
+ {
+ 'key' => 'disable-cust-pkg_class',
+ 'section' => 'UI',
+ 'description' => 'Disable the two-step dropdown for selecting package class and package, and return to the classic single dropdown.',
+ 'type' => 'checkbox',
+ },
+
+ {
+ 'key' => 'queued-max_kids',
+ 'section' => '',
+ 'description' => 'Maximum number of queued processes. Defaults to 10.',
+ 'type' => 'text',
+ },
+
+ {
+ 'key' => 'cancelled_cust-noevents',
+ 'section' => 'billing',
+ 'description' => "Don't run events for cancelled customers",
+ 'type' => 'checkbox',
+ },
+
+ {
+ 'key' => 'agent-invoice_template',
+ 'section' => 'billing',
+ 'description' => 'Enable display/edit of old-style per-agent invoice template selection',
+ 'type' => 'checkbox',
+ },
+
);
1;
+