<% include( 'elements/browse.html', 'title' => "Tax Rates $title", 'name_singular' => 'tax rate', 'menubar' => \@menubar, 'html_init' => $html_init, 'html_posttotal' => $html_posttotal, 'query' => { 'table' => 'cust_main_county', 'hashref' => $hashref, 'order_by' => 'ORDER BY country, state, county, taxclass', }, 'count_query' => $count_query, 'header' => \@header, 'header2' => \@header2, 'fields' => \@fields, 'align' => $align, 'color' => \@color, 'cell_style' => \@cell_style, 'links' => \@links, 'link_onclicks' => \@link_onclicks, ) %> % % # collapse state % # % } % <%once> my $conf = new FS::Conf; my $money_char = $conf->config('money_char') || '$'; my @manual_countries = ( 'US', 'CA', 'AU', 'NZ', 'GB' ); #some manual ordering my @all_countries = ( @manual_countries, grep { my $c = $_; ! grep { $c eq $_ } @manual_countries } map { $_->country } qsearch({ 'select' => 'country', 'table' => 'cust_main_county', 'hashref' => {}, 'extra_sql' => 'GROUP BY country', }) ); my $exempt_sub = sub { my $cust_main_county = shift; my @exempt = (); push @exempt, sprintf("$money_char%.2f per month", $cust_main_county->exempt_amount ) if $cust_main_county->exempt_amount > 0; push @exempt, 'Setup fee' if $cust_main_county->setuptax =~ /^Y$/i; push @exempt, 'Recurring fee' if $cust_main_county->recurtax =~ /^Y$/i; [ map [ {'data'=>$_} ], @exempt ]; }; my $oldrow; my $cell_style; my $cell_style_sub = sub { my $row = shift; if ( $oldrow ne $row ) { if ( $oldrow ) { if ( $oldrow->country ne $row->country ) { $cell_style = 'border-top:1px solid #000000'; } elsif ( $oldrow->state ne $row->state ) { $cell_style = 'border-top:1px solid #cccccc'; #default? } elsif ( $oldrow->state eq $row->state ) { #$cell_style = 'border-top:dashed 1px dark gray'; $cell_style = 'border-top:1px dashed #cccccc'; } } $oldrow = $row; } return $cell_style; }; #my $edit_link = [ "${p}edit/cust_main_county.html", 'taxnum' ]; my $edit_link = [ 'javascript:void(0);', sub { ''; } ]; my $edit_onclick = sub { my $row = shift; my $taxnum = $row->taxnum; my $color = '#333399'; qq!overlib( OLiframeContent('${p}edit/cust_main_county.html?$taxnum', 540, 420, 'edit_cust_main_county_popup' ), CAPTION, 'Edit tax rate', STICKY, AUTOSTATUSCAP, MIDX, 0, MIDY, 0, DRAGGABLE, CLOSECLICK, BGCOLOR, '$color', CGCOLOR, '$color' ); return false;!; }; sub expand_link { my( $row, $desc ) = @_; my $taxnum = $row->taxnum; my $url = "${p}edit/cust_main_county-expand.cgi?$taxnum"; my $color = '#333399'; qq!!; } sub separate_taxclasses_link { my( $row ) = @_; my $taxnum = $row->taxnum; my $url = "${p}edit/process/cust_main_county-expand.cgi?taxclass=1;taxnum=$taxnum"; qq!!; } <%init> die "access denied" unless $FS::CurrentUser::CurrentUser->access_right('Configuration'); #my $conf = new FS::Conf; #my $money_char = $conf->config('money_char') || '$'; my $enable_taxclasses = $conf->exists('enable_taxclasses'); my @menubar; my $html_init = "Click on add states to specify a country's tax rates by state or province.
Click on add counties to specify a state's tax rates by county."; $html_init .= "
Click on separate taxclasses to specify taxes per taxclass." if $enable_taxclasses; $html_init .= '

'; $html_init .= qq( ); my $title = ''; my $country = ''; if ( $cgi->param('country') =~ /^(\w\w)$/ ) { $country = $1; $title = $country; } $cgi->delete('country'); my $state = ''; if ( $cgi->param('state') =~ /^([\w \-\'\[\]]+)$/ ) { $state = $1; $title = "$state, $title"; } $cgi->delete('state'); my $county = ''; if ( $cgi->param('county') =~ /^([\w \-\'\[\]]+)$/ ) { $county = $1; $title = "$county county, $title"; } $cgi->delete('county'); $title = " for $title" if $title; my $taxclass = ''; if ( $cgi->param('taxclass') =~ /^([\w \-]+)$/ ) { $taxclass = $1; $title .= " for $taxclass tax class"; } $cgi->delete('taxclass'); if ( $country || $taxclass ) { push @menubar, 'View all tax rates' => $p.'browse/cust_main_county.cgi'; } $cgi->param('dummy', 1); my $country_filter_change = "window.location = '". $cgi->self_url. ";country=' + this.options[this.selectedIndex].value;"; #restore this so pagination works $cgi->param('country', $country) if $country; $cgi->param('state', $state ) if $state; $cgi->param('county', $county ) if $county; $cgi->param('taxclass', $county ) if $taxclass; my $html_posttotal = '(show country: '. qq()'; my $hashref = {}; my $count_query = 'SELECT COUNT(*) FROM cust_main_county'; if ( $country ) { $hashref->{'country'} = $country; $count_query .= ' WHERE country = '. dbh->quote($country); } if ( $state ) { $hashref->{'state'} = $state; $count_query .= ' AND state = '. dbh->quote($state); } if ( $county ) { $hashref->{'country'} = $country; $count_query .= ' AND county = '. dbh->quote($county); } if ( $taxclass ) { $hashref->{'taxclass'} = $taxclass; $count_query .= ( $count_query =~ /WHERE/i ? ' AND ' : ' WHERE ' ). ' taxclass = '. dbh->quote($taxclass); } $cell_style = ''; my @header = ( 'Country', 'State/Province', 'County',); my @header2 = ( '', '', '', ); my @links = ( '', '', '', ); my @link_onclicks = ( '', '', '', ); my $align = 'lll'; my @fields = ( sub { my $country = shift->country; code2country($country). " ($country)"; }, sub { state_label($_[0]->state, $_[0]->country). ( $_[0]->state ? '' : ' '. expand_link($_[0], 'Add States'). 'add states
' ) }, sub { $_[0]->county || '(all) '. expand_link($_[0], 'Add Counties'). 'add counties
' }, ); my @color = ( '000000', sub { shift->state ? '000000' : '999999' }, sub { shift->county ? '000000' : '999999' }, ); if ( $conf->exists('enable_taxclasses') ) { push @header, qq!Tax class (add new)!; push @header2, '(per-package classification)'; push @fields, sub { $_[0]->taxclass || '(all) '. separate_taxclasses_link($_[0], 'Separate Taxclasses'). 'separate taxclasses' }; push @color, sub { shift->taxclass ? '000000' : '999999' }; push @links, ''; push @link_onclicks, ''; $align .= 'l'; } push @header, 'Tax name', 'Rate', #'Tax', 'Exemptions', ; push @header2, '(printed on invoices)', '', '', ; push @fields, sub { shift->taxname || 'Tax' }, sub { shift->tax. '% (edit)' }, $exempt_sub, ; push @color, sub { shift->taxname ? '000000' : '666666' }, sub { shift->tax ? '000000' : '666666' }, '000000', ; $align .= 'lrl'; my @cell_style = map $cell_style_sub, (1..scalar(@header)); push @links, '', $edit_link, ''; push @link_onclicks, '', $edit_onclick, '';