bug fixes for #14698
[freeside.git] / httemplate / elements / tr-select-router_block_ip.html
1 <script type="text/javascript">
2 var auto_addr_routernum = <% encode_json(\%auto_addr_routernum) %>;
3 function hide_if_auto_addr(obj, i) {
4   var routernum = obj.value;
5   var select_blocknum = document.getElementsByName('blocknum')[0];
6   var label_auto_addr = document.getElementById('label_auto_addr');
7   var input_ip_addr = document.getElementById('input_ip_addr');
8   var auto = ( auto_addr_routernum[routernum] == 'Y' );
9   select_blocknum.style.display = auto ? '' : 'none';
10   label_auto_addr.style.display = auto ? '' : 'none';
11   input_ip_addr.style.display = !auto ? '' : 'none';
12 }
13 </script>
14 <& /elements/tr-td-label.html, label => ($opt{'label'} || 'Router') &>
15 <td>
16   <& /elements/select-tiered.html, prefix => 'router_', tiers => [
17   {
18     field     => 'routernum',
19     records   => \@routers,
20     name_col  => 'routername',
21     value_col => 'routernum',
22     onchange  => 'hide_if_auto_addr',
23     curr_value=> $opt{'routernum'},
24   },
25   {
26     field     => 'blocknum',
27     table     => 'addr_block',
28     hashref   => (exists($fixed{'blocknum'}) ? 
29                     { blocknum => $fixed{'blocknum'} } : {}
30                  ),
31     name_col  => 'cidr',
32     link_col  => 'routernum',
33     empty_label => '(any)',
34     curr_value  => $opt{'blocknum'},
35   },
36 ]
37 &>
38 </td></tr>
39 <& /elements/tr-td-label.html, label => 'IP address' &>
40 <td>
41 % if ( $fixed{'ip_addr'} ) {
42   <input type="hidden" id="input_ip_addr" name="ip_addr" 
43     value="<% $opt{'ip_addr'} |h%>"><% $opt{'ip_addr'} || '' %>
44 % }
45 % else {
46   <input type="text" id="input_ip_addr" name="ip_addr" 
47     style="display:none" value="<% $opt{'ip_addr'} |h%>">
48 % }
49   <span id="label_auto_addr"><% $opt{'ip_addr'} || '' %> 
50   <i>(automatic)</i></span>
51 </td> </tr>
52 <script type="text/javascript">
53 hide_if_auto_addr(document.getElementsByName('routernum')[0],0);
54 </script>
55 <%init>
56 my %opt = @_;
57 my @routers;
58
59 my $svc_x = $opt{'object'};
60 if ( $svc_x ) {
61   $opt{$_} = $svc_x->$_
62     foreach qw(routernum blocknum ip_addr svcpart);
63   if ( $svc_x->svcnum ) {
64     $opt{'svcpart'} = $svc_x->cust_svc->svcpart;
65   }
66 }
67
68 my $svcpart = $opt{'svcpart'} || '';
69 my %fixed; #  which fields are fixed
70 $svcpart =~ /^\d*$/ or die "invalid svcpart '$svcpart'";
71 if ( $svcpart ) {
72   my $part_svc = FS::part_svc->by_key($svcpart);
73   # Traditionally, columnflag 'F' on IP address means that it MUST 
74   # be auto-assigned (or, if null IP addresses are allowed, that 
75   # it must be null).
76   foreach (qw(routernum blocknum ip_addr)) {
77     my $psc = $part_svc->part_svc_column($_);
78     if ( $psc and $psc->columnflag eq 'F' ) {
79       $fixed{$_} = $psc->columnvalue;
80     }
81   }
82   if ( $fixed{'routernum'} ) {
83     @routers = (FS::router->by_key($fixed{'routernum'}))
84   }
85   else {
86     @routers = map { $_->router } 
87       qsearch('part_svc_router', { svcpart => $svcpart });
88   }
89 }
90 else {
91   @routers = qsearch('router', {});
92 }
93
94 my %auto_addr_routernum = map { $_->routernum, $_->auto_addr } @routers;
95 </%init>