751e8b69ba22f50d503e91ff746e40f7db8f092c
[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 Override</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 %       ##
70 %       # agentnum
71 %       ##
72         <TD CLASS="grid" BGCOLOR="<% $bgcolor %>">
73           <A HREF="<%$p%>edit/agent.cgi?<% $agent->agentnum %>"><% $agent->agentnum %></A>
74         </TD>
75
76 %       ##
77 %       # disabled
78 %       ##
79 %       if ( ! $cgi->param('showdisabled') ) { 
80           <TD CLASS="grid" BGCOLOR="<% $bgcolor %>" ALIGN="center">
81             <% $agent->disabled ? '<FONT COLOR="#FF0000"><B>DISABLED</B></FONT>'
82                                 : '<FONT COLOR="#00CC00"><B>Active</B></FONT>'
83             %>
84           </TD>
85 %       } 
86
87 %       ##
88 %       # agent
89 %       ##
90         <TD CLASS="grid" BGCOLOR="<% $bgcolor %>">
91           <A HREF="<%$p%>edit/agent.cgi?<% $agent->agentnum %>"><% $agent->agent %></A>
92         </TD>
93
94 %       ##
95 %       # type
96 %       ##
97         <TD CLASS="grid" BGCOLOR="<% $bgcolor %>">
98           <A HREF="<%$p%>edit/agent_type.cgi?<% $agent->typenum %>"><% $agent->agent_type->atype %></A>
99         </TD>
100
101 %       ##
102 %       # master customer
103 %       ##
104         <TD CLASS="inv" BGCOLOR="<% $bgcolor %>">
105 %         if ( $agent->agent_custnum ) {
106             <& /elements/small_custview.html,
107                  $agent->agent_custnum,
108                  scalar($conf->config('countrydefault')),
109                  1, #show balance
110                  $p.'view/cust_main.cgi',
111             &>
112 %         }
113         </TD>
114
115 %       ##
116 %       # commissions
117 %       ##
118
119         <TD CLASS="grid" BGCOLOR="<% $bgcolor %>">
120
121           <TABLE>
122
123 %           #surprising amount of false laziness w/ edit/process/agent.cgi
124 %           my @pkg_class = qsearch('pkg_class', { 'disabled'=>'' });
125 %           foreach my $pkg_class ( '', @pkg_class ) {
126 %             my %agent_pkg_class = ( 'agentnum' => $agent->agentnum,
127 %                                     'classnum' => $pkg_class ? $pkg_class->classnum : ''
128 %                                   );
129 %             my $agent_pkg_class =
130 %               qsearchs( 'agent_pkg_class', \%agent_pkg_class )
131 %               || new FS::agent_pkg_class   \%agent_pkg_class;
132 %             my $param = 'classnum'. $agent_pkg_class{classnum};
133
134               <TR>
135                 <TD><% $agent_pkg_class->commission_percent || 0 %>%</TD>
136                 <TD><% $pkg_class ? $pkg_class->classname : mt('(no package class)') |h %>
137                 </TD>
138               </TR>
139
140 %           }
141
142           </TABLE>
143
144         </TD>
145
146 %       ##
147 %       # access groups
148 %       ##
149         <TD CLASS="grid" BGCOLOR="<% $bgcolor %>">
150 %         foreach my $access_group (
151 %           map $_->access_group,
152 %               qsearch('access_groupagent', { 'agentnum' => $agent->agentnum })
153 %         ) {
154             <A HREF="<%$p%>edit/access_group.html?<% $access_group->groupnum %>"><% $access_group->groupname |h %><BR>
155 %         }
156         </TD>
157
158 %       ##
159 %       # invoice template
160 %       ##
161         <TD CLASS="grid" BGCOLOR="<% $bgcolor %>">
162           <% $agent->invoice_template || '(Default)' %>
163         </TD>
164
165 %       ##
166 %       # customers
167 %       ##
168
169         <TD CLASS="inv" BGCOLOR="<% $bgcolor %>" VALIGN="bottom">
170           <TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0>
171
172 %           my @cust_status =
173 %             qw( prospect inactive ordered active suspended cancelled );
174 %           my %method = ( 'suspended' => 'susp',
175 %                          'cancelled' => 'cancel'
176 %                        );
177 %           my %PL = ( 'prospect' => 'prospects', );
178 %           my %link = ( 'cancelled' => 'showcancelledcustomers=1&cancelled' );
179 %           my $statuscolor = FS::cust_main->statuscolors;
180 %
181 %           foreach my $status ( @cust_status ) {
182 %             my $meth = exists($method{$status}) ? $method{$status} : $status;
183 %             $meth = 'num_'. $meth. '_cust_main';
184 %             my $link = exists($link{$status}) ? $link{$status} : $status;
185
186               <TR>
187 %               my $num = 0;
188 %               unless ( $disable_counts ) {
189                   <TH ALIGN="right" WIDTH="40%">
190                     <FONT COLOR="#<% $statuscolor->{$status} %>">
191                       <% $num = $agent->$meth() %>&nbsp;
192                     </FONT>
193                   </TH>
194 %               }
195                 <TD>
196 % if ( $num || $disable_counts ) { 
197 %                 
198
199                   <A HREF="<% $cust_main_link. "&$link=1" %>">
200 % } 
201 <% exists($PL{$status}) ? $PL{$status} : $status %>
202 % if ($num || $disable_counts ) {
203 </A>
204 % } 
205
206               <TD>
207             </TR>
208
209 %           }
210
211           </TABLE>
212         </TD>
213
214 %       ##
215 %       # customer packages
216 %       ##
217
218         <TD CLASS="inv" BGCOLOR="<% $bgcolor %>" VALIGN="bottom">
219           <TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0>
220
221 %           #my @pkg_status = FS::cust_pkg->statuses;
222 %           my @pkg_status = ( 'on hold', 'one-time charge', 'not yet billed',
223 %                              qw( active suspended cancelled ) );
224 %           my %method = ( 'one-time charge' => 'inactive',
225 %                          'suspended'       => 'susp',
226 %                          'cancelled'       => 'cancel',
227 %                        );
228 %           my $statuscolor = FS::cust_pkg->statuscolors;
229 %
230 %           foreach my $status ( @pkg_status ) {
231 %             my $magic = exists($method{$status}) ? $method{$status} : $status;
232 %             $magic =~ s/ /_/g;
233 %             my $meth = 'num_'. $magic. '_cust_pkg';
234 %             ( my $label = $status ) =~ s/ /&nbsp;/g;
235
236               <TR>
237 %               my $num = 0;
238 %               unless ( $disable_counts ) {
239                   <TH ALIGN="right" WIDTH="40%">
240                     <FONT COLOR="#<% $statuscolor->{$status} %>">
241                       <% $num = $agent->$meth() %>&nbsp;
242                     </FONT>
243                   </TH>
244 %               }
245
246               <TD>
247 % if ( $num || $disable_counts ) { 
248
249                   <A HREF="<% $cust_pkg_link %>&magic=<% $magic %>">
250 % } 
251 <% $label %>
252 % if ( $num || $disable_counts ) { 
253 </A>
254 % } 
255
256               </TD>
257             </TR>
258
259 %           }
260
261           </TABLE>
262         </TD>
263
264 %       ##
265 %       # reports
266 %       ##
267         <TD CLASS="grid" BGCOLOR="<% $bgcolor %>">
268           <A HREF="<% $p %>graph/report_cust_pkg.html?agentnum=<% $agent->agentnum %>">Package&nbsp;Churn</A>
269           <BR><A HREF="<% $p %>search/report_cust_pay.html?agentnum=<% $agent->agentnum %>">Payments</A>
270           <BR><A HREF="<% $p %>search/report_cust_credit.html?agentnum=<% $agent->agentnum %>">Credits</A>
271           <BR><A HREF="<% $p %>search/report_receivables.cgi?agentnum=<% $agent->agentnum %>">A/R&nbsp;Aging</A>
272           <!--<BR><A HREF="<% $p %>search/money_time.cgi?agentnum=<% $agent->agentnum %>">Sales/Credits/Receipts</A>-->
273         </TD>
274
275 %       ##
276 %       # registration codes
277 %       ##
278
279         <TD CLASS="grid" BGCOLOR="<% $bgcolor %>">
280           <% my $num_reg_code = $agent->num_reg_code %>
281 % if ( $num_reg_code ) { 
282
283             <A HREF="<%$p%>search/reg_code.html?agentnum=<% $agent->agentnum %>">
284 % } 
285 Unused
286 % if ( $num_reg_code ) { 
287 </A>
288 % } 
289
290           <BR><A HREF="<%$p%>edit/reg_code.cgi?agentnum=<% $agent->agentnum %>">Generate codes</A>
291         </TD>
292
293 %       ##
294 %       # prepaid cards
295 %       ##
296
297         <TD CLASS="grid" BGCOLOR="<% $bgcolor %>">
298           <% my $num_prepay_credit = $agent->num_prepay_credit %>
299 % if ( $num_prepay_credit ) { 
300
301             <A HREF="<%$p%>search/prepay_credit.html?agentnum=<% $agent->agentnum %>">
302 % } 
303 Unused
304 % if ( $num_prepay_credit ) { 
305 </A>
306 % } 
307
308           <BR><A HREF="<%$p%>edit/prepay_credit.cgi?agentnum=<% $agent->agentnum %>">Generate cards</A>
309         </TD>
310
311 %       ##
312 %       # ticketing
313 %       ##
314 % if ( $conf->config('ticket_system') ) { 
315           <TD CLASS="grid" BGCOLOR="<% $bgcolor %>">
316 %         if ( $agent->ticketing_queueid ) { 
317               Queue: <% $agent->ticketing_queueid %>:
318                      <% $agent->ticketing_queue %>
319               <BR>
320 %         } 
321           </TD>
322 % } 
323
324 %       ##
325 %       # currencies
326 %       ##
327 % if ( $conf->config('currencies') ) { 
328           <TD CLASS="grid" BGCOLOR="<% $bgcolor %>">
329             <% join('<BR>', sort keys %{ $agent->agent_currency_hashref } ) %>
330           </TD>
331 % } 
332
333 %       ##
334 %       # payment gateway override
335 %       ##
336
337         <TD CLASS="inv" BGCOLOR="<% $bgcolor %>">
338           <TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0>
339 % my $gw_override = qsearchs('agent_payment_gateway', { 'agentnum' => $agent->agentnum } );
340 % if ($gw_override) {
341               <TR>
342                 <TD> 
343                   <% $gw_override->payment_gateway->gateway_module %> (<% $gw_override->payment_gateway->gateway_username %>)
344                   <FONT SIZE=-1><A HREF="javascript:areyousure('delete this payment gateway override', '<%$p%>misc/delete-agent_payment_gateway.cgi?<% $gw_override->agentgatewaynum %>')">(delete)</A></FONT>
345                 </TD>
346               </TR>
347 % } else {
348             <TR>
349               <TD><FONT SIZE=-1><A HREF="<%$p%>edit/agent_payment_gateway.html?agentnum=<% $agent->agentnum %>">(add override)</A></FONT></TD>
350             </TR>
351 % }
352           </TABLE>
353         </TD>
354
355 %       ##
356 %       # configuration overrides
357 %       ##
358
359         <TD CLASS="inv" BGCOLOR="<% $bgcolor %>">
360           <TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0>
361 % foreach my $override (
362 %                 qsearch('conf', { 'agentnum' => $agent->agentnum } )
363 %               ) {
364 %            
365
366               <TR>
367                 <TD> 
368                   <% $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>
369                 </TD>
370               </TR>
371 % } 
372
373             <TR>
374               <TD><FONT SIZE=-1><A HREF="<%$p%>config/config-view.cgi?agentnum=<% $agent->agentnum %>">(view/add/edit overrides)</A></FONT></TD>
375             </TR>
376           </TABLE>
377         </TD>
378
379       </TR>
380 % } 
381
382
383     </TABLE>
384
385 <SCRIPT TYPE="text/javascript">
386   function areyousure(what, href) {
387     if ( confirm("Are you sure you want to " + what + "?") == true )
388       window.location.href = href;
389   }
390 </SCRIPT>
391
392   </BODY>
393 </HTML>
394 <%init>
395
396 die "access denied"
397   unless $FS::CurrentUser::CurrentUser->access_right('Configuration');
398
399 my %search;
400 if ( $cgi->param('showdisabled')
401      || !dbdef->table('agent')->column('disabled') ) {
402   %search = ();
403 } else {
404   %search = ( 'disabled' => '' );
405 }
406
407 my $conf = new FS::Conf;
408 my $disable_counts = $conf->exists('agent-disable_counts');
409
410 </%init>