963bbf7a8c93ab257fc8d547e42bbd5e1c9f3b27
[freeside.git] / httemplate / edit / cable_device.html
1 <% include( 'elements/edit.html',
2                  'name'   => 'Cable device',
3                  'table'  => 'cable_device',
4                  'labels' => { 
5                                'devicenum'  => 'Device',
6                                'devicepart' => 'Device type',
7                                'mac_addr'   => 'MAC address',
8                                'serial'     => 'Serial number',
9                              },
10                  'fields' => [ { 'field'    => 'devicepart',
11                                  'type'     => 'select-table',
12                                  'table'    => 'part_device',
13                                  'name_col' => 'devicename',
14                                  'onchange' => 'devicepart_changed',
15                                  'empty_label' =>'Select device type',
16                                  #'hashref'        =>{ disabled => '' },
17                                },
18                                { field => 'mac_addr',
19                                  type => 'select-mac',
20                                },
21                                { field => 'serial',
22                                  type  => 'text', #select-serial
23                                },
24                                { 'field' => 'svcnum',
25                                  'type'  => 'hidden',
26                                },
27                              ],
28                  'menubar' => [], #disable viewall
29                  #'viewall_dir' => 'browse',
30                  'new_callback' => sub {
31                                      my( $cgi, $object ) = @_;
32                                      $object->svcnum( $cgi->param('svcnum') );
33                                    },
34                  'html_foot' => $html_foot,
35            )
36 %>
37 <%init>
38
39 #bad: pretty much entirely false laziness w/phone_device, except for labels and
40 # the serial field
41
42 my @deviceparts_with_inventory =
43   map $_->devicepart,
44     qsearch({ 'table'     => 'part_device',
45               'extra_sql' => 'WHERE inventory_classnum IS NOT NULL',
46            });
47
48 my $html_foot = sub {
49     my $js = "
50 <SCRIPT TYPE=\"text/javascript\">
51
52   function opt(what,value,text) {
53     var optionName = new Option(text, value, false, false);
54     var length = what.length;
55     what.options[length] = optionName;
56   }
57
58     function devicepart_changed(what){
59         
60         var macsel = document.getElementById('sel_mac_addr');
61         var mac = document.getElementById('mac_addr');
62         
63         function update_macs(macs) {
64             for ( var i = macsel.length; i >= 0; i-- )
65               macsel.options[i] = null;
66             
67             var macArray = eval('(' + macs + ')' );
68             if(macArray.length == 0) 
69                 opt(macsel,'','No MAC addresses found in inventory for this device type');
70             else
71                 opt(macsel,'','Select MAC address');
72
73             for ( var i = 0; i < macArray.length; i++ ) {
74                 opt(macsel,macArray[i],macArray[i]);
75             }
76
77         }
78
79         var devicepart = what.options[what.selectedIndex].value;
80
81         var deviceparts_with_inventory = new Array(";
82 $js .= join(',', map qq("$_"), @deviceparts_with_inventory);
83 $js .= ");
84
85         var hasInventory = false;
86         for ( i = 0; i < deviceparts_with_inventory.length; i++ ) {
87             if ( deviceparts_with_inventory[i] == devicepart ) 
88                 hasInventory = true;
89         }
90         
91
92         if(hasInventory) { // do the AJAX thing, disable text field
93             macsel.style.display = 'inline';
94             mac.style.display = 'none';
95             mac.value = '';
96             get_macs( devicepart, update_macs );
97         } else { // clear & display text field only, clear/hide select
98             mac.style.display = 'inline';
99             macsel.style.display = 'none';
100             macsel.selectedIndex = 0;
101         }
102
103     }
104
105     devicepart_changed(document.getElementById('devicepart'));
106 </SCRIPT>";
107
108   $js;
109 };
110
111 # :/  needs agent-virt so you can't futz with arbitrary devices
112
113 die "access denied"
114   unless $FS::CurrentUser::CurrentUser->access_right('Provision customer service'); #something else more specific?
115
116
117 </%init>