X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;ds=sidebyside;f=FS%2FFS%2FConf.pm;h=08bdedd6fe8de5c738a9a3cc555c954b2ffe5a08;hb=d7eafc9c9aae2bf47ea19a56cc5bb1380c5874e4;hp=0cbf78baef49cb1833abd1db8cb6d12b0b159183;hpb=7ea8e16cf847c607bf917cb3b31110d18104a343;p=freeside.git diff --git a/FS/FS/Conf.pm b/FS/FS/Conf.pm index 0cbf78bae..08bdedd6f 100644 --- a/FS/FS/Conf.pm +++ b/FS/FS/Conf.pm @@ -395,6 +395,7 @@ sub verify_config_item { } else { + no warnings 'uninitialized'; $error .= "$key fails binary comparison; " unless scalar($self->config_binary($key)) eq scalar($compat->config_binary($key)); @@ -549,21 +550,36 @@ worry that config_items is freeside-specific and icky. "Solo", ); -@base_items = qw ( - invoice_template - invoice_latex - invoice_latexreturnaddress - invoice_latexfooter - invoice_latexsmallfooter - invoice_latexnotes - invoice_latexcoupon - 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 +invoice_htmlnotes +logo.png +logo.eps +); + +my %msg_template_options = ( + 'type' => 'select-sub', + 'options_sub' => sub { require FS::Record; + require FS::agent; + require FS::msg_template; + map { $_->msgnum, $_->msgname } + qsearch('msg_template', { disabled => '' }); + }, + 'option_sub' => sub { require FS::msg_template; + my $msg_template = FS::msg_template->by_key(shift); + $msg_template ? $msg_template->msgname : '' + }, +); + #Billing (81 items) #Invoicing (50 items) @@ -572,7 +588,6 @@ worry that config_items is freeside-specific and icky. #... #Unclassified (77 items) - @config_items = map { new FS::ConfItem $_ } ( { @@ -584,7 +599,7 @@ worry that config_items is freeside-specific and icky. { 'key' => 'alert_expiration', - 'section' => 'billing', + 'section' => 'notification', 'description' => 'Enable alerts about billing method expiration (i.e. expiring credit cards).', 'type' => 'checkbox', 'per_agent' => 1, @@ -592,11 +607,18 @@ worry that config_items is freeside-specific and icky. { 'key' => 'alerter_template', - 'section' => 'billing', - 'description' => 'Template file for billing method expiration alerts (i.e. expiring credit cards). See the billing documentation for details.', + 'section' => 'deprecated', + 'description' => 'Template file for billing method expiration alerts (i.e. expiring credit cards).', 'type' => 'textarea', 'per_agent' => 1, }, + + { + 'key' => 'alerter_msgnum', + 'section' => 'notification', + 'description' => 'Template to use for credit card expiration alerts.', + %msg_template_options, + }, { 'key' => 'apacheip', @@ -975,6 +997,55 @@ worry that config_items is freeside-specific and icky. 'type' => 'textarea', }, + { + 'key' => 'invoice_latextopmargin', + 'section' => 'invoicing', + 'description' => 'Optional LaTeX invoice topmargin setting. Include units.', + 'type' => 'text', + 'per_agent' => 1, + 'validate' => sub { shift =~ + /^-?\d*\.?\d+(in|mm|cm|pt|em|ex|pc|bp|dd|cc|sp)$/ + ? '' : 'Invalid LaTex length'; + }, + }, + + { + 'key' => 'invoice_latexheadsep', + 'section' => 'invoicing', + 'description' => 'Optional LaTeX invoice headsep setting. Include units.', + 'type' => 'text', + 'per_agent' => 1, + 'validate' => sub { shift =~ + /^-?\d*\.?\d+(in|mm|cm|pt|em|ex|pc|bp|dd|cc|sp)$/ + ? '' : 'Invalid LaTex length'; + }, + }, + + { + 'key' => 'invoice_latexaddresssep', + 'section' => 'invoicing', + 'description' => 'Optional LaTeX invoice separation between invoice header +and customer address. Include units.', + 'type' => 'text', + 'per_agent' => 1, + 'validate' => sub { shift =~ + /^-?\d*\.?\d+(in|mm|cm|pt|em|ex|pc|bp|dd|cc|sp)$/ + ? '' : 'Invalid LaTex length'; + }, + }, + + { + 'key' => 'invoice_latextextheight', + 'section' => 'invoicing', + 'description' => 'Optional LaTeX invoice textheight setting. Include units.', + 'type' => 'text', + 'per_agent' => 1, + 'validate' => sub { shift =~ + /^-?\d*\.?\d+(in|mm|cm|pt|em|ex|pc|bp|dd|cc|sp)$/ + ? '' : 'Invalid LaTex length'; + }, + }, + { 'key' => 'invoice_latexnotes', 'section' => 'invoicing', @@ -1007,6 +1078,53 @@ worry that config_items is freeside-specific and icky. 'per_agent' => 1, }, + { + 'key' => 'invoice_latexextracouponspace', + 'section' => 'invoicing', + 'description' => 'Optional LaTeX invoice textheight space to reserve for a tear off coupon. Include units.', + 'type' => 'text', + 'per_agent' => 1, + 'validate' => sub { shift =~ + /^-?\d*\.?\d+(in|mm|cm|pt|em|ex|pc|bp|dd|cc|sp)$/ + ? '' : 'Invalid LaTex length'; + }, + }, + + { + 'key' => 'invoice_latexcouponfootsep', + 'section' => 'invoicing', + 'description' => 'Optional LaTeX invoice separation between tear off coupon and footer. Include units.', + 'type' => 'text', + 'per_agent' => 1, + 'validate' => sub { shift =~ + /^-?\d*\.?\d+(in|mm|cm|pt|em|ex|pc|bp|dd|cc|sp)$/ + ? '' : 'Invalid LaTex length'; + }, + }, + + { + 'key' => 'invoice_latexcouponamountenclosedsep', + 'section' => 'invoicing', + 'description' => 'Optional LaTeX invoice separation between total due and amount enclosed line. Include units.', + 'type' => 'text', + 'per_agent' => 1, + 'validate' => sub { shift =~ + /^-?\d*\.?\d+(in|mm|cm|pt|em|ex|pc|bp|dd|cc|sp)$/ + ? '' : 'Invalid LaTex length'; + }, + }, + { + 'key' => 'invoice_latexcoupontoaddresssep', + 'section' => 'invoicing', + 'description' => 'Optional LaTeX invoice separation between invoice data and the to address (usually invoice_latexreturnaddress). Include units.', + 'type' => 'text', + 'per_agent' => 1, + 'validate' => sub { shift =~ + /^-?\d*\.?\d+(in|mm|cm|pt|em|ex|pc|bp|dd|cc|sp)$/ + ? '' : 'Invalid LaTex length'; + }, + }, + { 'key' => 'invoice_latexreturnaddress', 'section' => 'invoicing', @@ -1014,6 +1132,22 @@ worry that config_items is freeside-specific and icky. 'type' => 'textarea', }, + { + 'key' => 'invoice_latexverticalreturnaddress', + 'section' => 'invoicing', + 'description' => 'Place the return address under the company logo rather than beside it.', + 'type' => 'checkbox', + 'per_agent' => 1, + }, + + { + 'key' => 'invoice_latexcouponaddcompanytoaddress', + 'section' => 'invoicing', + 'description' => 'Add the company name to the To address on the remittance coupon because the return address does not contain it.', + 'type' => 'checkbox', + 'per_agent' => 1, + }, + { 'key' => 'invoice_latexsmallfooter', 'section' => 'invoicing', @@ -1048,7 +1182,7 @@ worry that config_items is freeside-specific and icky. 'section' => 'invoicing', 'description' => 'Optional default invoice term, used to calculate a due date printed on invoices.', 'type' => 'select', - 'select_enum' => [ '', 'Payable upon receipt', 'Net 0', 'Net 10', 'Net 15', 'Net 20', 'Net 30', 'Net 45', 'Net 60' ], + 'select_enum' => [ '', 'Payable upon receipt', 'Net 0', 'Net 10', 'Net 15', 'Net 20', 'Net 21', 'Net 30', 'Net 45', 'Net 60', 'Net 90' ], }, { @@ -1107,16 +1241,30 @@ worry that config_items is freeside-specific and icky. 'type' => 'checkbox', }, + { + 'key' => 'payment_receipt', + 'section' => 'notification', + 'description' => 'Send payment receipts.', + 'type' => 'checkbox', + }, + + { + 'key' => 'payment_receipt_msgnum', + 'section' => 'notification', + 'description' => 'Template to use for payment receipts.', + %msg_template_options, + }, + { '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$pkg
- Package (requires payment_receipt-trigger set to "when payment is applied".)$username
$password
$first
$last
$pkg
$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
$payby
$expdate
most likely only confuse
'type' => 'textarea',
@@ -2922,6 +3232,26 @@ worry that config_items is freeside-specific and icky.
},
},
+ {
+ 'key' => 'prepayment_discounts-credit_type',
+ 'section' => 'billing',
+ 'description' => 'Enables the offering of prepayment discounts and establishes the credit reason type.',
+ 'type' => 'select-sub',
+ 'options_sub' => sub { require FS::Record;
+ require FS::reason_type;
+ map { $_->typenum => $_->type }
+ FS::Record::qsearch('reason_type', { class=>'R' } );
+ },
+ 'option_sub' => sub { require FS::Record;
+ require FS::reason_type;
+ my $reason_type = FS::Record::qsearchs(
+ 'reason_type', { 'typenum' => shift }
+ );
+ $reason_type ? $reason_type->type : '';
+ },
+
+ },
+
{
'key' => 'cust_main-agent_custid-format',
'section' => '',
@@ -3011,7 +3341,7 @@ worry that config_items is freeside-specific and icky.
'section' => 'UI',
'description' => 'The year to use in census tract lookups',
'type' => 'select',
- 'select_enum' => [ qw( 2009 2008 2007 2006 ) ],
+ 'select_enum' => [ qw( 2010 2009 2008 ) ],
},
{
@@ -3056,6 +3386,13 @@ worry that config_items is freeside-specific and icky.
'type' => 'checkbox',
},
+ {
+ 'key' => 'cust_main-title-display_custnum',
+ 'section' => 'UI',
+ 'description' => 'Add the display_custom (agent_custid or custnum) to the title on customer view pages.',
+ 'type' => 'checkbox',
+ },
+
{
'key' => 'cust_bill-default_agent_invid',
'section' => 'UI',
@@ -3080,6 +3417,13 @@ worry that config_items is freeside-specific and icky.
'type' => 'text',
},
+ {
+ 'key' => 'order_pkg-no_start_date',
+ 'section' => 'UI',
+ 'description' => 'Don\'t set a default start date for new packages.',
+ 'type' => 'checkbox',
+ },
+
{
'key' => 'mcp_svcpart',
'section' => '',
@@ -3381,6 +3725,22 @@ worry that config_items is freeside-specific and icky.
'type' => 'text',
},
+ {
+ 'key' => 'cdr-charged_party-field',
+ 'section' => '',
+ 'description' => 'Set the charged_party field of CDRs to this field.',
+ 'type' => 'select-sub',
+ 'options_sub' => sub { my $fields = FS::cdr->table_info->{'fields'};
+ map { $_ => $fields->{$_}||$_ }
+ grep { $_ !~ /^(acctid|charged_party)$/ }
+ FS::Schema::dbdef->table('cdr')->columns;
+ },
+ 'option_sub' => sub { my $f = shift;
+ FS::cdr->table_info->{'fields'}{$f} || $f;
+ },
+ },
+
+ #probably deprecate in favor of cdr-charged_party-field above
{
'key' => 'cdr-charged_party-accountcode',
'section' => '',
@@ -3465,6 +3825,14 @@ worry that config_items is freeside-specific and icky.
'type' => 'text',
},
+ {
+ 'key' => 'mc-outbound_packages',
+ 'section' => '',
+ 'description' => "Don't use this.",
+ 'type' => 'select-part_pkg',
+ 'multiple' => 1,
+ },
+
{
'key' => 'disable-cust-pkg_class',
'section' => 'UI',
@@ -3638,6 +4006,68 @@ worry that config_items is freeside-specific and icky.
'type' => 'checkbox',
},
+ {
+ 'key' => 'cust_main-exports',
+ 'section' => '',
+ 'description' => 'Export(s) to call on cust_main insert, modification and deletion.',
+ 'type' => 'select-sub',
+ 'multiple' => 1,
+ 'options_sub' => sub {
+ require FS::Record;
+ require FS::part_export;
+ my @part_export =
+ map { qsearch( 'part_export', {exporttype => $_ } ) }
+ keys %{FS::part_export::export_info('cust_main')};
+ map { $_->exportnum => $_->exporttype.' to '.$_->machine } @part_export;
+ },
+ 'option_sub' => sub {
+ require FS::Record;
+ require FS::part_export;
+ my $part_export = FS::Record::qsearchs(
+ 'part_export', { 'exportnum' => shift }
+ );
+ $part_export
+ ? $part_export->exporttype.' to '.$part_export->machine
+ : '';
+ },
+ },
+
+ {
+ 'key' => 'cust_tag-location',
+ 'section' => 'UI',
+ 'description' => 'Location where customer tags are displayed.',
+ 'type' => 'select',
+ 'select_enum' => [ 'misc_info', 'top' ],
+ },
+
+ {
+ 'key' => 'maestro-status_test',
+ 'section' => 'UI',
+ 'description' => 'Display a link to the maestro status test page on the customer view page',
+ 'type' => 'checkbox',
+ },
+
+ {
+ 'key' => 'cust_main-custom_link',
+ 'section' => 'UI',
+ 'description' => 'URL to use as source for the "Custom" tab in the View Customer page. The custnum will be appended.',
+ 'type' => 'text',
+ },
+
+ {
+ 'key' => 'cust_main-custom_title',
+ 'section' => 'UI',
+ 'description' => 'Title for the "Custom" tab in the View Customer page.',
+ 'type' => 'text',
+ },
+
+ {
+ 'key' => 'part_pkg-default_suspend_bill',
+ 'section' => 'billing',
+ 'description' => 'Default the "Continue recurring billing while suspended" flag to on for new package definitions.',
+ 'type' => 'checkbox',
+ },
+
{ key => "apacheroot", section => "deprecated", description => "DEPRECATED", type => "text" },
{ key => "apachemachine", section => "deprecated", description => "DEPRECATED", type => "text" },
{ key => "apachemachines", section => "deprecated", description => "DEPRECATED", type => "text" },