X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=httemplate%2Fbrowse%2Fcust_main_county.cgi;h=736d7fdbe19ad67a220b8bfb967736cc86a01e3e;hb=04a69f9d197efee6fa396bd35d04ae553e669978;hp=96541502c1330edc93d2e484ac814650790a3b11;hpb=51984ac3d3da3006809c6866fdecd4ad83610731;p=freeside.git diff --git a/httemplate/browse/cust_main_county.cgi b/httemplate/browse/cust_main_county.cgi index 96541502c..736d7fdbe 100755 --- a/httemplate/browse/cust_main_county.cgi +++ b/httemplate/browse/cust_main_county.cgi @@ -1,108 +1,454 @@ -<% -# -# $Id: cust_main_county.cgi,v 1.1 2001-07-30 07:36:03 ivan Exp $ -# -# ivan@sisd.com 97-dec-13 -# -# Changes to allow page to work at a relative position in server -# bmccane@maxbaud.net 98-apr-3 -# -# lose background, FS::CGI ivan@sisd.com 98-sep-2 -# -# $Log: cust_main_county.cgi,v $ -# Revision 1.1 2001-07-30 07:36:03 ivan -# templates!!! -# -# Revision 1.7 1999/04/09 04:22:34 ivan -# also table() -# -# Revision 1.6 1999/04/09 03:52:55 ivan -# explicit & for table/itable/ntable -# -# Revision 1.5 1999/01/19 05:13:26 ivan -# for mod_perl: no more top-level my() variables; use vars instead -# also the last s/create/new/; -# -# Revision 1.4 1999/01/18 09:41:16 ivan -# all $cgi->header calls now include ( '-expires' => 'now' ) for mod_perl -# (good idea anyway) -# -# Revision 1.3 1998/12/17 05:25:18 ivan -# fix visual and other bugs -# -# Revision 1.2 1998/11/18 09:01:34 ivan -# i18n! i18n! -# - -use strict; -use vars qw( $cgi $p $cust_main_county ); -use CGI; -use CGI::Carp qw(fatalsToBrowser); -use FS::UID qw(cgisuidsetup swapuid); -use FS::Record qw(qsearch qsearchs); -use FS::CGI qw(header menubar popurl table); -use FS::cust_main_county; - -$cgi = new CGI; - -&cgisuidsetup($cgi); - -$p = popurl(2); - -print $cgi->header( '-expires' => 'now' ), header("Tax Rate Listing", menubar( - 'Main Menu' => $p, - 'Edit tax rates' => $p. "edit/cust_main_county.cgi", -)),<expand country to specify a country's tax rates by state. -
Click on expand state to specify a state's tax rates by county. -

