v4 style
[freeside.git] / httemplate / elements / select-svc.html
1 <%init>
2 my %opt = @_;
3 my $svcdb = $opt{table};
4 my $field = $opt{field} || 'svcnum';
5 my $id = $opt{id} || $opt{field};
6 my $curr_value = [ split(',', $opt{curr_value} || '') ];
7 my $label = $opt{name_col} || 'label';
8
9 # cut-down, jquerified version of select-tiered
10 # XXX do we need to agent-virt this? edit/part_svc is Configuration-access.
11 my @part_svc = qsearch('part_svc', {
12   disabled  => '',
13   svcdb     => $svcdb
14 });
15 my %labels; # service labels, of some kind
16 my %values; # svcnums
17 my (@all_l, @all_v);
18 foreach my $part_svc (@part_svc) {
19   my (@l, @v);
20   foreach my $svc_x (qsearch({
21     'table'       => 'cust_svc',
22     'addl_from'   => " JOIN $svcdb USING (svcnum)",
23     'select'      => "$svcdb.*, cust_svc.svcpart",
24     'hashref'     => { 'svcpart' => $part_svc->svcpart },
25   }))
26   {
27     push @l, $svc_x->$label;
28     push @all_l, $svc_x->$label;
29     push @v, $svc_x->svcnum;
30     push @all_v, $svc_x->svcnum;
31   }
32   $labels{ $part_svc->svcpart } = \@l;
33   $values{ $part_svc->svcpart } = \@v;
34 }
35 $labels{ '' } = \@all_l;
36 $values{ '' } = \@all_v;
37
38 </%init>
39 <& /elements/select-table.html,
40   'table'       => 'part_svc',
41   'records'     => \@part_svc,
42   'id'          => $id.'_svcpart',
43   'name_col'    => 'svc',
44   'empty_label' => 'any',
45   'curr_value'  => '',
46   'field'       => $id.'_svcpart', # avoid confusion with any other field
47 &>
48 <BR>
49 <& /elements/select.html,
50   %opt,
51   'field'       => $field,
52   'id'          => $id,
53 &>
54 <script>
55 $().ready(function() {
56   var labels = <% encode_json(\%labels) %>;
57   var values = <% encode_json(\%values) %>;
58   var select_svcpart = $('#<% $id.'_svcpart' %>');
59   var select_svcnum = $('#<% $id %>');
60   var onchange_svcpart = function() {
61     var l = labels[ this.value ];
62     var v = values[ this.value ];
63     select_svcnum.empty();
64     for (var i = 0; i < v.length; i++) {
65       var opt = $('<option />').val(v[i]).text(l[i]);
66       select_svcnum.append(opt);
67     }
68   };
69   select_svcpart.on('change', onchange_svcpart);
70   select_svcpart.change();
71   select_svcnum.val(<% encode_json($curr_value) %>);
72 });
73 </script>