Merge remote-tracking branch 'upstream/master'
[freeside.git] / httemplate / search / cust_bill_pkg_discount.html
1 <& elements/search.html,
2                  'title'       => 'Discounts',
3                  'name'        => 'discounts',
4                  'query'       => $query,
5                  'count_query' => $count_query,
6                  'count_addl'  => [ $money_char. '%.2f total', ],
7                  'header'      => [
8                    #'#',
9                    'Discount',
10                    'Class',
11                    'Amount',
12                    'Months',
13                    'Package',
14                    'Invoice',
15                    'Date',
16                    FS::UI::Web::cust_header(),
17                  ],
18                  'fields'      => [
19                    #'billpkgdiscountnum',
20                    sub { $_[0]->cust_pkg_discount->discount->description },
21                    sub { $_[0]->cust_pkg_discount->discount->classname },
22                    sub { sprintf($money_char.'%.2f', shift->amount ) },
23                    sub { my $m = shift->months;
24                          $m =~ /\./ ? sprintf('%.2f', $m) : $m;
25                        },
26                    'pkg',#sub { $_[0]->cust_bill_pkg->cust_pkg->part_pkg->pkg },
27                    'invnum',
28                    sub { time2str('%b %d %Y', shift->_date ) },
29                    \&FS::UI::Web::cust_fields,
30                  ],
31                  'sort_fields' => [
32                    '',
33                    '',
34                    'amount',
35                    'months',
36                    'pkg',
37                    'invnum',
38                    '_date',
39                  ],
40                  'links'       => [
41                    #'',
42                    '', #link to customer discount???
43                    '',
44                    '',
45                    '',
46                    '',
47                    $ilink,
48                    $ilink,
49                    ( map { $_ ne 'Cust. Status' ? $clink : '' }
50                          FS::UI::Web::cust_header()
51                    ),
52                  ],
53                  #'align' => 'rlrrrc'.FS::UI::Web::cust_aligns(),
54                  'align' => 'lcrrlrr'.FS::UI::Web::cust_aligns(),
55                  'color' => [ 
56                               #'',
57                               '',
58                               '',
59                               '',
60                               '',
61                               '',
62                               '',
63                               '',
64                               FS::UI::Web::cust_colors(),
65                             ],
66                  'style' => [ 
67                               #'',
68                               '',
69                               '',
70                               '',
71                               '',
72                               '',
73                               '',
74                               '',
75                               FS::UI::Web::cust_styles(),
76                             ],
77            
78 &>
79 <%init>
80
81 #a little false laziness below w/cust_bill_pkg.cgi
82
83 die "access denied"
84   unless $FS::CurrentUser::CurrentUser->access_right('Financial reports');
85
86 my $conf = new FS::Conf;
87
88 #here is the agent virtualization
89 my $agentnums_sql =
90   $FS::CurrentUser::CurrentUser->agentnums_sql( 'table' => 'cust_main' );
91
92 my @where = ( $agentnums_sql );
93
94 my($beginning, $ending) = FS::UI::Web::parse_beginning_ending($cgi);
95 push @where, "_date >= $beginning",
96              "_date <= $ending";
97
98 if ( $cgi->param('agentnum') =~ /^(\d+)$/ ) {
99   push @where, "cust_main.agentnum = $1";
100 }
101
102 #usernum
103 if ( $cgi->param('usernum') =~ /^(\d+)$/ ) {
104   push @where, "cust_pkg_discount.usernum = $1";
105 }
106
107 # (discount) classnum
108 my $join_discount = '';
109 #false laziness w/cust_pkg_discount.html and cust_pkg.pm::search
110 if ( grep { $_ eq 'discount_classnum' } $cgi->param ) {
111
112 #  my @classnum = ();
113 #  if ( ref($params->{'discount_classnum'}) ) {
114 #
115 #    if ( ref($params->{'discount_classnum'}) eq 'HASH' ) {
116 #      @classnum = grep $params->{'discount_classnum'}{$_}, keys %{ $params->{'discount_classnum'} };
117 #    } elsif ( ref($params->{'discount_classnum'}) eq 'ARRAY' ) {
118 #      @classnum = @{ $params->{'discount_classnum'} };
119 #    } else {
120 #      die 'unhandled discount_classnum ref '. $params->{'discount_classnum'};
121 #    }
122 #
123 #
124 #  } elsif ( $params->{'discount_classnum'} =~ /^(\d*)$/ && $1 ne '0' ) {
125 #    @classnum = ( $1 );
126 #  }
127 #
128 #  if ( @classnum ) {
129
130    if ( $cgi->param('discount_classnum') =~ /^(\d*)$/ && $1 ne '0' ) {
131     my @classnum = ( $1 );
132
133     $join_discount = 'LEFT JOIN discount USING (discountnum)';
134
135     my @c_where = ();
136     my @nums = grep $_, @classnum;
137     push @c_where, 'discount.classnum IN ('. join(',',@nums). ')' if @nums;
138     my $null = scalar( grep { $_ eq '' } @classnum );
139     push @c_where, 'discount.classnum IS NULL' if $null;
140
141     if ( scalar(@c_where) == 1 ) {
142       push @where, @c_where;
143     } elsif ( @c_where ) {
144       push @where, ' ( '. join(' OR ', @c_where). ' ) ';
145     }
146
147   }
148
149 }
150
151 # #(package) classnum
152 # # not specified: all classes
153 # # 0: empty class
154 # # N: classnum
155 # my $use_override = $cgi->param('use_override');
156 # if ( $cgi->param('classnum') =~ /^(\d+)$/ ) {
157 #   my $comparison = '';
158 #   if ( $1 == 0 ) {
159 #     $comparison = "IS NULL";
160 #   } else {
161 #     $comparison = "= $1";
162 #   }
163
164 #   if ( $use_override ) {
165 #     push @where, "(
166 #       part_pkg.classnum $comparison AND pkgpart_override IS NULL OR
167 #       override.classnum $comparison AND pkgpart_override IS NOT NULL
168 #     )";
169 #   } else {
170 #     push @where, "part_pkg.classnum $comparison";
171 #   }
172 # }
173
174 my $count_query = "SELECT COUNT(*), SUM(cust_bill_pkg_discount.amount)";
175
176 my $join_cust_pkg_discount =
177   'LEFT JOIN cust_pkg_discount USING (pkgdiscountnum)';
178
179 my $join_cust =
180   '         JOIN cust_bill USING ( invnum ) '.
181   FS::UI::Web::join_cust_main('cust_bill', 'cust_pkg');
182
183 my $join_pkg =
184   '    JOIN cust_bill_pkg USING ( billpkgnum )
185   LEFT JOIN cust_pkg ON ( cust_bill_pkg.pkgnum = cust_pkg.pkgnum )
186   LEFT JOIN part_pkg USING ( pkgpart ) ';
187   #LEFT JOIN part_pkg AS override
188   #  ON pkgpart_override = override.pkgpart ';
189
190 my $join = "$join_cust_pkg_discount $join_discount $join_pkg $join_cust";
191
192 my $where = ' WHERE '. join(' AND ', @where);
193
194 $count_query .= " FROM cust_bill_pkg_discount $join $where";
195
196 my @select = (
197                'cust_bill_pkg_discount.*',
198                #'cust_bill_pkg.*',
199                'cust_bill.invnum',
200                'cust_bill._date',
201              );
202 push @select, 'part_pkg.pkg';
203 push @select, 'cust_main.custnum',
204               FS::UI::Web::cust_sql_fields();
205
206 my $query = {
207   'table'     => 'cust_bill_pkg_discount',
208   'addl_from' => $join,
209   'hashref'   => {},
210   'select'    => join(', ', @select ),
211   'extra_sql' => $where,
212   'order_by'  => 'ORDER BY _date, billpkgdiscountnum',
213 };
214
215 my $ilink = [ "${p}view/cust_bill.cgi?", 'invnum' ];
216 my $clink = [ "${p}view/cust_main.cgi?", 'custnum' ];
217
218 my $conf = new FS::Conf;
219 my $money_char = $conf->config('money_char') || '$';
220
221 </%init>