-END -print &table(), < - Country - State - County - Tax - -END +<% include( 'elements/browse.html', + 'title' => "Tax Rates $title", + 'name_singular' => 'tax rate', + 'menubar' => \@menubar, + 'html_init' => $html_init, + 'html_posttotal' => $html_posttotal, + 'html_form' => '
', + 'html_foot' => $html_foot, + '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> -foreach $cust_main_county ( qsearch('cust_main_county',{}) ) { - my($hashref)=$cust_main_county->hashref; - print < - $hashref->{country} -END - print "", $hashref->{state} - ? $hashref->{state} - : qq!(ALL) !. - qq!expand country! - , ""; - print ""; - if ( $hashref->{county} ) { - print $hashref->{county}; +my $conf = new FS::Conf; +my $money_char = $conf->config('money_char') || '$'; + +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; + include( '/elements/popup_link_onclick.html', + 'action' => "${p}edit/cust_main_county.html?$taxnum", + 'actionlabel' => 'Edit tax rate', + 'height' => 420, + #default# 'width' => 540, + #default# 'color' => '#333399', + ); +}; + +sub expand_link { + my %param = @_; + + my $taxnum = $param{'row'}->taxnum; + my $url = "${p}edit/cust_main_county-expand.cgi?$taxnum"; + + ''. + include( '/elements/popup_link.html', + 'label' => $param{'label'}, + 'action' => $url, + 'actionlabel' => $param{'desc'}, + 'height' => 420, + #default# 'width' => 540, + #default# 'color' => '#333399', + ). + ''; +} + +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 .= include('/elements/init_overlib.html'); + +my $title = ''; + +my $country = ''; +if ( $cgi->param('country') =~ /^(\w\w)$/ ) { + $country = $1; + $title = $country; +} +$cgi->delete('country'); + +my $state = ''; +if ( $country && $cgi->param('state') =~ /^([\w \-\'\[\]]+)$/ ) { + $state = $1; + $title = "$state, $title"; +} +$cgi->delete('state'); + +my $county = ''; +if ( $country && $state && + $cgi->param('county') =~ + /^([\w \!\@\#\$\%\&\(\)\-\+\;\:\'\"\,\.\?\/\=\[\]]+)$/ + ) +{ + $county = $1; + if ( $county eq '__NONE__' ) { + $title = "No county, $title"; } else { - print "(ALL)"; - if ( $hashref->{state} ) { - print qq!!. - qq!
expand state!; + $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 $filter_change = + "window.location = '". $cgi->self_url. + ";country=' + encodeURIComponent( document.getElementById('country').options[document.getElementById('country').selectedIndex].value ) + ". + "';state=' + encodeURIComponent( document.getElementById('state').options[document.getElementById('state').selectedIndex].value ) +". + "';county=' + encodeURIComponent( document.getElementById('county').options[document.getElementById('county').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: '. + include('/elements/select-country.html', + 'country' => $country, + 'onchange' => $filter_change, + 'empty_label' => '(all)', + 'disable_empty' => 0, + 'disable_stateupdate' => 1, + ); + +my %states_hash = $country ? states_hash($country) : (); +if ( scalar(keys(%states_hash)) > 1 ) { + $html_posttotal .= + ' show state: '. + include('/elements/select-state.html', + 'country' => $country, + 'state' => $state, + 'onchange' => $filter_change, + 'empty_label' => '(all)', + 'disable_empty' => 0, + 'disable_countyupdate' => 1, + ); +} else { + $html_posttotal .= + ''; +} + +my @counties = ( $country && $state ) ? counties($state, $country) : (); +if ( scalar(@counties) > 1 ) { + $html_posttotal .= + ' show county: '. + include('/elements/select-county.html', + 'country' => $country, + 'state' => $state, + 'county' => $county, + 'onchange' => $filter_change, + 'empty_label' => '(all)', + 'empty_data_label' => '(none)', + 'empty_data_value' => '__NONE__', + 'disable_empty' => 0, + 'disable_countyupdate' => 1, + ); +} else { + $html_posttotal .= + ''; +} + +$html_posttotal .= ' )'; + +my $bulk_popup_link = + include( '/elements/popup_link_onclick.html', + 'action' => "${p}edit/bulk-cust_main_county.html?MAGIC_taxnum_MAGIC", + 'actionlabel' => 'Bulk add new tax', + 'nofalse' => 1, + 'height' => 420, + #default# 'width' => 540, + #default# 'color' => '#333399', + ); + +my $html_foot = < + + function setAll(setTo) { + theForm = document.taxesForm; + for (i=0,n=theForm.elements.length;i"; - print <$hashref->{tax}% - + function bulkPopup() { + var bulk_popup_link = "$bulk_popup_link"; + var bulkstring = ''; + theForm = document.taxesForm; + for (i=0,n=theForm.elements.length;i 1920 ) { // IE 2083 URL limit + alert('Too many selections'); // should do some session thing... + return false; + } + bulk_popup_link = bulk_popup_link.replace(/MAGIC_taxnum_MAGIC/, bulkstring); + eval(bulk_popup_link); + } + + + +
+select all | +unselect all | +toggle all +

+Add new tax to selected + END +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 ) { + if ( $county eq '__NONE__' ) { + $hashref->{'county'} = ''; + $count_query .= " AND ( county = '' OR county IS NULL ) "; + } else { + $hashref->{'county'} = $county; + $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( desc => 'Add States', + row => $_[0], + label => 'add states', + ) + ) + }, + sub { $_[0]->county || '(all) '. + expand_link( desc => 'Add Counties', + row => $_[0], + label => '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'; } -print < - - - -END +push @header, + '', #checkbox column + 'Tax name', + 'Rate', #'Tax', + 'Exemptions', + ; -%> +push @header2, + '', + '(printed on invoices)', + '', + '', + ; + +my $newregion = 1; +my $cb_oldrow = ''; +my $cb_sub = sub { + my $cust_main_county = shift; + + if ( $cb_oldrow ) { + if ( $cb_oldrow->country ne $cust_main_county->country + || $cb_oldrow->state ne $cust_main_county->state + || $cb_oldrow->county ne $cust_main_county->county + || $cb_oldrow->taxclass ne $cust_main_county->taxclass ) + { + $newregion = 1; + } else { + $newregion = 0; + } + + } else { + $newregion = 1; + } + $cb_oldrow = $cust_main_county; + + if ( $newregion ) { + my $taxnum = $cust_main_county->taxnum; + qq!!; + } else { + ''; + } +}; + +push @fields, + $cb_sub, + sub { shift->taxname || 'Tax' }, + sub { shift->tax. '% (edit)' }, + $exempt_sub, +; + +push @color, + '000000', + sub { shift->taxname ? '000000' : '666666' }, + sub { shift->tax ? '000000' : '666666' }, + '000000', +; + +$align .= 'clrl'; + +my @cell_style = map $cell_style_sub, (1..scalar(@header)); + +push @links, '', '', $edit_link, ''; +push @link_onclicks, '', '', $edit_onclick, ''; + +