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