diff options
-rwxr-xr-x | httemplate/browse/cust_main_county.cgi | 118 | ||||
-rw-r--r-- | httemplate/edit/bulk-cust_main_county.html | 130 | ||||
-rw-r--r-- | httemplate/edit/process/bulk-cust_main_county.html | 63 |
3 files changed, 306 insertions, 5 deletions
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' => '<FORM NAME="taxesForm">', + 'html_foot' => $html_foot, 'query' => { 'table' => 'cust_main_county', 'hashref' => $hashref, @@ -200,6 +202,77 @@ my $html_posttotal = ). '</SELECT>)'; +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 = <<END; +<SCRIPT TYPE="text/javascript"> + + function setAll(setTo) { + theForm = document.taxesForm; + for (i=0,n=theForm.elements.length;i<n;i++) { + if (theForm.elements[i].name.indexOf("cust_main_county") != -1) { + theForm.elements[i].checked = setTo; + } + } + } + + function toggleAll() { + theForm = document.taxesForm; + for (i=0,n=theForm.elements.length;i<n;i++) { + if (theForm.elements[i].name.indexOf("cust_main_county") != -1) { + if ( theForm.elements[i].checked == true ) { + theForm.elements[i].checked = false; + } else { + theForm.elements[i].checked = true; + } + } + } + } + + function bulkPopup() { + var bulk_popup_link = "$bulk_popup_link"; + var bulkstring = ''; + theForm = document.taxesForm; + for (i=0,n=theForm.elements.length;i<n;i++) { + if ( theForm.elements[i].name.indexOf("cust_main_county") != -1 + && theForm.elements[i].checked == true + ) { + var name = theForm.elements[i].name; + var taxnum = name.replace(/cust_main_county/, ''); + if ( bulkstring != '' ) { + bulkstring = bulkstring + ','; + } + bulkstring = bulkstring + taxnum; + + } + } + if ( bulk_popup_link.length > 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); + } + +</SCRIPT> + +<BR> +<A HREF="javascript:setAll(true)">select all</A> | +<A HREF="javascript:setAll(false)">unselect all</A> | +<A HREF="javascript:toggleAll()">toggle all</A> +<BR><BR> +<A HREF="javascript:void(0);" onClick="bulkPopup();">Add new tax to selected</A> + +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!<INPUT NAME="cust_main_county$taxnum" TYPE="checkbox" VALUE="1">!; + } else { + ''; + } +}; + push @fields, + $cb_sub, sub { shift->taxname || 'Tax' }, sub { shift->tax. '% <FONT SIZE="-1">(edit)</FONT>' }, $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, ''; </%init> 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') %> + +<FORM ACTION="<% popurl(1)."process/bulk-cust_main_county.html" %>" METHOD="POST"> + +<INPUT TYPE="hidden" NAME="taxnum" VALUE="<% join(',', @taxnum) %>"> + +<TABLE BGCOLOR="#cccccc" BORDER=0 CELLSPACING=0> + +<% include('/elements/tr-td-label.html', 'label' => 'Country' ) %> + <TD BGCOLOR="#dddddd"><% $countries %> + </TD> +</TR> + +<% include('/elements/tr-td-label.html', 'label' => 'State' ) %> + <TD BGCOLOR="#dddddd"><% $states %> + </TD> +</TR> + +% if ( $counties ) { + <% include('/elements/tr-td-label.html', 'label' => 'County' ) %> + <TD BGCOLOR="#dddddd"><% $counties %> + </TD> + </TR> +% } + +% if ( $conf->exists('enable_taxclasses') && $taxclasses ) { + <% include('/elements/tr-td-label.html', 'label' => 'Tax Class' ) %> + <TD BGCOLOR="#dddddd"><% $taxclasses %> + </TD> + </TR> +% } + +<% 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")', + ) +%> + +</TABLE> + +<BR> + +<INPUT TYPE="submit" VALUE="Bulk add tax"> + +<%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'); + +</%init> 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' ) %> + + <FONT SIZE="+1" COLOR="#ff0000">Error: <% $error |h %></FONT> + <BR><BR> + + </BODY> + </HTML> + +% } else { + <% include('/elements/header-popup.html', 'Taxes added') %> + + <SCRIPT TYPE="text/javascript"> + window.top.location.reload(); + </SCRIPT> + + </BODY> + </HTML> +% } +<%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); +} + +</%init> |