optimize CDR rating after timed rate perf regression, RT#15739
[freeside.git] / httemplate / browse / did_order.html
1 <% include( 'elements/browse.html',
2                  'title'       => 'Bulk DID Orders',
3                  'html_init'   =>  $html_init,
4                  'name'        => 'bulk DID orders',
5                  'disableable' => 0,
6                  'query'       => $query,
7                  'count_query' => 'SELECT COUNT(*) FROM did_order', # XXX: this is wrong!
8                  'header'      => [ '#', 'Vendor',' Vendor Order #', 
9                                     'Submitted', 'Confirmed', 'Customer',
10                                     'Received', 'Provision', 'Cancel', 'Merge Into',
11                                   ],
12                  'fields'      => [ sub {
13                                         my $did_order = shift;
14                                         $did_order->ordernum;
15                                     }, 
16                                     'vendorname', 
17                                     'vendor_order_id', 
18                                     sub { &$display_date(shift->submitted); },
19                                     sub { # Confirmed
20                                         my $did_order = shift;
21                                         my $ordernum = $did_order->ordernum;
22                                         return &$display_date($did_order->confirmed) 
23                                             if $did_order->confirmed;
24                                         include( '/elements/popup_link.html',
25                                           { 'action'      => "${p}misc/did_order_confirm.html?ordernum=$ordernum",
26                                             'label'       => 'Confirm',
27                                             'actionlabel' => 'Confirm Bulk DID Order',
28                                             'width'       => 480,
29                                             'height'      => 300,
30                                           }
31                                         )
32                                     }, 
33                                     sub { # Customer
34                                         my $did_order = shift;
35                                         my @cust_main = $did_order->cust_main;
36                                         my $has_stock = $did_order->has_stock;
37                                         if (scalar(@cust_main) == 1 && !$has_stock) {
38                                             my $cust_main = $cust_main[0];
39                                             return "<A HREF='${p}view/cust_main.cgi?".$cust_main->custnum."'>".$cust_main->name."</A>"
40                                         }
41                                         elsif(scalar(@cust_main) == 0 && $has_stock) {
42                                             return 'Stock';
43                                         }
44                                         elsif(scalar(@cust_main) > 0 && !$has_stock) {
45                                             return 'Multiple';
46                                         }
47                                         'Multiple/Stock';
48                                     },
49                                     sub { # Received
50                                         my $did_order = shift;
51                                         my $ordernum = $did_order->ordernum;
52                                         return "<A HREF='${p}misc/phone_avail-import.html?ordernum=$ordernum'>Upload Received</A>"
53                                             unless $did_order->received;
54                                         "<A HREF='${p}search/phone_avail.html?ordernum=$ordernum'>"
55                                                 . &$display_date($did_order->received) . "</A>";
56                                     },
57                                     sub { # Provision
58                                         my $did_order = shift;
59                                         my $ordernum = $did_order->ordernum;
60                                         my @provisioned = $did_order->provisioned;
61                                         return '' 
62                                             unless $did_order->received 
63                                                         && scalar($did_order->cust_main)
64                                                         && !scalar(@provisioned);
65                                         include( '/elements/popup_link.html',
66                                           { 'action'      => "${p}misc/did_order_provision.html?ordernum=".$did_order->ordernum,
67                                             'label'       => 'Provision DIDs',
68                                             'actionlabel' => 'Bulk DID order - DID provisioning',
69                                             'width'       => 520,
70                                             'height'      => 300,
71                                           }
72                                         )
73                                     },
74                                     sub { # Cancel
75                                         my $did_order = shift;
76                                         return '' unless !$did_order->received;
77                                         qq!<A HREF="javascript:areyousure('${p}misc/did_order_confirmed.html?action=cancel;ordernum=!
78                                         . $did_order->ordernum . qq!', 'Cancel this order (#!
79                                         . $did_order->ordernum . qq!)?')">Cancel</A>!
80                                     },
81                                     sub { # Merge
82                                         my $did_order = shift;
83                                         return '' unless !$did_order->received;
84                                         &$merge_select($did_order->ordernum);
85                                     },
86                                   ],
87                  'links'       => [
88                                     [ $p.'edit/did_order.html?', 'ordernum' ],
89                                                   ],
90                  'html_foot' => '
91                             <script type="text/javascript">
92                                 function areyousure(href,msg) {
93                                     if (confirm(msg))
94                                         window.location.href = href;
95                                 }
96
97                                 function mergeconfirm(select,source_ordernum) {
98                                     var target_ordernum = select.options[select.selectedIndex].value;
99                                     areyousure("'.$p.'misc/did_order_confirmed.html?action=merge;ordernum="+source_ordernum+";target_ordernum="+target_ordernum,
100                                                 "Merge order #" + source_ordernum + " into order #" + target_ordernum + "?");
101                                 }
102                             </script>
103                                 ',
104              )
105 %>
106 <%init>
107
108 die "access denied"
109   unless $FS::CurrentUser::CurrentUser->access_right('Import');
110
111 my $conf = new FS::Conf;
112 my $date_format = $conf->config('date_format') || '%m/%d/%Y';
113
114 my $html_init = qq!<A HREF="${p}edit/did_order.html">Add a bulk DID order</A>
115                     <BR><BR>!;
116 my $query = { 
117     'table'      => 'did_order',
118     'hashref'    => {},
119     'addl_from' => 'left join did_vendor using (vendornum) ',
120     'order_by' => 'ORDER BY ordernum',
121             };
122 if ( $cgi->param('custnum') =~ /^(\d+)$/ ) {
123     $query->{'extra_sql'} .= " where (custnum = $1 or $1 in (select distinct "
124                             . " custnum from did_order_item where "
125                             . " did_order_item.ordernum = did_order.ordernum ) )";
126 }
127 if ( $cgi->param('custrcvdunprov') ) {
128     $query->{'hashref'}->{'received'} = { 'op' => '>', 'value' => '0', };
129     $query->{'hashref'}->{'svcnum'} = '';
130     $query->{'addl_from'} .= ' left join phone_avail using (ordernum) ';
131     $query->{'extra_sql'} .= " and (custnum > 0 or 0 < (select count(1) from "
132                       . " did_order_item where did_order_item.custnum > 0 and "
133                       . " did_order_item.ordernum = did_order.ordernum) )";
134     $html_init .= qq!<A HREF="${p}browse/did_order.html">Browse all DID orders</A>!;
135 }
136 else {
137     $html_init .= qq!<A HREF="${p}browse/did_order.html?custrcvdunprov=1">
138                     Browse all non-stock orders with received unprovisioned DIDs
139                     </A>!;
140 }
141 $html_init .= "<BR><BR>";
142
143 my @merge_targets = qsearch({
144                                 'table'     => 'did_order',
145                                 'hashref'   => { 'received' => '' },
146                                 'order_by'  => 'ORDER BY ordernum',
147                             });
148
149 my $merge_select = sub {
150     my $source_ordernum = shift;
151     my $merge_select = '';
152     my @targets = grep { $_->ordernum != $source_ordernum } @merge_targets;
153     if ( @targets ) {
154         $merge_select = "<SELECT onchange='mergeconfirm(this,$source_ordernum)'><OPTION></OPTION>";
155         foreach my $order ( @targets ) {
156             next if $order->ordernum == $source_ordernum;
157             $merge_select .= "<OPTION>".$order->ordernum."</OPTION>";
158         }
159         $merge_select .= "</SELECT>";
160     }
161     $merge_select;
162 };
163
164 my $display_date = sub {
165     my $date = shift;
166     return '' unless $date;
167     time2str($date_format, $date);
168 };
169
170 </%init>