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