b8fbe200f4882ddc7efd80065c47c33edb7a86d7
[freeside.git] / httemplate / search / agent_commission.html
1 %# still not a good way to do rows grouped by some field in a search.html 
2 %# report
3 <& /elements/header.html, $title &>
4 <BR>
5 <STYLE TYPE="text/css">
6 td.cust_head {
7   border-left: none;
8   border-right: none;
9   padding-top: 0.5em;
10   font-weight: bold;
11   background-color: #ffffff;
12 }
13 td.money { text-align: right; }
14 td.money:before { content: '<% $money_char %>'; }
15 .row0 { background-color: #eeeeee; }
16 .row1 { background-color: #ffffff; }
17 </STYLE>
18 <& /elements/table-grid.html &>
19   <TR STYLE="background-color: #cccccc">
20     <TH CLASS="grid">Package</TH>
21     <TH CLASS="grid">Sales</TH>
22     <TH CLASS="grid">Percentage</TH>
23     <TH CLASS="grid">Commission</TH>
24   </TR>
25 % my ($custnum, $sales, $commission, $row, $bgcolor) = (0, 0, 0, 0);
26 % foreach my $cust_pkg ( @cust_pkg ) {
27 %   if ( $custnum ne $cust_pkg->custnum ) {
28 %     # start of a new customer section
29 %     my $cust_main = $cust_pkg->cust_main;
30 %     my $label = $cust_main->custnum . ': '. $cust_main->name;
31 %     $bgcolor = 0;
32   <TR>
33     <TD COLSPAN=4 CLASS="cust_head">
34       <A HREF="<%$p%>view/cust_main.cgi?<%$cust_main->custnum%>"><% $label %></A>
35     </TD>
36   </TR>
37 %   }
38   <TR CLASS="row<% $bgcolor %>">
39     <TD CLASS="grid"><% $cust_pkg->pkg_label %></TD>
40     <TD CLASS="money"><% sprintf('%.2f', $cust_pkg->sum_charged) %></TD>
41     <TD ALIGN="right"><% $cust_pkg->percent %>%</TD>
42     <TD CLASS="money"><% sprintf('%.2f',
43                       $cust_pkg->sum_charged * $cust_pkg->percent / 100) %></TD>
44   </TR>
45 %   $sales += $cust_pkg->sum_charged;
46 %   $commission += $cust_pkg->sum_charged * $cust_pkg->percent / 100;
47 %   $row++;
48 %   $bgcolor = 1-$bgcolor;
49 %   $custnum = $cust_pkg->custnum;
50 % }
51   <TR STYLE="background-color: #f5f6be">
52     <TD CLASS="grid">
53       <% emt('[quant,_1,package] with commission', $row) %>
54     </TD>
55     <TD CLASS="money"><% sprintf('%.2f', $sales) %></TD>
56     <TD></TD>
57     <TD CLASS="money"><% sprintf('%.2f', $commission) %></TD>
58   </TR>
59 </TABLE>
60 <& /elements/footer.html &>
61 <%init>
62 die "access denied" 
63   unless $FS::CurrentUser::CurrentUser->access_right('Financial reports');
64
65 my ($begin, $end) = FS::UI::Web::parse_beginning_ending($cgi);
66 $cgi->param('agentnum') =~ /^(\d+)$/ or die "bad agentnum";
67 my $agentnum = $1;
68 my $agent = FS::agent->by_key($agentnum);
69
70 my $title = $agent->agent . ' commissions';
71
72 my $sum_charged =
73   '(SELECT SUM(setup + recur) FROM cust_bill_pkg JOIN cust_bill USING (invnum)'.
74     'WHERE cust_bill_pkg.pkgnum = cust_pkg.pkgnum AND '.
75     "cust_bill._date >= $begin AND cust_bill._date < $end)";
76
77 my @select = (
78   'cust_pkg.*',
79   'agent_pkg_class.commission_percent AS percent',
80   "$sum_charged AS sum_charged",
81 );
82
83 my $query = {
84   'table'       => 'cust_pkg',
85   'select'      => join(',', @select),
86   'addl_from'   => 'JOIN cust_main  USING (custnum) '.
87                    'JOIN part_pkg   USING (pkgpart) '.
88                    'JOIN agent_pkg_class ON (  '.
89                      'cust_main.agentnum = agent_pkg_class.agentnum AND '.
90                      '( agent_pkg_class.classnum = part_pkg.classnum OR '.
91                      '(agent_pkg_class IS NULL AND part_pkg.classnum IS NULL)'.
92                      ' )  ) ',
93   'extra_sql'   => "WHERE cust_main.agentnum = $agentnum AND ".
94                    'agent_pkg_class.commission_percent > 0 AND '.
95                    "$sum_charged > 0",
96   'order_by'    => 'ORDER BY cust_pkg.custnum ASC',
97 };
98
99 my @cust_pkg = qsearch($query);
100
101 my $money_char = FS::Conf->new->config('money_char') || '$';
102
103 #my $count_query = 
104 #  'SELECT COUNT(*) FROM cust_pkg '.$query->{'addl_from'}.$query->{'extra_sql'}.
105 #  ' AND EXISTS(SELECT 1 FROM cust_bill_pkg JOIN cust_bill USING (invnum) '.
106 #    ' WHERE cust_bill_pkg.pkgnum = cust_pkg.pkgnum AND '.
107 #    "cust_bill._date >= $begin AND cust_bill._date < $end".
108 #  ')';
109 </%init>