RT#18361 Delay package from billing until services are provisioned [v3 backport]
[freeside.git] / httemplate / elements / tr-pkg_svc.html
1 <TR>
2   <TD CLASS="background" COLSPAN=99>
3
4 <% itable('', 4, 1) %><TR><TD VALIGN="top">
5 <% $thead %>
6
7 %foreach my $part_svc ( @part_svc ) {
8 %  my $svcpart = $part_svc->svcpart;
9 %  my $pkg_svc = $pkg_svc{$svcpart}
10 %             || new FS::pkg_svc ( {
11 %                                   'pkgpart'     => $pkgpart,
12 %                                   'svcpart'     => $svcpart,
13 %                                   'quantity'    => 0,
14 %                                   'primary_svc' => '',
15 %                                   'hidden'      => '',
16 %                                } );
17 %  if ( $cgi->param('error') ) {
18 %    my $primary_svc = ( $pkg_svc->primary_svc =~ /^Y/i );
19 %    my $pkg_svc_primary = scalar($cgi->param('pkg_svc_primary'));
20 %    $pkg_svc->primary_svc('')
21 %      if $primary_svc && $pkg_svc_primary != $svcpart;
22 %    $pkg_svc->primary_svc('Y')
23 %      if ! $primary_svc && $pkg_svc_primary == $svcpart;
24 %  }
25 %
26 %  push @fixups, "pkg_svc$svcpart";
27 %
28 %  my $quan = 0;
29 %  if ( $cgi->param("pkg_svc$svcpart") =~ /^\s*(\d+)\s*$/ ) {
30 %    $quan = $1;
31 %  } elsif ( $pkg_svc->quantity ) {
32 %    $quan = $pkg_svc->quantity;
33 %  }
34 %
35 %  my $provision_hold = '';
36 %  if ( grep { $_ eq "provision_hold$svcpart" } $cgi->param ) {
37 %    $provision_hold = $cgi->param("hidden_svc$svcpart");
38 %  } else {
39 %    $provision_hold = $pkg_svc->provision_hold;
40 %  }
41 %
42 %  my @exports = $pkg_svc->part_svc->part_export;
43 %  foreach my $export ( @exports ) {
44 %       push @possible_exports, $export if $export->can('external_pkg_map');
45 %  }
46
47   <TR>
48     <TD>
49       <INPUT TYPE="text" NAME="pkg_svc<% $svcpart %>" SIZE=7 MAXLENGTH=6 VALUE="<% $quan %>">
50     </TD>
51    
52     <TD ALIGN="center">
53       <INPUT TYPE="radio" NAME="pkg_svc_primary" VALUE="<% $svcpart %>" <% $pkg_svc->primary_svc =~ /^Y/i ? ' CHECKED' : '' %>>
54     </TD>
55
56     <TD>
57       <A HREF="part_svc.cgi?<% $part_svc->svcpart %>"><% $part_svc->svc %></A>      <% $part_svc->disabled =~ /^Y/i ? ' (DISABLED)' : '' %>
58     </TD>
59
60     <TD>
61       <INPUT TYPE="checkbox" NAME="hidden<% $svcpart %>" VALUE="Y"<% $pkg_svc->hidden =~ /^Y/i ? ' CHECKED' : ''%>>
62     </TD>
63
64     <TD ALIGN="center">
65       <INPUT TYPE="checkbox" NAME="provision_hold<% $svcpart %>" VALUE="Y"<% $provision_hold =~ /^Y/i ? ' CHECKED' : ''%>>
66     </TD>
67
68   </TR>
69 % foreach ( 1 .. $columns-1 ) {
70 %       if ( $count == int( $_ * scalar(@part_svc) / $columns ) ) { 
71 %  
72
73          </TABLE></TD><TD VALIGN="top"><% $thead %>
74 %   }
75 %     }
76 %     $count++;
77 %  
78 % } 
79
80 </TR></TABLE></TD></TR></TABLE>
81
82 % if ( scalar(@possible_exports) > 0 || scalar(@mapped_exports) > 0 ) {
83    <TABLE><TR>
84         <TH BGCOLOR="#dcdcdc">Export</TH>
85         <TH BGCOLOR="#dcdcdc">Vendor Package Id <FONT SIZE="-2">(blank to delete)</FONT></TH>
86         </TR>
87 %   foreach my $export ( @mapped_exports ) {
88         <TR>
89             <TD><% $export->exportname %></TD>
90             <TD><INPUT TYPE="text" NAME="export<% $export->exportnum %>"
91                     SIZE="30" VALUE="<% $vendor_pkg_ids{$export->exportnum} %>">
92             </TD>
93         </TR>
94 %   } 
95 %   foreach my $export ( @possible_exports ) {
96 %       unless ( defined $vendor_pkg_ids{$export->exportnum} ) {
97             <TR>
98                 <TD><% $export->exportname %></TD>
99                 <TD>
100                     <INPUT TYPE="text" NAME="export<% $export->exportnum %>" SIZE="30">
101                 </TD>
102             </TR>
103 %       }
104 %   }
105   </TABLE>
106 % }
107
108   </TD>
109 </TR>
110
111 <%init>
112
113 my %opt = @_;
114 my $cgi = $opt{'cgi'};
115
116 my $thead =  "\n\n". ntable('#cccccc', 2).
117              '<TR><TH BGCOLOR="#dcdcdc"><FONT SIZE=-1>Quan.</FONT></TH>'.
118              '<TH BGCOLOR="#dcdcdc"><FONT SIZE=-2>Primary</FONT></TH>'.
119              '<TH BGCOLOR="#dcdcdc">Service</TH>'.
120              '<TH BGCOLOR="#dcdcdc"><FONT SIZE=-1>Hide</FONT></TH>'.
121              '<TH BGCOLOR="#dcdcdc"><FONT SIZE=-1>Hold<BR>Until<BR>Provision</FONT></TH>'.
122              '</TR>';
123
124 my $part_pkg = $opt{'object'};
125 my $pkgpart = $part_pkg->pkgpart;
126
127 my $where =  "WHERE disabled IS NULL OR disabled = ''";
128 if ( $pkgpart ) {
129   $where .=  "   OR 0 < ( SELECT quantity FROM pkg_svc
130                            WHERE pkg_svc.svcpart = part_svc.svcpart
131                              AND pkgpart = $pkgpart
132                         )";
133 }
134 my @part_svc = qsearch('part_svc', {}, '', $where);
135
136 #my $q_part_pkg = $clone_part_pkg || $part_pkg;
137 #my %pkg_svc = map { $_->svcpart => $_ } $q_part_pkg->pkg_svc;
138 my %pkg_svc = map { $_->svcpart => $_ } $part_pkg->pkg_svc('disable_linked'=>1);
139
140 my @fixups = ();
141 my $count = 0;
142 my $columns = 3;
143
144 my @possible_exports = ();
145 my @mapped_exports = ();
146 my @part_pkg_vendor = $part_pkg->part_pkg_vendor;
147 foreach my $part_pkg_vendor ( @part_pkg_vendor ) {
148     push @mapped_exports, $part_pkg_vendor->part_export;
149 }
150 my %vendor_pkg_ids = $part_pkg->vendor_pkg_ids;
151
152 </%init>