option to disable customer/package counts on agent browser, RT#29748
[freeside.git] / httemplate / browse / agent.cgi
1 <% include("/elements/header.html",'Agent Listing', menubar(
2   'Agent Types' => $p. 'browse/agent_type.cgi',
3 #  'Add new agent' => '../edit/agent.cgi'
4 )) %>
5 Agents are resellers of your service. Agents may be limited to a subset of your
6 full offerings (via their type).<BR><BR>
7 <A HREF="<% $p %>edit/agent.cgi"><I>Add a new agent</I></A><BR><BR>
8 % if ( dbdef->table('agent')->column('disabled') ) { 
9
10   <% $cgi->param('showdisabled')
11       ? do { $cgi->param('showdisabled', 0);
12              '( <a href="'. $cgi->self_url. '">hide disabled agents</a> )'; }
13       : do { $cgi->param('showdisabled', 1);
14              '( <a href="'. $cgi->self_url. '">show disabled agents</a> )'; }
15   %>
16 % } 
17
18
19 <% include('/elements/table-grid.html') %>
20 % my $bgcolor1 = '#eeeeee';
21 %   my $bgcolor2 = '#ffffff';
22 %   my $bgcolor = '';
23
24 <TR>
25   <TH CLASS="grid" BGCOLOR="#cccccc" COLSPAN=<% ( $cgi->param('showdisabled') || !dbdef->table('agent')->column('disabled') ) ? 2 : 3 %>>Agent</TH>
26   <TH CLASS="grid" BGCOLOR="#cccccc">Type</TH>
27   <TH CLASS="grid" BGCOLOR="#cccccc">Master Customer</TH>
28   <TH CLASS="grid" BGCOLOR="#cccccc">Commissions</TH>
29   <TH CLASS="grid" BGCOLOR="#cccccc">Access Groups</TH>
30   <TH CLASS="grid" BGCOLOR="#cccccc"><FONT SIZE=-1>Invoice<BR>Template</FONT></TH>
31   <TH CLASS="grid" BGCOLOR="#cccccc">Customers</TH>
32   <TH CLASS="grid" BGCOLOR="#cccccc"><FONT SIZE=-1>Customer<BR>packages</FONT></TH>
33   <TH CLASS="grid" BGCOLOR="#cccccc">Reports</TH>
34   <TH CLASS="grid" BGCOLOR="#cccccc"><FONT SIZE=-1>Registration<BR>codes</FONT></TH>
35   <TH CLASS="grid" BGCOLOR="#cccccc">Prepaid cards</TH>
36
37 % if ( $conf->config('ticket_system') ) { 
38     <TH CLASS="grid" BGCOLOR="#cccccc">Ticketing</TH>
39 % } 
40
41   <TH CLASS="grid" BGCOLOR="#cccccc"><FONT SIZE=-1>Payment Gateway Overrides</FONT></TH>
42   <TH CLASS="grid" BGCOLOR="#cccccc"><FONT SIZE=-1>Configuration Overrides</FONT></TH>
43 </TR>
44
45 %#        <TH><FONT SIZE=-1>Agent #</FONT></TH>
46 %#        <TH>Agent</TH>
47 %foreach my $agent ( sort { 
48 %  #$a->getfield('agentnum') <=> $b->getfield('agentnum')
49 %  $a->getfield('agent') cmp $b->getfield('agent')
50 %} qsearch('agent', \%search ) ) {
51 %
52 %  my $cust_main_link = $p. 'search/cust_main.cgi?agentnum_on=1&'.
53 %                       'agentnum='. $agent->agentnum;
54 %
55 %  my $cust_pkg_link = $p. 'search/cust_pkg.cgi?agentnum='. $agent->agentnum;
56 %  
57 %  if ( $bgcolor eq $bgcolor1 ) {
58 %    $bgcolor = $bgcolor2;
59 %  } else {
60 %    $bgcolor = $bgcolor1;
61 %  }
62
63       <TR>
64
65 %       ##
66 %       # agentnum
67 %       ##
68         <TD CLASS="grid" BGCOLOR="<% $bgcolor %>">
69           <A HREF="<%$p%>edit/agent.cgi?<% $agent->agentnum %>"><% $agent->agentnum %></A>
70         </TD>
71
72 %       ##
73 %       # disabled
74 %       ##
75 %       if ( ! $cgi->param('showdisabled') ) { 
76           <TD CLASS="grid" BGCOLOR="<% $bgcolor %>" ALIGN="center">
77             <% $agent->disabled ? '<FONT COLOR="#FF0000"><B>DISABLED</B></FONT>'
78                                 : '<FONT COLOR="#00CC00"><B>Active</B></FONT>'
79             %>
80           </TD>
81 %       } 
82
83 %       ##
84 %       # agent
85 %       ##
86         <TD CLASS="grid" BGCOLOR="<% $bgcolor %>">
87           <A HREF="<%$p%>edit/agent.cgi?<% $agent->agentnum %>"><% $agent->agent %></A>
88         </TD>
89
90 %       ##
91 %       # type
92 %       ##
93         <TD CLASS="grid" BGCOLOR="<% $bgcolor %>">
94           <A HREF="<%$p%>edit/agent_type.cgi?<% $agent->typenum %>"><% $agent->agent_type->atype %></A>
95         </TD>
96
97 %       ##
98 %       # master customer
99 %       ##
100         <TD CLASS="inv" BGCOLOR="<% $bgcolor %>">
101 %         if ( $agent->agent_custnum ) {
102             <& /elements/small_custview.html,
103                  $agent->agent_custnum,
104                  scalar($conf->config('countrydefault')),
105                  1, #show balance
106                  $p.'view/cust_main.cgi',
107             &>
108 %         }
109         </TD>
110
111 %       ##
112 %       # commissions
113 %       ##
114
115         <TD CLASS="grid" BGCOLOR="<% $bgcolor %>">
116
117           <TABLE>
118
119 %           #surprising amount of false laziness w/ edit/process/agent.cgi
120 %           my @pkg_class = qsearch('pkg_class', { 'disabled'=>'' });
121 %           foreach my $pkg_class ( '', @pkg_class ) {
122 %             my %agent_pkg_class = ( 'agentnum' => $agent->agentnum,
123 %                                     'classnum' => $pkg_class ? $pkg_class->classnum : ''
124 %                                   );
125 %             my $agent_pkg_class =
126 %               qsearchs( 'agent_pkg_class', \%agent_pkg_class )
127 %               || new FS::agent_pkg_class   \%agent_pkg_class;
128 %             my $param = 'classnum'. $agent_pkg_class{classnum};
129
130               <TR>
131                 <TD><% $agent_pkg_class->commission_percent || 0 %>%</TD>
132                 <TD><% $pkg_class ? $pkg_class->classname : mt('(no package class)') |h %>
133                 </TD>
134               </TR>
135
136 %           }
137
138           </TABLE>
139
140         </TD>
141
142 %       ##
143 %       # access groups
144 %       ##
145         <TD CLASS="grid" BGCOLOR="<% $bgcolor %>">
146 %         foreach my $access_group (
147 %           map $_->access_group,
148 %               qsearch('access_groupagent', { 'agentnum' => $agent->agentnum })
149 %         ) {
150             <A HREF="<%$p%>edit/access_group.html?<% $access_group->groupnum %>"><% $access_group->groupname |h %><BR>
151 %         }
152         </TD>
153
154 %       ##
155 %       # invoice template
156 %       ##
157         <TD CLASS="grid" BGCOLOR="<% $bgcolor %>">
158           <% $agent->invoice_template || '(Default)' %>
159         </TD>
160
161 %       ##
162 %       # customers
163 %       ##
164
165         <TD CLASS="inv" BGCOLOR="<% $bgcolor %>" VALIGN="bottom">
166           <TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0>
167
168 %           my @cust_status =
169 %             qw( prospect inactive ordered active suspended cancelled );
170 %           my %method = ( 'suspended' => 'susp',
171 %                          'cancelled' => 'cancel'
172 %                        );
173 %           my %PL = ( 'prospect' => 'prospects', );
174 %           my %link = ( 'cancelled' => 'showcancelledcustomers=1&cancelled' );
175 %           my $statuscolor = FS::cust_main->statuscolors;
176 %
177 %           foreach my $status ( @cust_status ) {
178 %             my $meth = exists($method{$status}) ? $method{$status} : $status;
179 %             $meth = 'num_'. $meth. '_cust_main';
180 %             my $link = exists($link{$status}) ? $link{$status} : $status;
181
182               <TR>
183 %               my $num = 0;
184 %               unless ( $disable_counts ) {
185                   <TH ALIGN="right" WIDTH="40%">
186                     <FONT COLOR="#<% $statuscolor->{$status} %>">
187                       <% $num = $agent->$meth() %>&nbsp;
188                     </FONT>
189                   </TH>
190 %               }
191                 <TD>
192 % if ( $num || $disable_counts ) { 
193 %                 
194
195                   <A HREF="<% $cust_main_link. "&$link=1" %>">
196 % } 
197 <% exists($PL{$status}) ? $PL{$status} : $status %>
198 % if ($num || $disable_counts ) {
199 </A>
200 % } 
201
202               <TD>
203             </TR>
204
205 %           }
206
207           </TABLE>
208         </TD>
209
210 %       ##
211 %       # customer packages
212 %       ##
213
214         <TD CLASS="inv" BGCOLOR="<% $bgcolor %>" VALIGN="bottom">
215           <TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0>
216
217 %           #my @pkg_status = FS::cust_pkg->statuses;
218 %           my @pkg_status = ( 'on hold', 'one-time charge', 'not yet billed',
219 %                              qw( active suspended cancelled ) );
220 %           my %method = ( 'one-time charge' => 'inactive',
221 %                          'suspended'       => 'susp',
222 %                          'cancelled'       => 'cancel',
223 %                        );
224 %           my $statuscolor = FS::cust_pkg->statuscolors;
225 %
226 %           foreach my $status ( @pkg_status ) {
227 %             my $magic = exists($method{$status}) ? $method{$status} : $status;
228 %             $magic =~ s/ /_/g;
229 %             my $meth = 'num_'. $magic. '_cust_pkg';
230 %             ( my $label = $status ) =~ s/ /&nbsp;/g;
231
232               <TR>
233 %               my $num = 0;
234 %               unless ( $disable_counts ) {
235                   <TH ALIGN="right" WIDTH="40%">
236                     <FONT COLOR="#<% $statuscolor->{$status} %>">
237                       <% $num = $agent->$meth() %>&nbsp;
238                     </FONT>
239                   </TH>
240 %               }
241
242               <TD>
243 % if ( $num || $disable_counts ) { 
244
245                   <A HREF="<% $cust_pkg_link %>&magic=<% $magic %>">
246 % } 
247 <% $label %>
248 % if ( $num || $disable_counts ) { 
249 </A>
250 % } 
251
252               </TD>
253             </TR>
254
255 %           }
256
257           </TABLE>
258         </TD>
259
260 %       ##
261 %       # reports
262 %       ##
263         <TD CLASS="grid" BGCOLOR="<% $bgcolor %>">
264           <A HREF="<% $p %>graph/report_cust_pkg.html?agentnum=<% $agent->agentnum %>">Package&nbsp;Churn</A>
265           <BR><A HREF="<% $p %>search/report_cust_pay.html?agentnum=<% $agent->agentnum %>">Payments</A>
266           <BR><A HREF="<% $p %>search/report_cust_credit.html?agentnum=<% $agent->agentnum %>">Credits</A>
267           <BR><A HREF="<% $p %>search/report_receivables.cgi?agentnum=<% $agent->agentnum %>">A/R&nbsp;Aging</A>
268           <!--<BR><A HREF="<% $p %>search/money_time.cgi?agentnum=<% $agent->agentnum %>">Sales/Credits/Receipts</A>-->
269         </TD>
270
271 %       ##
272 %       # registration codes
273 %       ##
274
275         <TD CLASS="grid" BGCOLOR="<% $bgcolor %>">
276           <% my $num_reg_code = $agent->num_reg_code %>
277 % if ( $num_reg_code ) { 
278
279             <A HREF="<%$p%>search/reg_code.html?agentnum=<% $agent->agentnum %>">
280 % } 
281 Unused
282 % if ( $num_reg_code ) { 
283 </A>
284 % } 
285
286           <BR><A HREF="<%$p%>edit/reg_code.cgi?agentnum=<% $agent->agentnum %>">Generate codes</A>
287         </TD>
288
289 %       ##
290 %       # prepaid cards
291 %       ##
292
293         <TD CLASS="grid" BGCOLOR="<% $bgcolor %>">
294           <% my $num_prepay_credit = $agent->num_prepay_credit %>
295 % if ( $num_prepay_credit ) { 
296
297             <A HREF="<%$p%>search/prepay_credit.html?agentnum=<% $agent->agentnum %>">
298 % } 
299 Unused
300 % if ( $num_prepay_credit ) { 
301 </A>
302 % } 
303
304           <BR><A HREF="<%$p%>edit/prepay_credit.cgi?agentnum=<% $agent->agentnum %>">Generate cards</A>
305         </TD>
306
307 %       ##
308 %       # ticketing
309 %       ##
310 % if ( $conf->config('ticket_system') ) { 
311           <TD CLASS="grid" BGCOLOR="<% $bgcolor %>">
312 % if ( $agent->ticketing_queueid ) { 
313               Queue: <% $agent->ticketing_queueid %>: <% $agent->ticketing_queue %><BR>
314 % } 
315           </TD>
316 % } 
317
318
319 %       ##
320 %       # payment gateway overrides
321 %       ##
322         <TD CLASS="inv" BGCOLOR="<% $bgcolor %>">
323           <TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0>
324 % foreach my $override (
325 %                 # sort { }  want taxclass-full stuff first?  and default cards (empty cardtype)
326 %                 qsearch('agent_payment_gateway', { 'agentnum' => $agent->agentnum } )
327 %               ) {
328 %            
329
330               <TR>
331                 <TD> 
332                   <% $override->cardtype || 'Default' %> to <% $override->payment_gateway->gateway_module %> (<% $override->payment_gateway->gateway_username %>)
333                   <% $override->taxclass
334                         ? ' for '. $override->taxclass. ' only'
335                         : ''
336                   %>
337                   <FONT SIZE=-1><A HREF="javascript:areyousure('delete this payment gateway override', '<%$p%>misc/delete-agent_payment_gateway.cgi?<% $override->agentgatewaynum %>')">(delete)</A></FONT>
338                 </TD>
339               </TR>
340 % } 
341
342             <TR>
343               <TD><FONT SIZE=-1><A HREF="<%$p%>edit/agent_payment_gateway.html?agentnum=<% $agent->agentnum %>">(add override)</A></FONT></TD>
344             </TR>
345           </TABLE>
346         </TD>
347
348 %       ##
349 %       # configuration overrides
350 %       ##
351
352         <TD CLASS="inv" BGCOLOR="<% $bgcolor %>">
353           <TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0>
354 % foreach my $override (
355 %                 qsearch('conf', { 'agentnum' => $agent->agentnum } )
356 %               ) {
357 %            
358
359               <TR>
360                 <TD> 
361                   <% $override->name %>&nbsp;<FONT SIZE=-1><A HREF="javascript:areyousure('delete this configuration override', '<%$p%>config/config-delete.cgi?confnum=<% $override->confnum %>')">(delete)</A></FONT>
362                 </TD>
363               </TR>
364 % } 
365
366             <TR>
367               <TD><FONT SIZE=-1><A HREF="<%$p%>config/config-view.cgi?agentnum=<% $agent->agentnum %>">(view/add/edit overrides)</A></FONT></TD>
368             </TR>
369           </TABLE>
370         </TD>
371
372       </TR>
373 % } 
374
375
376     </TABLE>
377
378 <SCRIPT TYPE="text/javascript">
379   function areyousure(what, href) {
380     if ( confirm("Are you sure you want to " + what + "?") == true )
381       window.location.href = href;
382   }
383 </SCRIPT>
384
385   </BODY>
386 </HTML>
387 <%init>
388
389 die "access denied"
390   unless $FS::CurrentUser::CurrentUser->access_right('Configuration');
391
392 my %search;
393 if ( $cgi->param('showdisabled')
394      || !dbdef->table('agent')->column('disabled') ) {
395   %search = ();
396 } else {
397   %search = ( 'disabled' => '' );
398 }
399
400 my $conf = new FS::Conf;
401 my $disable_counts = $conf->exists('agent-disable_counts');
402
403 </%init>