[freeside-commits] branch master updated. 2eb1e959493a77e061243df03a474edf4eb24db9

Mark Wells mark at 420.am
Thu Apr 28 20:23:28 PDT 2016


The branch, master has been updated
       via  2eb1e959493a77e061243df03a474edf4eb24db9 (commit)
      from  ea734eb2f16a632a9c79bf17b6954f8571d85f3f (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 2eb1e959493a77e061243df03a474edf4eb24db9
Author: Mark Wells <mark at freeside.biz>
Date:   Thu Apr 28 20:19:49 2016 -0700

    more convenient selection of domain in svc_acct definition, #40962

diff --git a/FS/FS/svc_acct.pm b/FS/FS/svc_acct.pm
index b4db082..93659f9 100644
--- a/FS/FS/svc_acct.pm
+++ b/FS/FS/svc_acct.pm
@@ -316,6 +316,7 @@ sub table_info {
         'domsvc'    => {
                          label     => 'Domain',
                          type      => 'select',
+                         select_svc => 1,
                          select_table => 'svc_domain',
                          select_key   => 'svcnum',
                          select_label => 'domain',
diff --git a/httemplate/edit/elements/part_svc_column.html b/httemplate/edit/elements/part_svc_column.html
index bc679e5..4e112c0 100644
--- a/httemplate/edit/elements/part_svc_column.html
+++ b/httemplate/edit/elements/part_svc_column.html
@@ -132,7 +132,10 @@ my %communigate_fields = (
 %   } elsif ( $def->{'type'} eq 'select' ) {
 %
 %     if ( $def->{'select_table'} ) {
-      <& /elements/select-table.html,
+%       # set the 'select_svc' flag to enable two-step selection of services
+%       my $comp = '/elements/select-table.html';
+%       $comp = '/elements/select-svc.html' if $def->{'select_svc'};
+      <& $comp,
           'field'       => $name,
           'id'          => $name.'_select',
           'table'       => $def->{'select_table'},
diff --git a/httemplate/elements/select-svc.html b/httemplate/elements/select-svc.html
new file mode 100644
index 0000000..b439a28
--- /dev/null
+++ b/httemplate/elements/select-svc.html
@@ -0,0 +1,73 @@
+<%init>
+my %opt = @_;
+my $svcdb = $opt{table};
+my $field = $opt{field} || 'svcnum';
+my $id = $opt{id} || $opt{field};
+my $curr_value = [ split(',', $opt{curr_value} || '') ];
+my $label = $opt{name_col} || 'label';
+
+# cut-down, jquerified version of select-tiered
+# XXX do we need to agent-virt this? edit/part_svc is Configuration-access.
+my @part_svc = qsearch('part_svc', {
+  disabled  => '',
+  svcdb     => $svcdb
+});
+my %labels; # service labels, of some kind
+my %values; # svcnums
+my (@all_l, @all_v);
+foreach my $part_svc (@part_svc) {
+  my (@l, @v);
+  foreach my $svc_x (qsearch({
+    'table'       => 'cust_svc',
+    'addl_from'   => " JOIN $svcdb USING (svcnum)",
+    'select'      => "$svcdb.*, cust_svc.svcpart",
+    'hashref'     => { 'svcpart' => $part_svc->svcpart },
+  }))
+  {
+    push @l, $svc_x->$label;
+    push @all_l, $svc_x->$label;
+    push @v, $svc_x->svcnum;
+    push @all_v, $svc_x->svcnum;
+  }
+  $labels{ $part_svc->svcpart } = \@l;
+  $values{ $part_svc->svcpart } = \@v;
+}
+$labels{ '' } = \@all_l;
+$values{ '' } = \@all_v;
+
+</%init>
+<& /elements/select-table.html,
+  'table'       => 'part_svc',
+  'records'     => \@part_svc,
+  'id'          => $id.'_svcpart',
+  'name_col'    => 'svc',
+  'empty_label' => 'any',
+  'curr_value'  => '',
+  'field'       => $id.'_svcpart', # avoid confusion with any other field
+&>
+<BR>
+<& /elements/select.html,
+  %opt,
+  'field'       => $field,
+  'id'          => $id,
+&>
+<script>
+$().ready(function() {
+  var labels = <% encode_json(\%labels) %>;
+  var values = <% encode_json(\%values) %>;
+  var select_svcpart = $('#<% $id.'_svcpart' %>');
+  var select_svcnum = $('#<% $id %>');
+  var onchange_svcpart = function() {
+    var l = labels[ this.value ];
+    var v = values[ this.value ];
+    select_svcnum.empty();
+    for (var i = 0; i < v.length; i++) {
+      var opt = $('<option />').val(v[i]).text(l[i]);
+      select_svcnum.append(opt);
+    }
+  };
+  select_svcpart.on('change', onchange_svcpart);
+  select_svcpart.change();
+  select_svcnum.val(<% encode_json($curr_value) %>);
+});
+</script>
diff --git a/httemplate/elements/select.html b/httemplate/elements/select.html
index 42cd895..3a0dc5b 100644
--- a/httemplate/elements/select.html
+++ b/httemplate/elements/select.html
@@ -21,6 +21,7 @@
     disabled    => 0,
     onchange    => 'do_something()',
     js_only     => 0,         # disables the whole thing
+    element_etc => '',        # anything else to put in the <select> tag
 &>
 </%doc>
     
@@ -35,6 +36,7 @@
         <% $style %>
         <% $opt{disabled} %>
         <% $onchange %>
+        <% $opt{'element_etc'} %>
 >
 
 % if ( $opt{options} ) {

-----------------------------------------------------------------------

Summary of changes:
 FS/FS/svc_acct.pm                             |    1 +
 httemplate/edit/elements/part_svc_column.html |    5 +-
 httemplate/elements/select-svc.html           |   73 +++++++++++++++++++++++++
 httemplate/elements/select.html               |    2 +
 4 files changed, 80 insertions(+), 1 deletion(-)
 create mode 100644 httemplate/elements/select-svc.html




More information about the freeside-commits mailing list