fix FK upgrade for pkg_referral: remove records referencing non-existant customer...
[freeside.git] / httemplate / browse / did_order.html
index 54c2bd3..f328c1f 100644 (file)
 <% include( 'elements/browse.html',
                  'title'       => 'Bulk DID Orders',
-                 'html_init'   => $html_init,
+                 'html_init'   =>  $html_init,
                  'name'        => 'bulk DID orders',
                  'disableable' => 0,
-                 'query'       => { 'table'     => 'did_order',
-                                   'addl_from' => 'left join did_vendor using (vendornum) 
-                                                   left join lata using (latanum)',
-                                    'hashref'   => {},
-                                    'order_by' => 'ORDER BY ordernum',
-                                  },
-                 'count_query' => $count_query,
-                 'header'      => $header,
-                 'fields'      => $fields,
-                 'links'       => $links,
+                 'query'       => $query,
+                 'count_query' => 'SELECT COUNT(*) FROM did_order', # XXX: this is wrong!
+                 'header'      => [ '#', 'Vendor',' Vendor Order #', 
+                                    'Submitted', 'Confirmed', 'Customer',
+                                    'Received', 'Provision', 'Cancel', 'Merge Into',
+                                  ],
+                 'fields'      => [ sub {
+                                        my $did_order = shift;
+                                        $did_order->ordernum;
+                                    }, 
+                                    'vendorname', 
+                                    'vendor_order_id', 
+                                    sub { &$display_date(shift->submitted); },
+                                    sub { # Confirmed
+                                        my $did_order = shift;
+                                        my $ordernum = $did_order->ordernum;
+                                        return &$display_date($did_order->confirmed) 
+                                            if $did_order->confirmed;
+                                        include( '/elements/popup_link.html',
+                                          { 'action'      => "${p}misc/did_order_confirm.html?ordernum=$ordernum",
+                                            'label'       => 'Confirm',
+                                            'actionlabel' => 'Confirm Bulk DID Order',
+                                            'width'       => 480,
+                                            'height'      => 300,
+                                          }
+                                        )
+                                    }, 
+                                    sub { # Customer
+                                        my $did_order = shift;
+                                        my @cust_main = $did_order->cust_main;
+                                        my $has_stock = $did_order->has_stock;
+                                        if (scalar(@cust_main) == 1 && !$has_stock) {
+                                            my $cust_main = $cust_main[0];
+                                            return "<A HREF='${p}view/cust_main.cgi?".$cust_main->custnum."'>".$cust_main->name."</A>"
+                                        }
+                                        elsif(scalar(@cust_main) == 0 && $has_stock) {
+                                            return 'Stock';
+                                        }
+                                        elsif(scalar(@cust_main) > 0 && !$has_stock) {
+                                            return 'Multiple';
+                                        }
+                                        'Multiple/Stock';
+                                    },
+                                    sub { # Received
+                                        my $did_order = shift;
+                                        my $ordernum = $did_order->ordernum;
+                                        return "<A HREF='${p}misc/phone_avail-import.html?ordernum=$ordernum'>Upload Received</A>"
+                                            unless $did_order->received;
+                                        "<A HREF='${p}search/phone_avail.html?ordernum=$ordernum'>"
+                                                . &$display_date($did_order->received) . "</A>";
+                                    },
+                                    sub { # Provision
+                                        my $did_order = shift;
+                                        my $ordernum = $did_order->ordernum;
+                                        my @provisioned = $did_order->provisioned;
+                                        return '' 
+                                            unless $did_order->received 
+                                                        && scalar($did_order->cust_main)
+                                                        && !scalar(@provisioned);
+                                        include( '/elements/popup_link.html',
+                                          { 'action'      => "${p}misc/did_order_provision.html?ordernum=".$did_order->ordernum,
+                                            'label'       => 'Provision DIDs',
+                                            'actionlabel' => 'Bulk DID order - DID provisioning',
+                                            'width'       => 520,
+                                            'height'      => 300,
+                                          }
+                                        )
+                                    },
+                                    sub { # Cancel
+                                        my $did_order = shift;
+                                        return '' unless !$did_order->received;
+                                        qq!<A HREF="javascript:areyousure('${p}misc/did_order_confirmed.html?action=cancel;ordernum=!
+                                        . $did_order->ordernum . qq!', 'Cancel this order (#!
+                                        . $did_order->ordernum . qq!)?')">Cancel</A>!
+                                    },
+                                    sub { # Merge
+                                        my $did_order = shift;
+                                        return '' unless !$did_order->received;
+                                        &$merge_select($did_order->ordernum);
+                                    },
+                                  ],
+                 'links'       => [
+                                    [ $p.'edit/did_order.html?', 'ordernum' ],
+                                                 ],
+                 'html_foot' => '
+                            <script type="text/javascript">
+                                function areyousure(href,msg) {
+                                    if (confirm(msg))
+                                        window.location.href = href;
+                                }
+
+                                function mergeconfirm(select,source_ordernum) {
+                                    var target_ordernum = select.options[select.selectedIndex].value;
+                                    areyousure("'.$p.'misc/did_order_confirmed.html?action=merge;ordernum="+source_ordernum+";target_ordernum="+target_ordernum,
+                                                "Merge order #" + source_ordernum + " into order #" + target_ordernum + "?");
+                                }
+                            </script>
+                                ',
              )
 %>
 <%init>
