summaryrefslogtreecommitdiff
path: root/httemplate
diff options
context:
space:
mode:
authorIvan Kohler <ivan@freeside.biz>2014-01-24 00:39:40 -0800
committerIvan Kohler <ivan@freeside.biz>2014-01-24 00:39:40 -0800
commitf3ac48703be75c0e2aec161487057eafeb8fc74f (patch)
treefd3bc7402cf055bbdccd86927532283cde51b562 /httemplate
parent960c55002469c33ea9b0a949ad473a705e1b6cf9 (diff)
svc_pbx devices, for RT#24968
Diffstat (limited to 'httemplate')
-rw-r--r--httemplate/edit/elements/device_Common.html110
-rw-r--r--httemplate/edit/pbx_device.html4
-rw-r--r--httemplate/edit/process/elements/device_Common.html27
-rw-r--r--httemplate/edit/process/pbx_device.html3
-rwxr-xr-xhttemplate/misc/delete-pbx_device.html23
-rw-r--r--httemplate/view/elements/svc_devices.html8
6 files changed, 171 insertions, 4 deletions
diff --git a/httemplate/edit/elements/device_Common.html b/httemplate/edit/elements/device_Common.html
new file mode 100644
index 000000000..ab8135784
--- /dev/null
+++ b/httemplate/edit/elements/device_Common.html
@@ -0,0 +1,110 @@
+<& edit.html,
+ 'labels' => {
+ 'devicenum' => 'Device',
+ 'devicepart' => 'Device type',
+ 'mac_addr' => 'MAC address',
+ },
+ 'fields' => [ { 'field' => 'devicepart',
+ 'type' => 'select-table',
+ 'table' => 'part_device',
+ 'name_col' => 'devicename',
+ 'onchange' => 'devicepart_changed',
+ 'empty_label' =>'Select device type',
+ #'hashref' =>{ disabled => '' },
+ },
+ { field => 'mac_addr',
+ type => 'select-mac',
+ },
+ { 'field' => 'svcnum',
+ 'type' => 'hidden',
+ },
+ ],
+ 'menubar' => [], #disable viewall
+ #'viewall_dir' => 'browse',
+ 'new_callback' => sub {
+ my( $cgi, $object ) = @_;
+ $object->svcnum( $cgi->param('svcnum') );
+ },
+ 'html_foot' => $html_foot,
+ %opt,
+&>
+<%init>
+
+my %opt = @_;
+
+my @deviceparts_with_inventory =
+ map $_->devicepart,
+ qsearch({ 'table' => 'part_device',
+ 'extra_sql' => 'WHERE inventory_classnum IS NOT NULL',
+ });
+
+my $html_foot = sub {
+ my $js = "
+<SCRIPT TYPE=\"text/javascript\">
+
+ function opt(what,value,text) {
+ var optionName = new Option(text, value, false, false);
+ var length = what.length;
+ what.options[length] = optionName;
+ }
+
+ function devicepart_changed(what){
+
+ var macsel = document.getElementById('sel_mac_addr');
+ var mac = document.getElementById('mac_addr');
+
+ function update_macs(macs) {
+ for ( var i = macsel.length; i >= 0; i-- )
+ macsel.options[i] = null;
+
+ var macArray = eval('(' + macs + ')' );
+ if(macArray.length == 0)
+ opt(macsel,'','No MAC addresses found in inventory for this device type');
+ else
+ opt(macsel,'','Select MAC address');
+
+ for ( var i = 0; i < macArray.length; i++ ) {
+ opt(macsel,macArray[i],macArray[i]);
+ }
+
+ }
+
+ var devicepart = what.options[what.selectedIndex].value;
+
+ var deviceparts_with_inventory = new Array(";
+$js .= join(',', map qq("$_"), @deviceparts_with_inventory);
+$js .= ");
+
+ var hasInventory = false;
+ for ( i = 0; i < deviceparts_with_inventory.length; i++ ) {
+ if ( deviceparts_with_inventory[i] == devicepart )
+ hasInventory = true;
+ }
+
+
+ if(hasInventory) { // do the AJAX thing, disable text field
+ macsel.style.display = 'inline';
+ mac.style.display = 'none';
+ mac.value = '';
+ get_macs( devicepart, update_macs );
+ } else { // clear & display text field only, clear/hide select
+ mac.style.display = 'inline';
+ macsel.style.display = 'none';
+ macsel.selectedIndex = 0;
+ }
+
+ }
+
+ devicepart_changed(document.getElementById('devicepart'));
+</SCRIPT>";
+
+ $js;
+};
+
+# :/ needs agent-virt so you can't futz with arbitrary devices
+
+die "access denied"
+ unless $FS::CurrentUser::CurrentUser->access_right('Provision customer service'); #something else more specific?
+
+
+</%init>
diff --git a/httemplate/edit/pbx_device.html b/httemplate/edit/pbx_device.html
new file mode 100644
index 000000000..457ec7121
--- /dev/null
+++ b/httemplate/edit/pbx_device.html
@@ -0,0 +1,4 @@
+<& elements/device_Common.html,
+ 'name' => 'PBX device',
+ 'table' => 'pbx_device',
+&>
diff --git a/httemplate/edit/process/elements/device_Common.html b/httemplate/edit/process/elements/device_Common.html
new file mode 100644
index 000000000..7b6f2cd78
--- /dev/null
+++ b/httemplate/edit/process/elements/device_Common.html
@@ -0,0 +1,27 @@
+<& process.html,
+ 'redirect' => sub {
+ my( $cgi, $X_device ) = @_;
+ popurl(3)."view/$svc_table.cgi?".
+ 'svcnum='. $X_device->svcnum.
+ ';devicenum=';
+ },
+ %opt,
+&>
+<%init>
+
+my %opt = @_;
+
+warn my $table = $opt{table};
+( my $svc_table = $table ) =~ s/_device//;
+$svc_table = "svc_$svc_table";
+
+if($cgi->param('sel_mac_addr') && !$cgi->param('mac_addr')) {
+ $cgi->param('mac_addr',$cgi->param('sel_mac_addr'));
+}
+
+# :/ needs agent-virt so you can't futz with arbitrary devices
+
+die "access denied"
+ unless $FS::CurrentUser::CurrentUser->access_right('Provision customer service'); #something else more specific?
+
+</%init>
diff --git a/httemplate/edit/process/pbx_device.html b/httemplate/edit/process/pbx_device.html
new file mode 100644
index 000000000..664a9e715
--- /dev/null
+++ b/httemplate/edit/process/pbx_device.html
@@ -0,0 +1,3 @@
+<& elements/device_Common.html,
+ 'table' => 'pbx_device',
+&>
diff --git a/httemplate/misc/delete-pbx_device.html b/httemplate/misc/delete-pbx_device.html
new file mode 100755
index 000000000..7540d2f9f
--- /dev/null
+++ b/httemplate/misc/delete-pbx_device.html
@@ -0,0 +1,23 @@
+% if ( $error ) {
+% errorpage($error);
+% } else {
+<% $cgi->redirect($p. "view/svc_pbx.cgi?". $svcnum) %>
+% }
+<%init>
+
+# :/ needs agent-virt so you can't futz with arbitrary devices
+
+die "access denied"
+ unless $FS::CurrentUser::CurrentUser->access_right('Provision customer service'); #something else more specific?
+
+#untaint devicenum
+my($query) = $cgi->keywords;
+$query =~ /^(\d+)$/ || die "Illegal devicenum";
+my $devicenum = $1;
+
+my $pbx_device = qsearchs('pbx_device', { 'devicenum' => $devicenum } );
+my $svcnum = $pbx_device->svcnum;
+
+my $error = $pbx_device->delete;
+
+</%init>
diff --git a/httemplate/view/elements/svc_devices.html b/httemplate/view/elements/svc_devices.html
index 9458c922c..c9f5eda78 100644
--- a/httemplate/view/elements/svc_devices.html
+++ b/httemplate/view/elements/svc_devices.html
@@ -15,7 +15,7 @@
%if ( @devices || $num_part_device || $table eq 'dsl_device' ) {
% my $svcnum = $svc_x->svcnum;
- Devices
+ <FONT CLASS="fsinnerbox-title">Devices</FONT>
(<A HREF="<%$p%>edit/<%$table%>.html?svcnum=<%$svcnum%>">Add device</A>)
<BR>
@@ -30,7 +30,7 @@
<& /elements/table-grid.html &>
<TR>
-% if ( $table eq 'phone_device' || $table eq 'cable_device' ) {
+% if ( $table ne 'dsl_device' ) { # ( $table eq 'phone_device' || $table eq 'cable_device' || $table eq 'pbx_device' ) {
<TH CLASS="grid" BGCOLOR="#cccccc">Type</TH>
% }
<TH CLASS="grid" BGCOLOR="#cccccc">MAC Addr</TH>
@@ -62,7 +62,7 @@
% if ( $table eq 'phone_device' || $svc_x->isa('FS::device_Common') ) {
<% $td %><% $device->part_device->devicename |h %></TD>
% }
- <% $td %><% $device->mac_addr %></TD>
+ <% $td %><% $device->mac_addr_pretty %></TD>
<% $td %><% $export_links %></TD>
<% $td %>(
% unless ( $opt{'no_edit'} ) {
@@ -85,7 +85,7 @@ my $table = $opt{'table'}; #part_device, dsl_device
my $svc_x = $opt{'svc_x'};
my $num_part_device = 0;
-if ( $table eq 'phone_device' || $table eq 'cable_device' ) {
+if ( $table ne 'dsl_device' ) { # ( $table eq 'phone_device' || $table eq 'cable_device' || $table eq 'pbx_device' ) {
my $sth = dbh->prepare("SELECT COUNT(*) FROM part_device")
#WHERE disabled = '' OR disabled IS NULL;");
or die dbh->errstr;