From: Ivan Kohler Date: Sun, 15 Apr 2012 22:38:27 +0000 (-0700) Subject: add cust_class-tax_exempt conf setting to control the tax exemption flag per customer... X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=commitdiff_plain;h=2ce6ee8e5cd817a4018ad26eb1e364198c1dd931 add cust_class-tax_exempt conf setting to control the tax exemption flag per customer class rather than per indivual customer, RT#16818 --- diff --git a/FS/FS/Conf.pm b/FS/FS/Conf.pm index edfe3c27a..81443632c 100644 --- a/FS/FS/Conf.pm +++ b/FS/FS/Conf.pm @@ -4909,6 +4909,12 @@ and customer address. Include units.', 'type' => 'select-agent', }, + { + 'key' => 'cust_class-tax_exempt', + 'section' => 'billing', + 'description' => 'Control the tax exemption flag per customer class rather than per indivual customer.', + 'type' => 'checkbox', + }, { key => "apacheroot", section => "deprecated", description => "DEPRECATED", type => "text" }, { key => "apachemachine", section => "deprecated", description => "DEPRECATED", type => "text" }, diff --git a/FS/FS/Schema.pm b/FS/FS/Schema.pm index 5b8525c04..3894f65f8 100644 --- a/FS/FS/Schema.pm +++ b/FS/FS/Schema.pm @@ -1130,10 +1130,11 @@ sub tables_hashref { 'cust_class' => { 'columns' => [ - 'classnum', 'serial', '', '', '', '', - 'classname', 'varchar', '', $char_d, '', '', - 'categorynum', 'int', 'NULL', '', '', '', - 'disabled', 'char', 'NULL', 1, '', '', + 'classnum', 'serial', '', '', '', '', + 'classname', 'varchar', '', $char_d, '', '', + 'categorynum', 'int', 'NULL', '', '', '', + 'tax', 'char', 'NULL', 1, '', '', + 'disabled', 'char', 'NULL', 1, '', '', ], 'primary_key' => 'classnum', 'unique' => [], diff --git a/FS/FS/cust_class.pm b/FS/FS/cust_class.pm index a811be7a7..7cbc9b818 100644 --- a/FS/FS/cust_class.pm +++ b/FS/FS/cust_class.pm @@ -44,6 +44,11 @@ Text name of this customer class Number of associated cust_category (see L) +=item tax + +Tax exempt flag, empty or 'Y'. Used when the cust_class-tax_exempt +configuration setting is turned on. + =item disabled Disabled flag, empty or 'Y' @@ -86,6 +91,16 @@ Checks all fields to make sure this is a valid customer class. If there is an error, returns the error, otherwise returns false. Called by the insert and replace methods. +=cut + +sub check { + my $self = shift; + + $self->ut_enum('tax', [ '', 'Y' ]) + || $self->SUPER::check; + +} + =item cust_category =item category diff --git a/FS/FS/cust_main/Billing.pm b/FS/FS/cust_main/Billing.pm index 0a557fca2..ca8d9960c 100644 --- a/FS/FS/cust_main/Billing.pm +++ b/FS/FS/cust_main/Billing.pm @@ -877,7 +877,7 @@ sub _make_lines { my $part_pkg = $params{part_pkg} or die "no part_pkg specified"; my $cust_pkg = $params{cust_pkg} or die "no cust_pkg specified"; - my $precommit_hooks = $params{precommit_hooks} or die "no package specified"; + my $precommit_hooks = $params{precommit_hooks} or die "no precommit_hooks specified"; my $cust_bill_pkgs = $params{line_items} or die "no line buffer specified"; my $total_setup = $params{setup} or die "no setup accumulator specified"; my $total_recur = $params{recur} or die "no recur accumulator specified"; @@ -1178,7 +1178,11 @@ sub _handle_taxes { push @classes, 'setup' if ($cust_bill_pkg->setup && !$options->{cancel}); push @classes, 'recur' if ($cust_bill_pkg->recur && !$options->{cancel}); - if ( $self->tax !~ /Y/i && $self->payby ne 'COMP' ) { + my $exempt = $conf->exists('cust_class-tax_exempt') + ? ( $self->cust_class ? $self->cust_class->tax : '' ) + : $self->tax; + + if ( $exempt !~ /Y/i && $self->payby ne 'COMP' ) { if ( $conf->exists('enable_taxproducts') && ( scalar($part_pkg->part_pkg_taxoverride) diff --git a/httemplate/edit/cust_class.html b/httemplate/edit/cust_class.html index fdb58e687..8fce90588 100644 --- a/httemplate/edit/cust_class.html +++ b/httemplate/edit/cust_class.html @@ -1,5 +1,24 @@ <% include( 'elements/class_Common.html', - 'name' => 'Customer Class', - 'table' => 'cust_class', + 'name' => 'Customer Class', + 'table' => 'cust_class', + 'addl_fields' => \@addl_fields, + 'addl_labels' => { 'tax' => 'Tax Exempt' }, ) %> +<%init> + +my $conf = new FS::Conf; + +my @addl_fields = (); +if ( $conf->exists('cust_class-tax_exempt') ) { + push @addl_fields, { 'field' => 'tax', + 'type' => 'checkbox', + 'value' => 'Y', + }; +} else { + push @addl_fields, { 'field' => 'tax', + 'type' => 'hidden', + }; +} + + diff --git a/httemplate/edit/cust_main/billing.html b/httemplate/edit/cust_main/billing.html index 18c7ae9a6..9f4cb74cd 100644 --- a/httemplate/edit/cust_main/billing.html +++ b/httemplate/edit/cust_main/billing.html @@ -437,9 +437,17 @@ % my @exempt_groups = grep /\S/, $conf->config('tax-cust_exempt-groups'); - - tax eq "Y" ? 'CHECKED' : '' %>> Tax Exempt<% @exempt_groups ? ' (all taxes)' : '' %> - +% if ( $conf->exists('cust_class-tax_exempt') ) { + + + +% } else { + + + tax eq "Y" ? 'CHECKED' : '' %>> Tax Exempt<% @exempt_groups ? ' (all taxes)' : '' %> + + +% } % foreach my $exempt_group ( @exempt_groups ) { % #escape $exempt_group for NAME diff --git a/httemplate/edit/elements/class_Common.html b/httemplate/edit/elements/class_Common.html index 69da4db31..a0025b31f 100644 --- a/httemplate/edit/elements/class_Common.html +++ b/httemplate/edit/elements/class_Common.html @@ -34,9 +34,9 @@ my $fields = [ 'classname', ), { field=>'disabled', type=>'checkbox', value=>'Y', }, ]; -push @$fields, $opt{'addl_fields'} if $opt{'addl_fields'}; +push @$fields, @{ $opt{'addl_fields'} } if $opt{'addl_fields'}; my %addl_labels = (); -%addl_labels = %{$opt{'addl_labels'}} if $opt{'addl_labels'}; +%addl_labels = %{ $opt{'addl_labels'} } if $opt{'addl_labels'}; diff --git a/httemplate/edit/pkg_class.html b/httemplate/edit/pkg_class.html index 1bc100e36..c4e3d8ac5 100644 --- a/httemplate/edit/pkg_class.html +++ b/httemplate/edit/pkg_class.html @@ -10,7 +10,7 @@ my $conf = new FS::Conf; my %opt = (); if($conf->exists('cust_main-require_censustract')) { - $opt{'addl_fields'} = qw( fcc_ds0s ); + $opt{'addl_fields'} = [ 'fcc_ds0s' ]; $opt{'addl_labels'} = { 'fcc_ds0s' => 'FCC form 477 voice-grade equivalents' }; } diff --git a/httemplate/view/cust_main/billing.html b/httemplate/view/cust_main/billing.html index 522c6db86..4d55f7002 100644 --- a/httemplate/view/cust_main/billing.html +++ b/httemplate/view/cust_main/billing.html @@ -189,15 +189,19 @@ % my $no = emt('no'); % my @exempt_groups = grep /\S/, $conf->config('tax-cust_exempt-groups'); - - <% mt('Tax exempt') |h %><% @exempt_groups ? ' ('.emt('all taxes').')' : '' %> - <% $cust_main->tax ? $yes : $no %> - + +% unless ( $conf->exists('cust_class-tax_exempt') ) { + + <% mt('Tax exempt') |h %><% @exempt_groups ? ' ('.emt('all taxes').')' : '' %> + <% $cust_main->tax ? $yes : $no %> + +% } + % foreach my $exempt_group ( @exempt_groups ) { - - <% mt('Tax exempt') |h %> (<% $exempt_group %> taxes) - <% $cust_main->tax_exemption($exempt_group) ? $yes : $no %> - + + <% mt('Tax exempt') |h %> (<% $exempt_group %> taxes) + <% $cust_main->tax_exemption($exempt_group) ? $yes : $no %> + % } % if ( $conf->exists('enable_taxproducts') ) {