From: ivan Date: Sun, 12 Oct 2008 00:54:18 +0000 (+0000) Subject: add a quick bulk tax add tool (eating my own dogfood instead of running a one-off... X-Git-Tag: root_of_webpay_support~322 X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=commitdiff_plain;h=9eded70a59f22d7df3b645ad3636e28e0fd08bee add a quick bulk tax add tool (eating my own dogfood instead of running a one-off SQL query), RT#4117 --- diff --git a/httemplate/browse/cust_main_county.cgi b/httemplate/browse/cust_main_county.cgi index 2e433754e..fc1022684 100755 --- a/httemplate/browse/cust_main_county.cgi +++ b/httemplate/browse/cust_main_county.cgi @@ -4,6 +4,8 @@ 'menubar' => \@menubar, 'html_init' => $html_init, 'html_posttotal' => $html_posttotal, + 'html_form' => '
', + 'html_foot' => $html_foot, 'query' => { 'table' => 'cust_main_county', 'hashref' => $hashref, @@ -200,6 +202,77 @@ my $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 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 ) { @@ -269,33 +342,68 @@ if ( $conf->exists('enable_taxclasses') ) { $align .= 'l'; } -push @header, 'Tax name', +push @header, + '', #checkbox column + 'Tax name', 'Rate', #'Tax', 'Exemptions', ; -push @header2, '(printed on invoices)', +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 .= 'lrl'; +$align .= 'clrl'; my @cell_style = map $cell_style_sub, (1..scalar(@header)); -push @links, '', $edit_link, ''; -push @link_onclicks, '', $edit_onclick, ''; +push @links, '', '', $edit_link, ''; +push @link_onclicks, '', '', $edit_onclick, ''; diff --git a/httemplate/edit/bulk-cust_main_county.html b/httemplate/edit/bulk-cust_main_county.html new file mode 100644 index 000000000..bb57fc5d3 --- /dev/null +++ b/httemplate/edit/bulk-cust_main_county.html @@ -0,0 +1,130 @@ +<% include('/elements/header-popup.html', 'Bulk Tax rate') %> + +" METHOD="POST"> + + + + + +<% include('/elements/tr-td-label.html', 'label' => 'Country' ) %> + + + +<% include('/elements/tr-td-label.html', 'label' => 'State' ) %> + + + +% if ( $counties ) { + <% include('/elements/tr-td-label.html', 'label' => 'County' ) %> + + +% } + +% if ( $conf->exists('enable_taxclasses') && $taxclasses ) { + <% include('/elements/tr-td-label.html', 'label' => 'Tax Class' ) %> + + +% } + +<% include('/elements/tr-input-text.html', + 'field' => 'taxname', + 'label' => 'Tax name' + ) +%> + +<% include('/elements/tr-input-percentage.html', + 'field' => 'tax', + 'label' => 'Tax rate', + ) +%> + +<% include('/elements/tablebreak-tr-title.html', value=>'Exemptions' ) %> + +<% include('/elements/tr-checkbox.html', + 'field' => 'setuptax', + 'value' => 'Y', + 'label' => 'This tax not applicable to setup fees', + ) +%> + +<% include('/elements/tr-checkbox.html', + 'field' => 'recurtax', + 'value' => 'Y', + 'label' => 'This tax not applicable to recurring fees', + ) +%> + +<% include('/elements/tr-input-money.html', + 'field' => 'exempt_amount', + 'label' => 'Monthly exemption per customer ($25 "Texas tax")', + ) +%> + +
<% $countries %> +
<% $states %> +
<% $counties %> +
<% $taxclasses %> +
+ +
+ + + +<%init> + +my $conf = new FS::Conf; + +die "access denied" + unless $FS::CurrentUser::CurrentUser->access_right('Configuration'); + +my @taxnum; +if ( $cgi->param('error') ) { + $cgi->param('taxnum') =~ /^([\d,]+)$/ + or die "no taxnum, but error: ". $cgi->param('error'); + @taxnum = split(',', $1); +} else { + my($query) = $cgi->keywords; + $query =~ /^([\d,]+)$/ + or die 'Nothing selected'; #XXX better error when nothing selected + @taxnum = split(',', $1); +} + +my @cust_main_county = + map { + qsearchs('cust_main_county', { 'taxnum' => $_ }) + or die "unknown taxnum $1"; + } + @taxnum; + +my %seen_country = {}; +my @countries = map code2country($_)." ($_)", + grep !$seen_country{$_}++, + map $_->country, + @cust_main_county; +my $countries = join(', ', @countries); + +my %seen_state = {}; +my @states = map state_label($_->[0], $_->[1]), + grep !$seen_state{$_->[0]}++, + map [ $_->state, $_->country ], + @cust_main_county; +my $states = join(', ', @states); + +my %seen_county = {}; +my @counties = grep !$seen_county{$_}++, map $_->county, @cust_main_county; +my $counties = join(', ', @counties); + +my %seen_taxclass = {}; +my @taxclasses = grep !$seen_taxclass{$_}++, map $_->taxclass, @cust_main_county; +my $taxclasses = join(', ', @taxclasses); + +#my @fields = ( +# { field=>'country', type=>'fixed-country', }, +# { field=>'state', type=>'fixed-state', }, +# { field=>'county', type=>'fixed', }, +#); + +#push @fields, { field=>'taxclass', type=>'fixed', } +# if $conf->exists('enable_taxclasses'); + + diff --git a/httemplate/edit/process/bulk-cust_main_county.html b/httemplate/edit/process/bulk-cust_main_county.html new file mode 100644 index 000000000..e05192e96 --- /dev/null +++ b/httemplate/edit/process/bulk-cust_main_county.html @@ -0,0 +1,63 @@ +% if ( $error ) { #better to redirect back to +%# <% $cgi->redirect("$url?". $cgi->query_string ) %> + <% include('/elements/header-popup.html', 'Error adding taxes' ) %> + + Error: <% $error |h %> +

+ + + + +% } else { + <% include('/elements/header-popup.html', 'Taxes added') %> + + + + + +% } +<%init> + +$cgi->param('taxnum') =~ /^([\d,]+)$/ + or die 'Guru Meditation #69'; #??? should have been passed in +my @taxnum = split(',', $1); + +my $error = ''; +foreach my $taxnum ( @taxnum ) { + + my $cust_main_county = qsearchs('cust_main_county', { 'taxnum' => $taxnum } ) + or die "unknown taxnum: $taxnum"; + + if ( $cust_main_county->tax == 0 ) { #let's replace + + foreach (qw( taxname tax exempt_amount setuptax recurtax )) { + $cust_main_county->set( $_ => scalar($cgi->param($_)) ) + } + + $error = $cust_main_county->replace and last; + + } else { #let's insert a new record + + my $new = + new FS::cust_main_county { + ( map { $_ => scalar($cgi->param($_)) } + qw( taxname tax exempt_amount setuptax recurtax ) + ), + ( map { $_ => $cust_main_county->get($_) } + qw( country state county taxclass ) + ) + }; + + $error = $new->insert and last; + + } + +} + +if ( $error ) { + $cgi->param('error', $error); +} + +