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