1 <% include( 'elements/edit.html',
2 'name' => 'Cable device',
3 'table' => 'cable_device',
5 'devicenum' => 'Device',
6 'devicepart' => 'Device type',
7 'mac_addr' => 'MAC address',
8 'serial' => 'Serial number',
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 => '' },
18 { field => 'mac_addr',
22 type => 'text', #select-serial
24 { 'field' => 'svcnum',
28 'menubar' => [], #disable viewall
29 #'viewall_dir' => 'browse',
30 'new_callback' => sub {
31 my( $cgi, $object ) = @_;
32 $object->svcnum( $cgi->param('svcnum') );
34 'html_foot' => $html_foot,
39 #bad: pretty much entirely false laziness w/phone_device, except for labels and
42 my @deviceparts_with_inventory =
44 qsearch({ 'table' => 'part_device',
45 'extra_sql' => 'WHERE inventory_classnum IS NOT NULL',
50 <SCRIPT TYPE=\"text/javascript\">
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;
58 function devicepart_changed(what){
60 var macsel = document.getElementById('sel_mac_addr');
61 var mac = document.getElementById('mac_addr');
63 function update_macs(macs) {
64 for ( var i = macsel.length; i >= 0; i-- )
65 macsel.options[i] = null;
67 var macArray = eval('(' + macs + ')' );
68 if(macArray.length == 0)
69 opt(macsel,'','No MAC addresses found in inventory for this device type');
71 opt(macsel,'','Select MAC address');
73 for ( var i = 0; i < macArray.length; i++ ) {
74 opt(macsel,macArray[i],macArray[i]);
79 var devicepart = what.options[what.selectedIndex].value;
81 var deviceparts_with_inventory = new Array(";
82 $js .= join(',', map qq("$_"), @deviceparts_with_inventory);
85 var hasInventory = false;
86 for ( i = 0; i < deviceparts_with_inventory.length; i++ ) {
87 if ( deviceparts_with_inventory[i] == devicepart )
92 if(hasInventory) { // do the AJAX thing, disable text field
93 macsel.style.display = 'inline';
94 mac.style.display = 'none';
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;
105 devicepart_changed(document.getElementById('devicepart'));
111 # :/ needs agent-virt so you can't futz with arbitrary devices
114 unless $FS::CurrentUser::CurrentUser->access_right('Provision customer service'); #something else more specific?