+
+ # boolean invoice_sections_by_location option is now
+ # invoice_sections_method = 'location'
+ my @invoice_sections_confs =
+ qsearch('conf', { 'name' => { op=>'LIKE', value=>'%sections_by_location' } });
+ foreach my $c (@invoice_sections_confs) {
+ $c->name =~ /^(\w+)sections_by_location$/;
+ $conf->delete($c->name);
+ my $newname = $1.'sections_method';
+ $conf->set($newname, 'location');
+ }
+
+ # boolean enable_taxproducts is now tax_data_vendor = 'cch'
+ if ( $conf->exists('enable_taxproducts') ) {
+
+ $conf->delete('enable_taxproducts');
+ $conf->set('tax_data_vendor', 'cch');
+
+ }
+
+ # boolean tax-cust_exempt-groups-require_individual_nums is now -num_req all
+ if ( $conf->exists('tax-cust_exempt-groups-require_individual_nums') ) {
+ $conf->set('tax-cust_exempt-groups-num_req', 'all');
+ $conf->delete('tax-cust_exempt-groups-require_individual_nums');
+ }
+
+ # boolean+text previous_balance-exclude_from_total is now two separate options
+ my $total_new_charges = $conf->config('previous_balance-exclude_from_total');
+ if ( defined $total_new_charges && length($total_new_charges) > 0 ) {
+ $conf->set('previous_balance-text-total_new_charges', $total_new_charges);
+ $conf->set('previous_balance-exclude_from_total', '');
+ }
+
+ # switch from specifying an email address to boolean check
+ if ( $conf->exists('batch-errors_to') ) {
+ $conf->touch('batch-errors_not_fatal');
+ $conf->delete('batch-errors_to');
+ }
+
+ if ( $conf->exists('voip-cust_email_csv_cdr') ) {
+ $conf->set('voip_cdr_email_attach', 'csv');
+ $conf->delete('voip-cust_email_csv_cdr') ;
+ }
+
+ if ($conf->exists('unsuspendauto') && !$conf->config('unsuspend_balance')) {
+ $conf->set('unsuspend_balance','Zero');
+ $conf->delete('unsuspendauto');
+ }
+
+ my $cust_fields = $conf->config('cust-fields');
+ if ( defined $cust_fields && $cust_fields =~ / \| Payment Type/ ) {
+ # so we can potentially use 'Payment Types' or somesuch in the future
+ $cust_fields =~ s/ \| Payment Type( \|)/$1/;
+ $cust_fields =~ s/ \| Payment Type$//;
+ $conf->set('cust-fields',$cust_fields);
+ }
+
+ enable_banned_pay_pad() unless length($conf->config('banned_pay-pad'));
+
+ # if translate-auto-insert is enabled for a locale, ensure that invoice
+ # terms are in the msgcat (is there a better place for this?)
+ if (my $auto_locale = $conf->config('translate-auto-insert')) {
+ my $lh = FS::L10N->get_handle($auto_locale);
+ foreach (@FS::Conf::invoice_terms) {
+ $lh->maketext($_) if length($_);
+ }
+ }
+
+ unless ( FS::upgrade_journal->is_done('deprecate_unmask_ss') ) {
+ if ( $conf->config_bool( 'unmask_ss' )) {
+ warn "'unmask_ssn' deprecated from global configuration\n";
+ for my $access_group ( qsearch( access_group => {} )) {
+ $access_group->grant_access_right( 'Unmask customer SSN' );
+ warn " - 'Unmask customer SSN' access right granted to '" .
+ $access_group->groupname . "' employee group\n";
+ }
+ }
+ FS::upgrade_journal->set_done('deprecate_unmask_ss');
+ }
+