improve performance of DID provisioning status report, RT10988
[freeside.git] / httemplate / search / phone_inventory_provisioned.html
1 <% include( 'elements/search.html',
2               'title'         => 'LATA Search Results',
3               'name_singular' => 'LATA',
4               'query'         => {
5                                    'table'   => 'phone_avail',
6                                    'hashref' => {},
7                                    'select'  => 'distinct latanum',
8                                  },
9               'count_query'   => 'SELECT COUNT(distinct latanum) FROM phone_avail',
10               'header'        => [ 'LATA',
11                                    'Available',
12                                    'Provisioned',
13                                    'Have Usage',
14                                  ],
15               'fields'        => [
16         sub { # LATA
17             my $did_order = shift;
18             my $lata = $did_order->lata;
19             $lata = $lata ? $lata->description : '';
20             $did_order->latanum . " - " . $lata;
21         },
22                 sub { # Available
23                     my $latanum = shift->latanum;
24                     my @dids = qsearch('phone_avail',
25                                     { 'svcnum' => '',
26                                       'latanum' => $latanum,
27                                     }
28                           );
29                     return scalar(@dids);
30                 },
31                 sub { # Provisioned
32                     my $latanum = shift->latanum;
33                     my @dids = provisioned_dids($latanum);
34                     return scalar(@dids);
35                 },
36                 sub { # Have Usage
37             my $did_order = shift;
38                     my @dids = provisioned_dids($did_order->latanum);
39
40                     my $count = 0;
41                     foreach my $did ( @dids ) {
42                 my $cust_svc = $did->cust_svc;
43                 next unless $cust_svc;
44
45                 my $svcnum = $cust_svc->svcnum;
46                 my $sql = "select count(1) from cdr where src = 
47                     (select phonenum from svc_phone where svcnum = $svcnum)
48                     or charged_party = (select phonenum from svc_phone where
49                         svcnum = $svcnum)";
50                 my $c = $did_order->scalar_sql($sql);
51                 $count++ if $c > 0;
52                     }
53                     $count;
54                 },
55               ],
56               'align'         => 'lccc',
57               'links'         => [
58                 '',
59                 '',
60                 '',
61                 '',
62               ],
63               'color' => [ 
64                            '',
65                            '',
66                            '',
67                            '',
68                          ],
69               'style' => [ 
70                            '',
71                            '',
72                            '',
73                            '',
74                          ],
75       )
76 %>
77 <%init>
78
79 warn "started @ ".time;
80
81 die "access denied"
82   unless ( $FS::CurrentUser::CurrentUser->access_right('List inventory')
83          && $FS::CurrentUser::CurrentUser->access_right('List services')
84          );
85
86 # XXX: agent virtualize
87
88 sub provisioned_dids {
89     my $latanum = shift;
90     qsearch({   'table' => 'phone_avail',
91                     'hashref' => { 'latanum' => $latanum, },
92                     'extra_sql' => ' and svcnum is not null ',
93                 });
94 }
95
96 </%init>