always pass the "time" parameter to join_conditions_sql, related to #28978
[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 % if ( $conf->config('currencies') ) { 
42     <TH CLASS="grid" BGCOLOR="#cccccc">Currencies</TH>
43 % } 
44
45   <TH CLASS="grid" BGCOLOR="#cccccc"><FONT SIZE=-1>Payment Gateway Overrides</FONT></TH>
46   <TH CLASS="grid" BGCOLOR="#cccccc"><FONT SIZE=-1>Configuration Overrides</FONT></TH>
47 </TR>
48
49 %#        <TH><FONT SIZE=-1>Agent #</FONT></TH>
50 %#        <TH>Agent</TH>
51 %foreach my $agent ( sort { 
52 %  #$a->getfield('agentnum') <=> $b->getfield('agentnum')
53 %  $a->getfield('agent') cmp $b->getfield('agent')
54 %} qsearch('agent', \%search ) ) {
55 %
56 %  my $cust_main_link = $p. 'search/cust_main.cgi?agentnum_on=1&'.
57 %                       'agentnum='. $agent->agentnum;
58 %
59 %  my $cust_pkg_link = $p. 'search/cust_pkg.cgi?agentnum='. $agent->agentnum;
60 %  
61 %  if ( $bgcolor eq $bgcolor1 ) {
62 %    $bgcolor = $bgcolor2;
63 %  } else {
64 %    $bgcolor = $bgcolor1;
65 %  }
66
67       <TR>
68
69         <TD CLASS="grid" BGCOLOR="<% $bgcolor %>">
70           <A HREF="<%$p%>edit/agent.cgi?<% $agent->agentnum %>"><% $agent->agentnum %></A>
71         </TD>
72
73 %       if ( ! $cgi->param('showdisabled') ) { 
74           <TD CLASS="grid" BGCOLOR="<% $bgcolor %>" ALIGN="center">
75             <% $agent->disabled ? '<FONT COLOR="#FF0000"><B>DISABLED</B></FONT>'
76                                 : '<FONT COLOR="#00CC00"><B>Active</B></FONT>'
77             %>
78           </TD>
79 %       } 
80
81         <TD CLASS="grid" BGCOLOR="<% $bgcolor %>">
82           <A HREF="<%$p%>edit/agent.cgi?<% $agent->agentnum %>"><% $agent->agent %></A>
83         </TD>
84
85         <TD CLASS="grid" BGCOLOR="<% $bgcolor %>">
86           <A HREF="<%$p%>edit/agent_type.cgi?<% $agent->typenum %>"><% $agent->agent_type->atype %></A>
87         </TD>
88
89         <TD CLASS="inv" BGCOLOR="<% $bgcolor %>">
90 %         if ( $agent->agent_custnum ) {
91             <& /elements/small_custview.html,
92                  $agent->agent_custnum,
93                  scalar($conf->config('countrydefault')),
94                  1, #show balance
95                  $p.'view/cust_main.cgi',
96             &>
97 %         }
98         </TD>
99
100         <TD CLASS="grid" BGCOLOR="<% $bgcolor %>">
101
102           <TABLE>
103
104 %           #surprising amount of false laziness w/ edit/process/agent.cgi
105 %           my @pkg_class = qsearch('pkg_class', { 'disabled'=>'' });
106 %           foreach my $pkg_class ( '', @pkg_class ) {
107 %             my %agent_pkg_class = ( 'agentnum' => $agent->agentnum,
108 %                                     'classnum' => $pkg_class ? $pkg_class->classnum : ''
109 %                                   );
110 %             my $agent_pkg_class =
111 %               qsearchs( 'agent_pkg_class', \%agent_pkg_class )
112 %               || new FS::agent_pkg_class   \%agent_pkg_class;
113 %             my $param = 'classnum'. $agent_pkg_class{classnum};
114
115               <TR>
116                 <TD><% $agent_pkg_class->commission_percent || 0 %>%</TD>
117                 <TD><% $pkg_class ? $pkg_class->classname : mt('(no package class)') |h %>
118                 </TD>
119               </TR>
120
121 %           }
122
123           </TABLE>
124
125         </TD>
126
127         <TD CLASS="grid" BGCOLOR="<% $bgcolor %>">
128 %         foreach my $access_group (
129 %           map $_->access_group,
130 %               qsearch('access_groupagent', { 'agentnum' => $agent->agentnum })
131 %         ) {
132             <A HREF="<%$p%>edit/access_group.html?<% $access_group->groupnum %>"><% $access_group->groupname |h %><BR>
133 %         }
134         </TD>
135
136         <TD CLASS="grid" BGCOLOR="<% $bgcolor %>">
137           <% $agent->invoice_template || '(Default)' %>
138         </TD>
139
140         <TD CLASS="inv" BGCOLOR="<% $bgcolor %>" VALIGN="bottom">
141           <TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0>
142
143             <TR>
144               <TH ALIGN="right" WIDTH="40%">
145                 <FONT COLOR="#7e0079">
146                   <% my $num_prospect = $agent->num_prospect_cust_main %>&nbsp;
147                 </FONT>
148               </TH>
149
150               <TD>
151 % if ( $num_prospect ) { 
152
153                   <A HREF="<% $cust_main_link %>&prospect=1">
154 % } 
155 prospects
156 % if ($num_prospect ) { 
157 </A>
158 % } 
159
160               <TD>
161             </TR>
162
163             <TR>
164               <TH ALIGN="right" WIDTH="40%">
165                 <FONT COLOR="#0000CC">
166                   <% my $num_inactive = $agent->num_inactive_cust_main %>&nbsp;
167                 </FONT>
168               </TH>
169
170               <TD>
171 % if ( $num_inactive ) { 
172
173                   <A HREF="<% $cust_main_link %>&inactive=1">
174 % } 
175 inactive
176 % if ( $num_inactive ) { 
177 </A>
178 % } 
179
180               </TD>
181             </TR>
182
183             <TR>
184               <TH ALIGN="right" WIDTH="40%">
185                 <FONT COLOR="#009999">
186                   <% my $num_ordered = $agent->num_ordered_cust_main %>&nbsp;
187                 </FONT>
188               </TH>
189
190               <TD>
191 % if ( $num_ordered ) { 
192
193                   <A HREF="<% $cust_main_link %>&ordered=1">
194 % } 
195 ordered
196 % if ($num_ordered ) { 
197 </A>
198 % } 
199
200               <TD>
201             </TR>
202
203             <TR>
204               <TH ALIGN="right" WIDTH="40%">
205                 <FONT COLOR="#00CC00">
206                   <% my $num_active = $agent->num_active_cust_main %>&nbsp;
207                 </FONT>
208               </TH>
209
210               <TD>
211 % if ( $num_active ) { 
212
213                   <A HREF="<% $cust_main_link %>&active=1">
214 % } 
215 active
216 % if ( $num_active ) { 
217 </A>
218 % } 
219
220               </TD>
221             </TR>
222
223             <TR>
224               <TH ALIGN="right" WIDTH="40%">
225                 <FONT COLOR="#FF9900">
226                   <% my $num_susp = $agent->num_susp_cust_main %>&nbsp;
227                 </FONT>
228               </TH>
229
230               <TD>
231 % if ( $num_susp ) { 
232
233                   <A HREF="<% $cust_main_link %>&suspended=1">
234 % } 
235 suspended
236 % if ( $num_susp ) { 
237 </A>
238 % } 
239
240               </TD>
241             </TR>
242
243             <TR>
244               <TH ALIGN="right" WIDTH="40%">
245                 <FONT COLOR="#FF0000">
246                   <% my $num_cancel = $agent->num_cancel_cust_main %>&nbsp;
247                 </FONT>
248               </TH>
249
250               <TD>
251 % if ( $num_cancel ) { 
252
253                   <A HREF="<% $cust_main_link %>&showcancelledcustomers=1&cancelled=1">
254 % } 
255 cancelled
256 % if ( $num_cancel ) { 
257 </A>
258 % } 
259
260               </TD>
261             </TR>
262
263           </TABLE>
264         </TD>
265
266         <TD CLASS="inv" BGCOLOR="<% $bgcolor %>" VALIGN="bottom">
267           <TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0>
268
269             <TR>
270               <TH ALIGN="right" WIDTH="40%">
271                 <FONT COLOR="#0000CC">
272                   <% my $num_inactive_pkg = $agent->num_inactive_cust_pkg %>&nbsp;
273                 </FONT>
274               </TH>
275
276               <TD>
277 % if ( $num_inactive_pkg ) { 
278
279                   <A HREF="<% $cust_pkg_link %>&magic=inactive">
280 % } 
281 inactive
282 % if ( $num_inactive_pkg ) { 
283 </A>
284 % } 
285
286               </TD>
287             </TR>
288
289             <!--ordered-->
290             <TR>
291               <TD>&nbsp;</TD>
292             </TR>
293
294             <TR>
295               <TH ALIGN="right" WIDTH="40%">
296                 <FONT COLOR="#00CC00">
297                   <% my $num_active_pkg = $agent->num_active_cust_pkg %>&nbsp;
298                 </FONT>
299               </TH>
300
301               <TD>
302 % if ( $num_active_pkg ) { 
303
304                   <A HREF="<% $cust_pkg_link %>&magic=active">
305 % } 
306 active
307 % if ( $num_active_pkg ) { 
308 </A>
309 % } 
310
311               </TD>
312             </TR>
313
314             <TR>
315               <TH ALIGN="right" WIDTH="40%">
316                 <FONT COLOR="#FF9900">
317                   <% my $num_susp_pkg = $agent->num_susp_cust_pkg %>&nbsp;
318                 </FONT>
319
320               </TH>
321               <TD>
322 % if ( $num_susp_pkg ) { 
323
324                   <A HREF="<% $cust_pkg_link %>&magic=suspended">
325 % } 
326 suspended
327 % if ( $num_susp_pkg ) { 
328 </A>
329 % } 
330
331               </TD>
332             </TR>
333             
334             <TR>
335               <TH ALIGN="right" WIDTH="40%">
336                 <FONT COLOR="#FF0000">
337                   <% my $num_cancel_pkg = $agent->num_cancel_cust_pkg %>&nbsp;
338                 </FONT>
339               </TH>
340
341               <TD>
342 % if ( $num_cancel_pkg ) { 
343
344                   <A HREF="<% $cust_pkg_link %>&magic=cancelled">
345 % } 
346 cancelled
347 % if ( $num_cancel_pkg ) { 
348 </A>
349 % } 
350
351               </TD>
352             </TR>
353
354           </TABLE>
355         </TD>
356
357         <TD CLASS="grid" BGCOLOR="<% $bgcolor %>">
358           <A HREF="<% $p %>graph/report_cust_pkg.html?agentnum=<% $agent->agentnum %>">Package&nbsp;Churn</A>
359           <BR><A HREF="<% $p %>search/report_cust_pay.html?agentnum=<% $agent->agentnum %>">Payments</A>
360           <BR><A HREF="<% $p %>search/report_cust_credit.html?agentnum=<% $agent->agentnum %>">Credits</A>
361           <BR><A HREF="<% $p %>search/report_receivables.cgi?agentnum=<% $agent->agentnum %>">A/R&nbsp;Aging</A>
362           <!--<BR><A HREF="<% $p %>search/money_time.cgi?agentnum=<% $agent->agentnum %>">Sales/Credits/Receipts</A>-->
363
364         </TD>
365
366         <TD CLASS="grid" BGCOLOR="<% $bgcolor %>">
367           <% my $num_reg_code = $agent->num_reg_code %>
368 % if ( $num_reg_code ) { 
369
370             <A HREF="<%$p%>search/reg_code.html?agentnum=<% $agent->agentnum %>">
371 % } 
372 Unused
373 % if ( $num_reg_code ) { 
374 </A>
375 % } 
376
377           <BR><A HREF="<%$p%>edit/reg_code.cgi?agentnum=<% $agent->agentnum %>">Generate codes</A>
378         </TD>
379
380         <TD CLASS="grid" BGCOLOR="<% $bgcolor %>">
381           <% my $num_prepay_credit = $agent->num_prepay_credit %>
382 % if ( $num_prepay_credit ) { 
383
384             <A HREF="<%$p%>search/prepay_credit.html?agentnum=<% $agent->agentnum %>">
385 % } 
386 Unused
387 % if ( $num_prepay_credit ) { 
388 </A>
389 % } 
390
391           <BR><A HREF="<%$p%>edit/prepay_credit.cgi?agentnum=<% $agent->agentnum %>">Generate cards</A>
392         </TD>
393
394 % if ( $conf->config('ticket_system') ) { 
395           <TD CLASS="grid" BGCOLOR="<% $bgcolor %>">
396 %         if ( $agent->ticketing_queueid ) { 
397               Queue: <% $agent->ticketing_queueid %>:
398                      <% $agent->ticketing_queue %>
399               <BR>
400 %         } 
401           </TD>
402 % } 
403
404 % if ( $conf->config('currencies') ) { 
405           <TD CLASS="grid" BGCOLOR="<% $bgcolor %>">
406             <% join('<BR>', sort keys %{ $agent->agent_currency_hashref } ) %>
407           </TD>
408 % } 
409
410         <TD CLASS="inv" BGCOLOR="<% $bgcolor %>">
411           <TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0>
412 % foreach my $override (
413 %                 # sort { }  want taxclass-full stuff first?  and default cards (empty cardtype)
414 %                 qsearch('agent_payment_gateway', { 'agentnum' => $agent->agentnum } )
415 %               ) {
416 %            
417
418               <TR>
419                 <TD> 
420                   <% $override->cardtype || 'Default' %> to <% $override->payment_gateway->gateway_module %> (<% $override->payment_gateway->gateway_username %>)
421                   <% $override->taxclass
422                         ? ' for '. $override->taxclass. ' only'
423                         : ''
424                   %>
425                   <FONT SIZE=-1><A HREF="javascript:areyousure('delete this payment gateway override', '<%$p%>misc/delete-agent_payment_gateway.cgi?<% $override->agentgatewaynum %>')">(delete)</A></FONT>
426                 </TD>
427               </TR>
428 % } 
429
430             <TR>
431               <TD><FONT SIZE=-1><A HREF="<%$p%>edit/agent_payment_gateway.html?agentnum=<% $agent->agentnum %>">(add override)</A></FONT></TD>
432             </TR>
433           </TABLE>
434         </TD>
435
436         <TD CLASS="inv" BGCOLOR="<% $bgcolor %>">
437           <TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0>
438 % foreach my $override (
439 %                 qsearch('conf', { 'agentnum' => $agent->agentnum } )
440 %               ) {
441 %            
442
443               <TR>
444                 <TD> 
445                   <% $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>
446                 </TD>
447               </TR>
448 % } 
449
450             <TR>
451               <TD><FONT SIZE=-1><A HREF="<%$p%>config/config-view.cgi?agentnum=<% $agent->agentnum %>">(view/add/edit overrides)</A></FONT></TD>
452             </TR>
453           </TABLE>
454         </TD>
455
456       </TR>
457 % } 
458
459
460     </TABLE>
461
462 <SCRIPT TYPE="text/javascript">
463   function areyousure(what, href) {
464     if ( confirm("Are you sure you want to " + what + "?") == true )
465       window.location.href = href;
466   }
467 </SCRIPT>
468
469   </BODY>
470 </HTML>
471 <%init>
472
473 die "access denied"
474   unless $FS::CurrentUser::CurrentUser->access_right('Configuration');
475
476 my %search;
477 if ( $cgi->param('showdisabled')
478      || !dbdef->table('agent')->column('disabled') ) {
479   %search = ();
480 } else {
481   %search = ( 'disabled' => '' );
482 }
483
484 my $conf = new FS::Conf;
485
486 </%init>