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> | 
