optimize history search (invoice rending time for svc_ records with tons of changes...
[freeside.git] / fs_selfservice / FS-SelfService / cgi / view_usage.html
1 <%= $url = "$selfurl?action=";
2     %by_pkg_label = (); # not used yet, but I'm sure it will be...
3     @svc_acct = ();
4     @svc_phone = ();
5     @svc_port = ();
6
7     foreach (@svcs) {
8       $by_pkg_label{ $_->{pkg_label} } ||= [];
9       push @{ $by_pkg_label{ $_->{pkg_label} } }, $_;
10       if ( $_->{svcdb} eq 'svc_acct' ) {
11         push @svc_acct, $_;
12       } elsif ( $_->{svcdb} eq 'svc_phone' ) {
13         push @svc_phone, $_;
14       } elsif ( $_->{svcdb} eq 'svc_port' ) {
15         push @svc_port, $_;
16       }
17     }
18     '';
19 %>
20 <%= include('header', 'Account usage') %>
21 <%= if( $hide_usage ){ $OUT .= '<' . '!--' } %>
22
23
24 <%= if ( $error ) {
25   $OUT .= qq!<FONT SIZE="+1" COLOR="#ff0000">$error</FONT><BR><BR>!;
26 } ''; %>
27
28 <%= if ( @svc_acct ) {
29       $OUT.= '<TABLE BGCOLOR="#cccccc">
30                 <TR>
31                   <TH ALIGN="left">Account</TH>
32                   <TH ALIGN="right">Time remaining</TH>
33                   <TH ALIGN="right">Upload remaining</TH>
34                   <TH ALIGN="right">Download remaining</TH>
35                   <TH ALIGN="right">Total remaining</TH>
36                 </TR>';
37     } else {
38       $OUT .= '';
39     }
40 %>
41
42 <%= foreach my $svc ( @svc_acct ) {
43       my $link = "${url}view_usage_details;".
44         "svcnum=$svc->{'svcnum'};beginning=0;ending=0";
45     my $username = $svc->{'value'};
46     $username =~ s/@.*?$//g if $view_usage_nodomain;
47   $OUT .= '<TR><TD>';
48     $OUT .= qq!<A HREF="$link">!. $svc->{'label'}. ': '. $username .'</A>';
49     $OUT .= '</TD><TD ALIGN="right">';
50     $OUT .= $svc->{'seconds'};
51     $OUT .= '</TD><TD ALIGN="right">';
52     $OUT .=  $svc->{'upbytes'};
53     $OUT .= '</TD><TD ALIGN="right">';
54     $OUT .= $svc->{'downbytes'};
55     $OUT .= '</TD><TD ALIGN="right">';
56     $OUT .= $svc->{'totalbytes'};
57   $OUT .= '</TD></TR>';
58     if ( $svc->{'recharge_amount'} ) {
59       my $link = "${url}process_order_recharge;".
60                  "svcnum=$svc->{'svcnum'}";
61     $OUT .= '<TR><TD ALIGN="right">';
62       $OUT .= qq!<A HREF="$link">!.'Recharge for $';
63       $OUT .= $svc->{'recharge_amount'} . '</A> with';
64       $OUT .= '</TD><TD ALIGN="right">';
65       $OUT .= $svc->{'recharge_seconds'} if $svc->{'recharge_seconds'};
66       $OUT .= '</TD><TD ALIGN="right">';
67       $OUT .=  $svc->{'recharge_upbytes'} if $svc->{'recharge_upbytes'};
68       $OUT .= '</TD><TD ALIGN="right">';
69       $OUT .= $svc->{'recharge_downbytes'} if $svc->{'recharge_downbytes'};
70       $OUT .= '</TD><TD ALIGN="right">';
71       $OUT .= $svc->{'recharge_totalbytes'} if $svc->{'recharge_totalbytes'};
72     $OUT .= '</TD></TR>';
73     }
74   }
75 %>
76
77 <%= scalar(@svc_acct) ? '</TABLE><BR><BR>' : '' %>
78
79 <%= if ( @svc_phone ) {
80       %any = ();
81       for my $dir (qw(outbound inbound)) {
82         $any{$dir} = grep { $_->{$dir} } @svc_phone;
83       }
84       $OUT.= '<FONT SIZE="4">Call usage</FONT><BR><BR>
85               <TABLE BGCOLOR="#cccccc" STYLE="display:inline-block">
86                 <TR>
87                   <TH ALIGN="left">Number</TH>';
88       if ( $any{outbound} ) {
89         $OUT .= '
90                   <TH>Dialed</TH>';
91       }
92       if ( $any{inbound} ) {
93         $OUT .= '
94                   <TH>Received</TH>';
95       }
96       $OUT .= '</TR>';
97     } else {
98       $OUT .= '';
99     }
100 %>
101
102 <%= foreach my $svc_phone ( @svc_phone ) {
103       my $link = "${url}view_cdr_details;".
104         "svcnum=$svc_phone->{'svcnum'};beginning=0;ending=0";
105   $OUT .= '<TR><TD>'. $svc_phone->{'label'}. ': '. $svc_phone->{'value'};
106   $OUT .= '</TD>';
107   # usage summary w/ links
108   for my $dir (qw(outbound inbound)) {
109     if ( $dir eq 'inbound' ) {
110       $link .= ';inbound=1';
111     }
112     if ( $svc_phone->{$dir} ) {
113       $OUT .= '<TD ALIGN="right">'.qq!<A HREF="$link">! .
114         sprintf('%d calls (%.0f minutes)',
115           $svc_phone->{$dir}->{'count'},
116           $svc_phone->{$dir}->{'duration'} / 60
117         ) .
118         '</A></TD>';
119     } elsif ( $any{$dir} )  {
120       $OUT .= '<TD></TD>';
121     }
122   }
123   $OUT .= '</TR>';
124 }
125 '';
126 %>
127
128 <%= if ( @usage_pools ) {
129   $OUT .= '</TABLE>
130   <TABLE BGCOLOR="#cccccc" STYLE="display: inline-block">
131     <TR><TH COLSPAN=4>Remaining minutes</TH></TR>
132     ';
133   my $any_shared = 0;
134   foreach my $usage (@usage_pools) {
135     # false laziness with the back office side
136     my ($description, $remain, $total, $shared) = @$usage;
137     if ( $shared ) {
138       $any_shared = 1;
139       $description .= '*';
140     }
141     my $ratio = 255 * ($remain/$total);
142     $ratio = 255 if $color > 255;
143     my $color = 
144       sprintf('STYLE="font-weight: bold; color: #%02x%02x00"',
145         255 - $ratio, $ratio);
146     $OUT .=
147     qq!<TR>
148       <TD ALIGN="right">$description</TD>
149       <TD $color ALIGN="right">$remain</TD>
150       <TD $color> / </TD>
151       <TD $color>$total</TD>
152     </TR>!;
153   }
154   if ( $any_shared ) {
155     $OUT .= '<TR STYLE="font-size: 80%; font-style: italic">'.
156             '<TD COLSPAN=4>* shared among all your phone plans</TD></TR>';
157   }
158 }
159 if ( scalar(@svc_phone) or scalar(@usage_pools) ) {
160   $OUT .= '</TABLE><BR><BR>';
161 }
162 '';
163 %>
164
165 <%= if ( @svc_port ) {
166       $OUT.= '<FONT SIZE="4">Bandwidth Graphs</FONT><BR><BR>
167                 <script type="text/javascript">
168                     function preset_range(start,end,prefix){
169                         document.getElementById(prefix+\'_start\').value = start;
170                         document.getElementById(prefix+\'_end\').value = end;
171                     }
172                   </script>
173               <TABLE BGCOLOR="#cccccc">
174                 <TR>
175                   <TH ALIGN="left">Service</TH>
176                   <TH ALIGN="right">
177                   </TH>
178                 </TR>';
179     } 
180     $OUT .= '';
181 %>
182
183 <%=
184
185 sub preset_range {
186     my($start,$end,$label,$date_format,$prefix) = (shift,shift,shift,shift,shift);
187     $start = Date::Format::time2str($date_format,$start);
188     $end = Date::Format::time2str($date_format,$end);
189     return '<A HREF="javascript:void(0);" onclick="preset_range(\''
190             .$start.'\',\''.$end.'\',\''.$prefix.'\')">'.$label.'</A>';
191 }
192
193 foreach my $svc_port ( @svc_port ) {
194   $svcnum = $svc_port->{'svcnum'}; 
195   $default_end = time;
196   $default_start = $default_end-86400;
197
198   $OUT .= '<TR><TD>'. $svc_port->{'label'}. ': '. $svc_port->{'value'}.'</TD>';
199   $OUT .= qq! <TD><FORM ACTION="$url" METHOD="GET">
200                 <INPUT TYPE="hidden" name="svcnum" value="$svcnum">
201                 <INPUT TYPE="hidden" name="action" value="view_port_graph"> !; 
202   $OUT .= preset_range($default_start,$default_end,'Last Day',$date_format,$svcnum)
203         .' | '.preset_range($default_end-86400*7,$default_end,'Last Week',$date_format,$svcnum)
204         .' | '.preset_range($default_end-86400*30,$default_end,'Last Month',$date_format,$svcnum)
205         .' | '.preset_range($default_end-86400*365,$default_end,'Last Year',$date_format,$svcnum);
206   
207   $OUT .= qq! <BR>
208             Start Date <INPUT TYPE="TEXT" id="${svcnum}_start" name="${svcnum}_start" SIZE="10" MAXLENGTH="10">
209             End Date <INPUT TYPE="TEXT" id="${svcnum}_end" name="${svcnum}_end" SIZE="10" MAXLENGTH="10">
210             <BR>
211             <INPUT TYPE="submit" value="Display"> !;
212
213   $OUT .= '</FORM></TD></TR>';
214 }
215 %>
216
217 <%= scalar(@svc_port) ? '</TABLE><BR><BR>' : '' %>
218
219
220 </TD></TR></TABLE>
221 <%= if( $hide_usage ){ $OUT .= '--'. '>' } %>
222 <%= include('footer') %>
223