@@ -23,12 +111,55 @@ die "access denied"
 my $conf = new FS::Conf;
 my $date_format = $conf->config('date_format') || '%m/%d/%Y';
 
-my $html_init = 
-  qq!<A HREF="${p}edit/did_order.html"><I>Add a bulk DID order</I></A><BR><BR>!;
+my $html_init = qq!<A HREF="${p}edit/did_order.html">Add a bulk DID order</A>
+                    <BR><BR>!;
+my $query = { 
+    'table'      => 'did_order',
+    'hashref'    => {},
+    'addl_from' => 'left join did_vendor using (vendornum) ',
+    'order_by' => 'ORDER BY ordernum',
+            };
+if ( $cgi->param('custnum') =~ /^(\d+)$/ ) {
+    $query->{'extra_sql'} .= " where (custnum = $1 or $1 in (select distinct "
+                            . " custnum from did_order_item where "
+                            . " did_order_item.ordernum = did_order.ordernum ) )";
+}
+if ( $cgi->param('custrcvdunprov') ) {
+    $query->{'hashref'}->{'received'} = { 'op' => '>', 'value' => '0', };
+    $query->{'hashref'}->{'svcnum'} = '';
+    $query->{'addl_from'} .= ' left join phone_avail using (ordernum) ';
+    $query->{'extra_sql'} .= " and (custnum > 0 or 0 < (select count(1) from "
+                      . " did_order_item where did_order_item.custnum > 0 and "
+                      . " did_order_item.ordernum = did_order.ordernum) )";
+    $html_init .= qq!<A HREF="${p}browse/did_order.html">Browse all DID orders</A>!;
+}
+else {
+    $html_init .= qq!<A HREF="${p}browse/did_order.html?custrcvdunprov=1">
+                    Browse all non-stock orders with received unprovisioned DIDs
+                    </A>!;
+}
+$html_init .= "<BR><BR>";
 
-my $count_query = 'SELECT COUNT(*) FROM did_order';
+my @merge_targets = qsearch({
+                                'table'     => 'did_order',
+                                'hashref'   => { 'received' => '' },
+                                'order_by'  => 'ORDER BY ordernum',
+                            });
 
-my $link = [ $p.'edit/did_order.html?', 'ordernum' ];
+my $merge_select = sub {
+    my $source_ordernum = shift;
+    my $merge_select = '';
+    my @targets = grep { $_->ordernum != $source_ordernum } @merge_targets;
+    if ( @targets ) {
+        $merge_select = "<SELECT onchange='mergeconfirm(this,$source_ordernum)'><OPTION></OPTION>";
+        foreach my $order ( @targets ) {
+            next if $order->ordernum == $source_ordernum;
+            $merge_select .= "<OPTION>".$order->ordernum."</OPTION>";
+        }
+        $merge_select .= "</SELECT>";
+    }
+    $merge_select;
+};
 
 my $display_date = sub {
     my $date = shift;
@@ -36,30 +167,4 @@ my $display_date = sub {
     time2str($date_format, $date);
 };
 
-my $header = [ '#', 'Vendor',' Vendor Order #', 'MSA', 'LATA #', 'LATA', 
-               'Rate Center', 'State', 'Quantity', 'Submitted', 'Confirmed',
-               'Received', 
-           ];
-my $links  = [ ];
-my $fields = [  sub {
-                   my $did_order = shift;
-                   if($did_order->received) {
-                       push @$links, $link;
-                   }
-                   else {
-                       return $did_order->ordernum;
-                   }
-               }, 'vendorname', 'vendor_order_id', 'msa', 'latanum',
-               'description', 'rate_center', 'state', 'quantity', 
-               sub { &$display_date(shift->submitted); }, 
-               sub { &$display_date(shift->confirmed); }, 
-               sub { 
-                   my $did_order = shift;
-                   my $ordernum = $did_order->ordernum;
-                   return &$display_date($did_order->received) 
-                       if $did_order->received;
-                   "<A HREF='${p}misc/phone_avail-import.html?ordernum=$ordernum'>Upload Received</A>";
-               }, 
-            ];
-
 </%init>