X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=httemplate%2Fbrowse%2Fcust_main_county.cgi;h=12bdeb333b486612064984db4bf8abcd1ff459ac;hp=9e3feb8f3bc773376e6a44ea7d731cac0cf5eb86;hb=1d920e3661c29398763d05c82bbe3a493a19fbae;hpb=2c757d7db4cb6a7b9655de13206fcc84fb7ce61f diff --git a/httemplate/browse/cust_main_county.cgi b/httemplate/browse/cust_main_county.cgi index 9e3feb8f3..12bdeb333 100755 --- a/httemplate/browse/cust_main_county.cgi +++ b/httemplate/browse/cust_main_county.cgi @@ -1,149 +1,288 @@ -<%= include('/elements/header.html', "Tax Rate Listing", menubar( - 'Edit tax rates' => $p. "edit/cust_main_county.cgi", -)) %> +<% 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> - Click on expand country to specify a country's tax rates by state. -
Click on expand state to specify a state's tax rates by county. - -<% my $conf = new FS::Conf; -my $enable_taxclasses = $conf->exists('enable_taxclasses'); +my $money_char = $conf->config('money_char') || '$'; -if ( $enable_taxclasses ) { %> - -
Click on expand taxclasses to specify tax classes - -<% } %> - -

-<%= table() %> - - - Country - State - County - Taxclass
(per-package classification) - Tax name
(printed on invoices) - Tax - Exemption - - -<% -my @regions = sort { $a->country cmp $b->country - or $a->state cmp $b->state - or $a->county cmp $b->county - or $a->taxclass cmp $b->taxclass - } qsearch('cust_main_county',{}); - -my $sup=0; -#foreach $cust_main_county ( @regions ) { -for ( my $i=0; $i<@regions; $i++ ) { - my $cust_main_county = $regions[$i]; - my $hashref = $cust_main_county->hashref; - - %> - - <%= $hashref->{country} %> - - <% - - my $j; - if ( $sup ) { - $sup--; - } else { - - #lookahead - for ( $j=1; $i+$j<@regions; $j++ ) { - last if $hashref->{country} ne $regions[$i+$j]->country - || $hashref->{state} ne $regions[$i+$j]->state - || $hashref->{tax} != $regions[$i+$j]->tax - || $hashref->{exempt_amount} != $regions[$i+$j]->exempt_amount - || $hashref->{setuptax} ne $regions[$i+$j]->setuptax - || $hashref->{recurtax} ne $regions[$i+$j]->recurtax; - } +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; - my $newsup=0; - if ( $j>1 && $i+$j+1 < @regions - && ( $hashref->{state} ne $regions[$i+$j+1]->state - || $hashref->{country} ne $regions[$i+$j+1]->country - ) - && ( ! $i - || $hashref->{state} ne $regions[$i-1]->state - || $hashref->{country} ne $regions[$i-1]->country - ) - ) { - $sup = $j-1; - } else { - $j = 1; + 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, ''; - %> - - <%= - $hashref->{state} - ? ' BGCOLOR="#ffffff">'. $hashref->{state} - : qq! BGCOLOR="#cccccc">(ALL) !. - qq!expand country! - %> - <% if ( $j>1 ) { %> - collapse state - <% } %> - - - <% } %> - -<% # $sup=$newsup; %> - - {county} ) { - %> BGCOLOR="#ffffff"><%= $hashref->{county} %> - <% } else { - %> BGCOLOR="#cccccc">(ALL) - <% if ( $hashref->{state} ) { %> - expand state - <% } %> - <% } %> - - - {taxclass} ) { - %> BGCOLOR="#ffffff"><%= $hashref->{taxclass} %> - <% } else { - %> BGCOLOR="#cccccc">(ALL) - <% if ( $enable_taxclasses ) { %> - expand taxclasses - <% } %> - <% } %> - - - {taxname} ) { - %> BGCOLOR="#ffffff"><%= $hashref->{taxname} %> - <% } else { - %> BGCOLOR="#cccccc">Tax - <% } %> - - - <%= $hashref->{tax} %>% - - - - <% if ( $hashref->{exempt_amount} > 0 ) { %> - $<%= sprintf("%.2f", $hashref->{exempt_amount} ) %> per month
- <% } %> - - <% if ( $hashref->{setuptax} =~ /^Y$/i ) { %> - Setup fee
- <% } %> - - <% if ( $hashref->{recurtax} =~ /^Y$/i ) { %> - Recurring fee
- <% } %> - - - - - -<% } %> - - - -<%= include('/elements/footer.html') %> +