X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=httemplate%2Fsearch%2Fcust_bill_pkg.cgi;h=34c89e53271fc120ec78de2cabd737e3591a3951;hb=06fb1346ff8076a84f743fa07de31852942e144f;hp=ed3444027ab2dbd9060c5fc34fad5beda913571f;hpb=fd4322f01b8c53b3f1f9e54ca15184930b0443de;p=freeside.git diff --git a/httemplate/search/cust_bill_pkg.cgi b/httemplate/search/cust_bill_pkg.cgi index ed3444027..34c89e532 100644 --- a/httemplate/search/cust_bill_pkg.cgi +++ b/httemplate/search/cust_bill_pkg.cgi @@ -6,9 +6,12 @@ 'count_addl' => \@total_desc, 'header' => [ emt('Description'), + @post_desc_header, @peritem_desc, emt('Invoice'), emt('Date'), + emt('Paid'), + emt('Credited'), FS::UI::Web::cust_header(), ], 'fields' => [ @@ -16,60 +19,76 @@ ? $_[0]->get('pkg') # possibly use override.pkg : $_[0]->get('itemdesc') # but i think this correct }, + @post_desc, #strikethrough or "N/A ($amount)" or something these when # they're not applicable to pkg_tax search @peritem_sub, 'invnum', sub { time2str('%b %d %Y', shift->_date ) }, + sub { sprintf($money_char.'%.2f', shift->get('pay_amount')) }, + sub { sprintf($money_char.'%.2f', shift->get('credit_amount')) }, \&FS::UI::Web::cust_fields, ], 'sort_fields' => [ '', + @post_desc_null, @peritem, 'invnum', '_date', + #'pay_amount', + #'credit_amount', ], 'links' => [ #'', '', + @post_desc_null, @peritem_null, $ilink, $ilink, + $pay_link, + $credit_link, ( map { $_ ne 'Cust. Status' ? $clink : '' } FS::UI::Web::cust_header() ), ], #'align' => 'rlrrrc'.FS::UI::Web::cust_aligns(), 'align' => 'l'. + $post_desc_align. $peritem_align. - 'rc'. + 'rcrr'. FS::UI::Web::cust_aligns(), 'color' => [ #'', '', + @post_desc_null, @peritem_null, '', '', + '', + '', FS::UI::Web::cust_colors(), ], 'style' => [ #'', '', + @post_desc_null, @peritem_null, '', '', + '', + '', FS::UI::Web::cust_styles(), ], &> <%doc> -Output parameters: +Output control parameters: - distribute: Boolean. If true, recurring fees will be "prorated" for the portion of the package date range (sdate-edate) that falls within the date range of the report. Line items will be limited to those for which this portion is > 0. This disables filtering on invoice date. -- use_usage: Separate usage (cust_bill_pkg_detail records) from +- usage: Separate usage (cust_bill_pkg_detail records) from recurring charges. If set to "usage", will show usage instead of recurring charges. If set to "recurring", will deduct usage and only show the flat rate charge. If not passed, the "recurring charge" column @@ -155,13 +174,24 @@ my $money_char = $conf->config('money_char') || '$'; my @select = ( 'cust_bill_pkg.*', 'cust_bill._date' ); my @total = ( 'COUNT(*)', 'SUM(cust_bill_pkg.setup + cust_bill_pkg.recur)'); my @total_desc = ( '%d line items', $money_char.'%.2f total' ); # sprintf strings + my @peritem = ( 'setup', 'recur' ); my @peritem_desc = ( 'Setup charge', 'Recurring charge' ); -my ($join_cust, $join_pkg ) = ('', ''); -my $use_usage; + +my @post_desc_header = (); +my @post_desc = (); +my @post_desc_null = (); +my $post_desc_align = ''; +if ( $conf->exists('enable_taxclasses') ) { + push @post_desc_header, 'Tax class'; + push @post_desc, 'taxclass'; + push @post_desc_null, ''; + $post_desc_align .= 'l'; + push @select, 'part_pkg.taxclass'; # or should this use override? +} # valid in both the tax and non-tax cases -$join_cust = +my $join_cust = " LEFT JOIN cust_bill USING (invnum) LEFT JOIN cust_main USING (custnum) "; @@ -205,27 +235,27 @@ if ( $cgi->param('custnum') =~ /^(\d+)$/ ) { push @where, "cust_main.custnum = $1"; } +# we want the package and its definition if available +my $join_pkg = +' LEFT JOIN cust_pkg USING (pkgnum) + LEFT JOIN part_pkg USING (pkgpart)'; + +my $part_pkg = 'part_pkg'; +if ( $cgi->param('use_override') ) { + # still need the real part_pkg for tax applicability, + # so alias this one + $join_pkg .= " LEFT JOIN part_pkg AS override ON ( + COALESCE(cust_bill_pkg.pkgpart_override, cust_pkg.pkgpart, 0) = part_pkg.pkgpart + )"; + $part_pkg = 'override'; +} +push @select, 'part_pkg.pkg'; # or should this use override? + # the non-tax case if ( $cgi->param('nottax') ) { push @where, 'cust_bill_pkg.pkgnum > 0'; - # then we want the package and its definition - $join_pkg = -' LEFT JOIN cust_pkg USING (pkgnum) - LEFT JOIN part_pkg USING (pkgpart)'; - - my $part_pkg = 'part_pkg'; - if ( $cgi->param('use_override') ) { - # still need the real part_pkg for tax applicability, - # so alias this one - $join_pkg .= " LEFT JOIN part_pkg AS override ON ( - COALESCE(cust_bill_pkg.pkgpart_override, cust_pkg.pkgpart, 0) = part_pkg.pkgpart - )"; - $part_pkg = 'override'; - } - push @select, 'part_pkg.pkg'; # or should this use override? - my @tax_where; # will go into a subquery my @exempt_where; # will also go into a subquery @@ -379,8 +409,7 @@ if ( $cgi->param('nottax') ) { } # recur/usage separation - $use_usage = $cgi->param('usage'); - if ( $use_usage eq 'recurring' ) { + if ( $cgi->param('usage') eq 'recurring' ) { my $recur_no_usage = FS::cust_bill_pkg->charged_sql('', '', no_usage => 1); push @select, "($recur_no_usage) AS recur_no_usage"; @@ -388,7 +417,7 @@ if ( $cgi->param('nottax') ) { $total[1] = "SUM(cust_bill_pkg.setup + $recur_no_usage)"; $total_desc[1] .= ' (excluding usage)'; - } elsif ( $use_usage eq 'usage' ) { + } elsif ( $cgi->param('usage') eq 'usage' ) { my $usage = FS::cust_bill_pkg->usage_sql(); push @select, "($usage) AS _usage"; @@ -491,6 +520,16 @@ if ( $cgi->param('nottax') ) { } # nottax / istax + +#total payments +my $pay_sub = "SELECT SUM(cust_bill_pay_pkg.amount) AS pay_amount, + billpkgnum + FROM cust_bill_pay_pkg + GROUP BY billpkgnum"; +$join_pkg .= " LEFT JOIN ($pay_sub) AS item_pay USING (billpkgnum)"; +push @select, 'item_pay.pay_amount'; + + # credit if ( $cgi->param('credit') ) { @@ -549,7 +588,20 @@ if ( $cgi->param('credit') ) { push @peritem_desc, 'Credited', 'By', 'Reason'; push @total, 'SUM(credit_amount)'; push @total_desc, "$money_char%.2f credited"; -} # if credit + +} else { + + #still want a credit total column + + my $credit_sub = "SELECT SUM(cust_credit_bill_pkg.amount) AS credit_amount, + billpkgnum + FROM cust_credit_bill_pkg + GROUP BY billpkgnum"; + $join_pkg .= " LEFT JOIN ($credit_sub) AS item_credit USING (billpkgnum)"; + + push @select, 'item_credit.credit_amount'; + +} push @select, 'cust_main.custnum', FS::UI::Web::cust_sql_fields(); @@ -587,6 +639,9 @@ my $peritem_align = 'r' x scalar(@peritem); my $ilink = [ "${p}view/cust_bill.cgi?", 'invnum' ]; my $clink = [ "${p}view/cust_main.cgi?", 'custnum' ]; +my $pay_link = ''; #[, 'billpkgnum', ]; +my $credit_link = [ "${p}search/cust_credit_bill_pkg.html?billpkgnum=", 'billpkgnum', ]; + warn "\n\nQUERY:\n".Dumper($query)."\n\nCOUNT_QUERY:\n$count_query\n\n" if $cgi->param('debug');