b401b3786b41f54d50d88c7b0610adfabb1f754e
[freeside.git] / httemplate / browse / tax_rate.cgi
1 <% include( 'elements/browse.html',
2      'title'          => "Tax Rates $title",
3      'name_singular'  => 'tax rate',
4      'menubar'        => \@menubar,
5      'html_init'      => $html_init,
6      'query'          => {
7                            'table'    => 'tax_rate',
8                            'hashref'  => $hashref,
9                            'order_by' => 'ORDER BY geocode, taxclassnum',
10                          },
11      'count_query'    => $count_query,
12      'header'         => \@header,
13      'header2'        => \@header2,
14      'fields'         => \@fields,
15      'align'          => $align,
16      'color'          => \@color,
17      'cell_style'     => \@cell_style,
18      'links'          => \@links,
19      'link_onclicks'  => \@link_onclicks,
20   )
21 %>
22 <%once>
23
24 my $conf = new FS::Conf;
25 my $money_char = $conf->config('money_char') || '$';
26
27 my $exempt_sub = sub {
28   my $tax_rate = shift;
29
30   my @exempt = ();
31   push @exempt,
32        sprintf("$money_char%.2f&nbsp;per&nbsp;month", $tax_rate->exempt_amount )
33     if $tax_rate->exempt_amount > 0;
34
35   push @exempt, 'Setup&nbsp;fee'
36     if $tax_rate->setuptax =~ /^Y$/i;
37
38   push @exempt, 'Recurring&nbsp;fee'
39     if $tax_rate->recurtax =~ /^Y$/i;
40
41   [ map [ {'data'=>$_} ], @exempt ];
42 };
43
44 my $oldrow;
45 my $cell_style;
46 my $cell_style_sub = sub {
47   my $row = shift;
48   if ( $oldrow ne $row ) {
49     if ( $oldrow ) {
50       if ( $oldrow->country ne $row->country ) {
51         $cell_style = 'border-top:1px solid #000000';
52       } elsif ( $oldrow->state ne $row->state ) {
53         $cell_style = 'border-top:1px solid #cccccc'; #default?
54       } elsif ( $oldrow->state eq $row->state ) {
55         #$cell_style = 'border-top:dashed 1px dark gray';
56         $cell_style = 'border-top:1px dashed #cccccc';
57       }
58     }
59     $oldrow = $row;
60   }
61   return $cell_style;
62 };
63
64 my $select_link = [ 'javascript:void(0);', sub { ''; } ];
65
66 my $select_onclick = sub {
67   my $row = shift;
68   my $taxnum = $row->taxnum;
69   my $color = '#333399';
70   qq!overlib( OLiframeContent('${p}edit/tax_rate.html?$taxnum', 540, 420, 'edit_tax_rate_popup' ), CAPTION, 'Edit tax rate', STICKY, AUTOSTATUSCAP, MIDX, 0, MIDY, 0, DRAGGABLE, CLOSECLICK, BGCOLOR, '$color', CGCOLOR, '$color' ); return false;!;
71 };
72
73 my $separate_taxclasses_link  = sub {
74   my( $row ) = @_;
75   my $taxnum = $row->taxnum;
76   my $url = "${p}edit/process/tax_rate-expand.cgi?taxclassnum=1;taxnum=$taxnum";
77
78   qq!<FONT SIZE="-1"><A HREF="$url">!;
79 };
80
81 </%once>
82 <%init>
83
84 die "access denied"
85   unless $FS::CurrentUser::CurrentUser->access_right('Configuration');
86
87 my @menubar;
88
89 my $html_init =
90   "Click on <u>geocodes</u> to specify rates for a new area.";
91 $html_init .= "<BR>Click on <u>separate taxclasses</u> to specify taxes per taxclass.";
92 $html_init .= '<BR><BR>';
93
94 $html_init .= qq(
95   <SCRIPT TYPE="text/javascript" SRC="${fsurl}elements/overlibmws.js"></SCRIPT>
96   <SCRIPT TYPE="text/javascript" SRC="${fsurl}elements/overlibmws_iframe.js"></SCRIPT>
97   <SCRIPT TYPE="text/javascript" SRC="${fsurl}elements/overlibmws_draggable.js"></SCRIPT>
98   <SCRIPT TYPE="text/javascript" SRC="${fsurl}elements/iframecontentmws.js"></SCRIPT>
99 );
100
101 my $title = '';
102 my $select_word = 'edit';
103
104 my $geocode = '';
105 if ( $cgi->param('geocode') =~ /^(\w+)$/ ) {
106   $geocode = $1;
107   $title = "$geocode";
108 }
109 $cgi->delete('geocode');
110
111 $title = " for $title" if $title;
112
113 my $taxclassnum = '';
114 if ( $cgi->param('taxclassnum') =~ /^(\d+)$/ ) {
115   $taxclassnum = $1;
116   my $tax_class = qsearchs('tax_class', {'taxclassnum' => $taxclassnum});
117   if ($tax_class) {
118     $title .= " for ". $tax_class->taxclass.
119               " (".  $tax_class->description. ") tax class";
120   }else{
121     $taxclassnum = '';
122   }
123 }
124 $cgi->delete('taxclassnum');
125
126 if ( $geocode || $taxclassnum ) {
127   push @menubar, 'View all tax rates' => $p.'browse/tax_rate.cgi';
128 }
129
130 $cgi->param('dummy', 1);
131
132 #restore this so pagination works
133 $cgi->param('geocode',  $geocode) if $geocode;
134 $cgi->param('taxclassnum', $taxclassnum ) if $taxclassnum;
135
136 my $hashref = {};
137 my $count_query = 'SELECT COUNT(*) FROM tax_rate';
138 if ( $geocode ) {
139   $hashref->{'geocode'} = $geocode;
140   $count_query .= ' WHERE geocode = '. dbh->quote($geocode);
141 }
142 if ( $taxclassnum ) {
143   $hashref->{'taxclassnum'} = $taxclassnum;
144   $count_query .= ( $count_query =~ /WHERE/i ? ' AND ' : ' WHERE ' ).
145                   ' taxclassnum  = '. dbh->quote($taxclassnum);
146 }
147
148
149 $cell_style = '';
150
151 my @header        = ( 'Location Code',  );
152 my @header2       = ( '', );
153 my @links         = ( '', );
154 my @link_onclicks = ( '', );
155 my $align = 'l';
156
157 my @fields = (
158   'geocode',
159 );
160
161 my @color = (
162   '000000',
163 );
164
165 push @header, qq!Tax class (<A HREF="${p}edit/tax_class.html">add new</A>)!;
166 push @header2, '(per-tax classification)';
167 push @fields, sub { $_[0]->taxclass_description || '(all)&nbsp'.
168                      &{$separate_taxclasses_link}($_[0], 'Separate Taxclasses').
169                      'separate&nbsp;taxclasses</A></FONT>'
170                   };
171 push @color, sub { shift->taxclass ? '000000' : '999999' };
172 push @links, '';
173 push @link_onclicks, '';
174 $align .= 'l';
175
176 push @header, 'Tax name',
177               'Rate', #'Tax',
178               'Exemptions',
179               ;
180
181 push @header2, '(printed on invoices)',
182                '',
183                '',
184                ;
185
186 push @fields, 
187   sub { shift->taxname || 'Tax' },
188   sub { shift->tax. '%&nbsp;<FONT SIZE="-1">('. $select_word. ')</FONT>' },
189   $exempt_sub,
190 ;
191
192 push @color,
193   sub { shift->taxname ? '000000' : '666666' },
194   sub { shift->tax     ? '000000' : '666666' },
195   '000000',
196 ;
197
198 $align .= 'lrl';
199
200 my @cell_style = map $cell_style_sub, (1..scalar(@header));
201
202 push @links,         '', $select_link,    '';
203 push @link_onclicks, '', $select_onclick, '';
204
205 </%init>