fixup new line item report brainfart
[freeside.git] / httemplate / search / cust_bill_pkg.cgi
1 <%
2
3 my($beginning, $ending) = FS::UI::Web::parse_beginning_ending($cgi);
4
5 my $join_cust = "
6     JOIN cust_bill USING ( invnum ) 
7     JOIN cust_main USING ( custnum )
8 ";
9
10 my $join_pkg = "
11     LEFT JOIN cust_pkg USING ( pkgnum )
12     LEFT JOIN part_pkg USING ( pkgpart )
13 ";
14
15 my $where = "
16   WHERE _date >= $beginning AND _date <= $ending
17     AND payby != 'COMP'
18 ";
19
20 if ( $cgi->param('out') ) {
21
22   $where .= "
23     AND 0 = ( SELECT COUNT(*) FROM cust_main_county
24                WHERE (    cust_main_county.county  = cust_main.county
25                        OR cust_main_county.county IS NULL AND cust_main.county  =  ''
26                        OR cust_main_county.county  =  ''  AND cust_main.county IS NULL
27                      )
28                  AND (    cust_main_county.state   = cust_main.state
29                        OR cust_main_county.state  IS NULL AND cust_main.state  =  ''
30                        OR cust_main_county.state   =  ''  AND cust_main.state IS NULL
31                      )
32                  AND cust_main_county.country = cust_main.country
33                  AND cust_main_county.tax > 0
34             )
35   ";
36
37 } elsif ( $cgi->param('country' ) ) {
38
39   my $county  = dbh->quote( $cgi->param('county')  );
40   my $state   = dbh->quote( $cgi->param('state')   );
41   my $country = dbh->quote( $cgi->param('country') );
42   $where .= "
43     AND ( county  = $county OR $county = '' )
44     AND ( state   = $state  OR $state = '' )
45     AND   country = $country
46   ";
47   $where .= ' AND taxclass = '. dbh->quote( $cgi->param('taxclass') )
48     if $cgi->param('taxclass');
49
50 }
51
52 $where .= ' AND pkgnum != 0' if $cgi->param('nottax');
53
54 $where .= ' AND pkgnum = 0' if $cgi->param('istax');
55
56 $where .= " AND tax = 'Y'" if $cgi->param('cust_tax');
57
58 my $count_query;
59 if ( $cgi->param('pkg_tax') ) {
60
61   $count_query =
62     "SELECT COUNT(*), SUM( ( CASE WHEN part_pkg.setuptax = 'Y'
63                                  THEN cust_bill_pkg.setup
64                                  ELSE 0 )
65                           +
66                           ( CASE WHEN part_pkg.recurtax = 'Y'
67                                  THEN cust_bill_pkg.recur
68                                  ELSE 0 )
69                         )";
70
71   $where .= " AND (
72                        ( part_pkg.setuptax = 'Y' AND cust_bill_pkg.setup > 0 )
73                     OR ( part_pkg.recurtax = 'Y' AND cust_bill_pkg.recur > 0 )
74                   )";
75
76 } else {
77
78   $count_query =
79     "SELECT COUNT(*), SUM(cust_bill_pkg.setup + cust_bill_pkg.recur)";
80
81 }
82 $count_query .= " FROM cust_bill_pkg $join_cust  $join_pkg $where";
83
84 my $query = {
85   'table'     => 'cust_bill_pkg',
86   'addl_from' => "$join_cust $join_pkg",
87   'hashref'   => {},
88   'select'    => join(', ',
89                    'cust_bill_pkg.*',
90                    'cust_bill._date',
91                    'part_pkg.pkg',
92                    'cust_main.custnum',
93                    FS::UI::Web::cust_sql_fields(),
94                  ),
95   'extra_sql' => $where,
96 };
97
98 my $ilink = [ "${p}view/cust_bill.cgi?", 'invnum' ];
99 my $clink = [ "${p}view/cust_main.cgi?", 'custnum' ];
100
101 my $conf = new FS::Conf;
102 my $money_char = $conf->config('money_char') || '$';
103
104 %><%= include( 'elements/search.html',
105                  'title'       => 'Line items',
106                  'name'        => 'line items',
107                  'query'       => $query,
108                  'count_query' => $count_query,
109                  'count_addl'  => [ $money_char. '%.2f total', ],
110                  'header'      => [
111                    '#',
112                    'Description',
113                    'Setup charge',
114                    'Recurring charge',
115                    'Invoice',
116                    'Date',
117                    FS::UI::Web::cust_header(),
118                  ],
119                  'fields'      => [
120                    'billpkgnum',
121                    sub { $_[0]->pkgnum > 0
122                            ? $_[0]->get('pkg')
123                            : $_[0]->get('itemdesc')
124                        },
125                    #strikethrough or "N/A ($amount)" or something these when
126                    # they're not applicable to pkg_tax search
127                    sub { sprintf($money_char.'%.2f', shift->setup ) },
128                    sub { sprintf($money_char.'%.2f', shift->recur ) },
129                    'invnum',
130                    sub { time2str('%b %d %Y', shift->_date ) },
131                    \&FS::UI::Web::cust_fields,
132                  ],
133                  'links'       => [
134                    '',
135                    '',
136                    '',
137                    '',
138                    $ilink,
139                    $ilink,
140                    ( map { $clink } FS::UI::Web::cust_header() ),
141                  ],
142                  'align' => 'rlrrrc',
143            )
144 %>
145