X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=httemplate%2Fsearch%2Freport_tax.cgi;h=803b7d48f92c52ebc2f6d5f765acd83db17d56a7;hb=89da4b96c4e2fce7079be8d2729750c088f8035b;hp=bcceaf17593ba76ab4c78dc61f29a982ac7ea2ae;hpb=dc313675fc24fa04a619cc980d48de9e4cf2f876;p=freeside.git diff --git a/httemplate/search/report_tax.cgi b/httemplate/search/report_tax.cgi index bcceaf175..803b7d48f 100755 --- a/httemplate/search/report_tax.cgi +++ b/httemplate/search/report_tax.cgi @@ -22,6 +22,10 @@ Tax owed % unless ( $cgi->param('show_taxclasses') ) { Tax invoiced + + Tax credited + + Tax collected % } @@ -118,6 +122,15 @@ <% &$money_sprintf( $region->{'tax'} ) %> + <<%$tdh%>> - + <<%$tdh%> ALIGN="right"> + <% &$money_sprintf( $region->{'credit'} ) %> + + <<%$tdh%>> = + <<%$tdh%> ALIGN="right"> + <% &$money_sprintf( $region->{'tax'} - $region->{'credit'} ) %> + % } @@ -132,6 +145,10 @@ Tax invoiced + + Tax credited + + Tax collected % #some false laziness w/above @@ -154,6 +171,12 @@ % $bgcolor = $bgcolor1; % } % my $td = qq(TD CLASS="grid" BGCOLOR="$bgcolor"); +% my $tdh = qq(TD CLASS="grid" BGCOLOR="$bgcolor"); +% +% #? +% my $invlink = $region->{'url_param_inv'} +% ? ';'. $region->{'url_param_inv'} +% : $link; <<%$td%>><% $region->{'label'} %> @@ -161,6 +184,15 @@ <% &$money_sprintf( $region->{'tax'} ) %> + <<%$td%>> - + <<%$tdh%> ALIGN="right"> + <% &$money_sprintf( $region->{'credit'} ) %> + + <<%$td%>> = + <<%$tdh%> ALIGN="right"> + <% &$money_sprintf( $region->{'tax'} - $region->{'credit'} ) %> + % } @@ -178,6 +210,15 @@ <% &$money_sprintf( $tot_tax ) %> + <<%$td%>> - + <<%$td%> ALIGN="right"> + <% &$money_sprintf( $tot_credit ) %> + + <<%$td%>> = + <<%$td%> ALIGN="right"> + <% &$money_sprintf( $tot_tax - $tot_credit ) %> + @@ -224,7 +265,10 @@ sub gotcust { my $table = shift; my $prefix = @_ ? shift : ''; " - ( $table.${prefix}county = cust_main_county.county + ( $table.${prefix}city = cust_main_county.city + OR cust_main_county.city = '' + OR cust_main_county.city IS NULL ) + AND ( $table.${prefix}county = cust_main_county.county OR cust_main_county.county = '' OR cust_main_county.county IS NULL ) AND ( $table.${prefix}state = cust_main_county.state @@ -292,10 +336,11 @@ foreach my $r ( qsearch({ 'table' => 'cust_main_county', $regions{$label}->{$_} = $r->$_() for (qw( county state country )); #taxname? + my @url_param = qw( county state country taxname ); + push @url_param, 'city' if $cgi->param('show_cities') && $r->city(); + $regions{$label}->{'url_param'} = - join(';', map "$_=".uri_escape($r->$_()), - qw( county state country taxname ) - ); + join(';', map "$_=".uri_escape($r->$_()), @url_param ); my @param = @base_param; my $mywhere = $where; @@ -355,9 +400,25 @@ foreach my $r ( qsearch({ 'table' => 'cust_main_county', # ); # } + #false laziness -ish w/report_tax.cgi + my $cust_exempt; + if ( $r->taxname ) { + my $q_taxname = dbh->quote($r->taxname); + $cust_exempt = + "( tax = 'Y' + OR EXISTS ( SELECT 1 FROM cust_main_exemption + WHERE cust_main_exemption.custnum = cust_main.custnum + AND cust_main_exemption.taxname = $q_taxname + ) + ) + "; + } else { + $cust_exempt = " tax = 'Y' "; + } + my $x_cust = scalar_sql($r, \@param, "SELECT SUM(cust_bill_pkg.setup+cust_bill_pkg.recur) - $fromwhere AND $nottax AND tax = 'Y' " + $fromwhere AND $nottax AND $cust_exempt " ); $regions{$label}->{'exempt_cust'} += $x_cust; @@ -417,7 +478,7 @@ foreach my $r ( qsearch({ 'table' => 'cust_main_county', } -my $distinct = "country, state, county, +my $distinct = "country, state, county, city, CASE WHEN taxname IS NULL THEN '' ELSE taxname END AS taxname"; my $taxclass_distinct = #a little bit unsure of this part... test? @@ -447,9 +508,18 @@ if ( $conf->exists('tax-pkg_address') ) { $taxwhere =~ s/cust_pkg\.locationnum/cust_bill_pkg_tax_location.locationnum/g; } +my $creditfromwhere = $taxfromwhere. + " JOIN cust_credit_bill_pkg USING (billpkgnum"; +$creditfromwhere .= " ,billpkgtaxlocationnum" + if $conf->exists('tax-pkg_address'); +$creditfromwhere .= ")"; + $taxfromwhere .= " $taxwhere "; #AND payby != 'COMP' "; +$creditfromwhere .= " $taxwhere AND billpkgtaxratelocationnum IS NULL"; #AND payby != 'COMP' "; + my @taxparam = @base_param; + #should i be a cust_main_county method or something #need to pass in $taxfromwhere & @taxparam??? my $_taxamount_sub = sub { @@ -467,6 +537,21 @@ my $_taxamount_sub = sub { scalar_sql($r, \@taxparam, $sql ); }; +my $_creditamount_sub = sub { + my $r = shift; + + #match itemdesc if necessary! + my $named_tax = + $r->taxname + ? 'AND itemdesc = '. dbh->quote($r->taxname) + : "AND ( itemdesc IS NULL OR itemdesc = '' OR itemdesc = 'Tax' )"; + + my $sql = "SELECT SUM(cust_credit_bill_pkg.amount) ". + " $creditfromwhere AND cust_bill_pkg.pkgnum = 0 $named_tax"; + + scalar_sql($r, \@taxparam, $sql ); +}; + #tax-report_groups filtering my($group_op, $group_value) = ( '', '' ); if ( $cgi->param('report_group') =~ /^(=|!=) (.*)$/ ) { @@ -487,6 +572,7 @@ my $group_test = sub { }; my $tot_tax = 0; +my $tot_credit = 0; #foreach my $label ( keys %regions ) { foreach my $r ( qsearch(\%qsearch) ) { @@ -505,6 +591,13 @@ foreach my $r ( qsearch(\%qsearch) ) { $regions{$label}->{'tax'} += $x; $tot_tax += $x unless $cgi->param('show_taxclasses'); + ## calculate credit for this region + + $x = &{$_creditamount_sub}($r); + + $regions{$label}->{'credit'} += $x; + $tot_credit += $x unless $cgi->param('show_taxclasses'); + } my %base_regions = (); @@ -525,6 +618,14 @@ if ( $cgi->param('show_taxclasses') ) { $base_regions{$base_label}->{'tax'} += $x; $tot_tax += $x; + + ## calculate credit for this region + + $x = &{$_creditamount_sub}($r); + + $base_regions{$base_label}->{'credit'} += $x; + $tot_credit += $x; + } } @@ -537,7 +638,7 @@ my @regions = keys %regions; #calculate totals my( $total, $tot_taxable, $tot_owed ) = ( 0, 0, 0 ); -my( $exempt_cust, $exempt_pkg, $exempt_monthly ) = ( 0, 0, 0 ); +my( $exempt_cust, $exempt_pkg, $exempt_monthly, $tot_credit ) = ( 0, 0, 0, 0 ); my %taxclasses = (); my %county = (); my %state = (); @@ -549,6 +650,7 @@ foreach (@regions) { $exempt_cust += $regions{$_}->{'exempt_cust'}; $exempt_pkg += $regions{$_}->{'exempt_pkg'}; $exempt_monthly += $regions{$_}->{'exempt_monthly'}; + $tot_credit += $regions{$_}->{'credit'}; $taxclasses{$regions{$_}->{'taxclass'}} = 1 if $regions{$_}->{'taxclass'}; $county{$regions{$_}->{'county'}} = 1; @@ -604,6 +706,7 @@ push @regions, { 'rate' => '', 'owed' => $tot_owed, 'tax' => $tot_tax, + 'credit' => $tot_credit, }; #-- @@ -620,8 +723,9 @@ sub getlabel { my $label; if ( $r->tax == 0 - && ! scalar( qsearch('cust_main_county', { 'state' => $r->state, + && ! scalar( qsearch('cust_main_county', { 'city' => $r->city, 'county' => $r->county, + 'state' => $r->state, 'country' => $r->country, 'tax' => { op=>'>', value=>0 }, } @@ -640,6 +744,7 @@ sub getlabel { $label = $r->country; $label = $r->state.", $label" if $r->state; $label = $r->county." county, $label" if $r->county; + $label = $r->city. ", $label" if $r->city && $cgi->param('show_cities'); $label = "$label (". $r->taxclass. ")" if $r->taxclass && $cgi->param('show_taxclasses') @@ -676,5 +781,6 @@ $dateagentlink .= ';agentnum='. $cgi->param('agentnum') if length($agentname); my $baselink = $p. "search/cust_bill_pkg.cgi?$dateagentlink"; my $exemptlink = $p. "search/cust_tax_exempt_pkg.cgi?$dateagentlink"; +my $creditlink = $p. "search/cust_credit_bill_pkg.html?$dateagentlink";