summaryrefslogtreecommitdiff
path: root/httemplate/elements/tr-select-cust-part_pkg.html
blob: 69400f16ac87f97e653e21a344945ae067d53e03 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
%if ( scalar(@pkg_class) > 1 && ! $conf->exists('disable-cust-pkg_class') ) {

  <% include('/elements/xmlhttp.html',
                'url'  => $p.'misc/cust-part_pkg.cgi',
                'subs' => [ 'get_part_pkg' ],
            )
  %>

  <SCRIPT TYPE="text/javascript">

    function part_pkg_opt(what,value,text,can_discount) {
      var optionName = new Option(text, value, false, false);
      optionName.setAttribute('data-can_discount', can_discount);
      var length = what.length;
      what.options[length] = optionName;
    }

    function classnum_changed(what) {

      what.form.pkgpart.disabled = 'disabled'; //disable part_pkg dropdown
      what.form.submit.disabled = true; //disable the submit button
      var discountnum = what.form.discountnum;
      if ( discountnum ) {
        discountnum.disabled = true; //disable discount dropdown
      }

      classnum = what.options[what.selectedIndex].value;

      function update_part_pkg(part_pkg) {

        // blank the current packages
        for ( var i = what.form.pkgpart.length; i>= 0; i-- )
          what.form.pkgpart.options[i] = null;

        // add the new packages
        opt(what.form.pkgpart, '', 'Select package');
        var packagesArray = eval('(' + part_pkg + ')' );
        for ( var s = 0; s < packagesArray.length; s=s+3 ) {
          var packagesLabel = packagesArray[s+1];
          var can_discount  = packagesArray[s+2];
          part_pkg_opt(
            what.form.pkgpart, packagesArray[s], packagesLabel, can_discount
          );
        }

        what.form.pkgpart.disabled = ''; //re-enable part_pkg dropdown

      }

      get_part_pkg( <% $cust_main->custnum %>, classnum, update_part_pkg );
    
    }

  </SCRIPT>

  <TR>
    <TH ALIGN="right">Package Class</TH>
    <TD COLSPAN=7>
      <% include('/elements/select-cust-pkg_class.html',
                   'curr_value' => $opt{'classnum'},
                   'pkg_class'  => \@pkg_class,
                   'onchange'   => 'classnum_changed',
                )
      %>
    </TD>
  </TR>

%}

<TR>
  <TH ALIGN="right">Package</TH>
  <TD COLSPAN=7>
    <% include('/elements/select-cust-part_pkg.html',
                 'curr_value' => $opt{'curr_value'}, #$pkgpart
                 'classnum'   => $opt{'classnum'},
                 'cust_main'  => $opt{'cust_main'},  #$cust_main
                 'onchange'   => 'enable_order_pkg',
              )
    %>
  </TD>
</TR>

<%init>

my $conf = new FS::Conf;

my %opt = @_;

my $pre_label = $opt{'pre_label'} || '';
$pre_label .= ' ' if length($pre_label) && $pre_label =~ /\S$/;

my $cust_main = $opt{'cust_main'}
  or die "cust_main not specified";

#my @pkg_class = sort { $a->classname cmp $b->classname }
#                     qsearch( 'pkg_class', { 'disabled' => '' } );

#"normal" part_pkg agent virtualization (agentnum or type)
my @part_pkg = qsearch({
  'select'    => 'DISTINCT classnum',
  'table'     => 'part_pkg',
  'hashref'   => { 'disabled' => '' },
  'extra_sql' =>
    ' AND '. $FS::CurrentUser::CurrentUser->agentnums_sql( 'null'=>1 ).
    ' AND '. FS::part_pkg->agent_pkgs_sql( $opt{'cust_main'}->agent ),
});

my @pkg_class =
  sort { $a->classname cmp $b->classname } #should get a sort order in config
  map  { $_->pkg_class || new FS::pkg_class { 'classnum'  => '',
                                              'classname' => '(none)' }
       }
  @part_pkg;

</%init>