invoice_sections_with_taxes per-agent, RT#79636
[freeside.git] / httemplate / elements / tr-pkg_svc.html
1 <TR>
2   <TD CLASS="background" COLSPAN=99>
3
4 <SCRIPT>
5 var provision_hold_td = [];
6 var provision_hold_input = [];
7 </SCRIPT>
8
9 <% itable('', 4, 1) %><TR><TD VALIGN="top">
10 <% pkg_svc_thead() %>
11
12 %foreach my $part_svc ( @part_svc ) {
13 %  my $svcpart = $part_svc->svcpart;
14 %  my $pkg_svc = $pkg_svc{$svcpart}
15 %              ||= qsearchs('pkg_svc', { 'pkgpart' => $pkgpart,
16 %                                        'svcpart' => $svcpart } )
17 %              || new FS::pkg_svc ( {
18 %                                     'pkgpart'     => $pkgpart,
19 %                                     'svcpart'     => $svcpart,
20 %                                     'quantity'    => 0,
21 %                                     'primary_svc' => '',
22 %                                     'hidden'      => '',
23 %                                     'bulk_skip'   => '',
24 %                                } );
25 %  if ( $cgi->param('error') ) {
26 %    my $primary_svc = ( $pkg_svc->primary_svc =~ /^Y/i );
27 %    my $pkg_svc_primary = scalar($cgi->param('pkg_svc_primary'));
28 %    $pkg_svc->primary_svc('')
29 %      if $primary_svc && $pkg_svc_primary != $svcpart;
30 %    $pkg_svc->primary_svc('Y')
31 %      if ! $primary_svc && $pkg_svc_primary == $svcpart;
32 %  }
33 %
34 %  my $quan = 0;
35 %  if ( $cgi->param("pkg_svc$svcpart") =~ /^\s*(\d+)\s*$/ ) {
36 %    $quan = $1;
37 %  } elsif ( $pkg_svc->quantity ) {
38 %    $quan = $pkg_svc->quantity;
39 %  }
40 %
41 %  my $hidden = '';
42 %  if ( grep { $_ eq "hidden_svc$svcpart" } $cgi->param ) {
43 %    $hidden = $cgi->param("hidden_svc$svcpart");
44 %  } else {
45 %    $hidden = $pkg_svc->hidden;
46 %  }
47 %  my $bulk_skip = '';
48 %  if ( grep { $_ eq "no_bulk_skip$svcpart" } $cgi->param ) {
49 %    $bulk_skip = $cgi->param("no_bulk_skip$svcpart") eq 'Y' ? '' : 'Y';
50 %  } else {
51 %    $bulk_skip = $pkg_svc->bulk_skip;
52 %  }
53 %  my $provision_hold = '';
54 %  if ( grep { $_ eq "provision_hold$svcpart" } $cgi->param ) {
55 %    $provision_hold = $cgi->param("hidden_svc$svcpart");
56 %  } else {
57 %    $provision_hold = $pkg_svc->provision_hold;
58 %  }
59 %
60 %  my @exports = $pkg_svc->part_svc->part_export;
61 %  foreach my $export ( @exports ) {
62 %       push @possible_exports, $export if $export->can('external_pkg_map');
63 %  }
64
65   <TR>
66     <TD>
67       <INPUT TYPE="text" NAME="pkg_svc<% $svcpart %>" SIZE=4 MAXLENGTH=6 VALUE="<% $quan %>">
68     </TD>
69    
70     <TD ALIGN="center">
71       <INPUT TYPE="radio" NAME="pkg_svc_primary" VALUE="<% $svcpart %>" <% $pkg_svc->primary_svc =~ /^Y/i ? ' CHECKED' : '' %>>
72     </TD>
73
74     <TD>
75       <A HREF="part_svc.cgi?<% $part_svc->svcpart %>"><% $part_svc->svc %></A>      <% $part_svc->disabled =~ /^Y/i ? ' (DISABLED)' : '' %>
76     </TD>
77
78     <TD ALIGN="center">
79       <INPUT TYPE="checkbox" NAME="hidden<% $svcpart %>" VALUE="Y"<% $hidden =~ /^Y/i ? ' CHECKED' : ''%>>
80     </TD>
81
82     <TD ALIGN="center">
83       <INPUT TYPE="checkbox" NAME="no_bulk_skip<% $svcpart %>" VALUE="Y"<% $bulk_skip =~ /^Y/i ? '' : ' CHECKED' %>>
84     </TD>
85
86     <TD ALIGN="center" ID="td_provision_hold<% $svcpart %>">
87       <INPUT TYPE="checkbox" ID="input_provision_hold<% $svcpart %>" NAME="provision_hold<% $svcpart %>" VALUE="Y"<% $provision_hold =~ /^Y/i ? ' CHECKED' : ''%>>
88     </TD>
89 <SCRIPT>
90 provision_hold_td.push(document.getElementById('td_provision_hold<% $svcpart %>'));
91 provision_hold_input.push(document.getElementById('input_provision_hold<% $svcpart %>'));
92 </SCRIPT>
93
94   </TR>
95 % foreach ( 1 .. $columns-1 ) {
96 %       if ( $count == int( $_ * scalar(@part_svc) / $columns ) ) { 
97 %  
98
99          </TABLE></TD><TD VALIGN="top"><% pkg_svc_thead() %>
100 %   }
101 %     }
102 %     $count++;
103 %  
104 % } # foreach $part_svc
105
106 </TR></TABLE></TD></TR></TABLE>
107
108 <SCRIPT>
109 // start_on_hold from edit/part_pkg.cgi
110 // toggles display of provision_hold checkboxes when that changes
111 function provision_hold_check () {
112   var start_on_hold = document.getElementById('start_on_hold');
113   if (start_on_hold) {
114     for (i = 0; i < provision_hold_td.length; i++) {
115       provision_hold_td[i].style.display = start_on_hold.checked ? '' : 'none';
116     }
117     for (i = 0; i < provision_hold_input.length; i++) {
118       provision_hold_input[i].disabled = start_on_hold.checked ? false : true;
119     }
120   }
121 }
122 function provision_hold_init () {
123   var start_on_hold = document.getElementById('start_on_hold');
124   if (start_on_hold) {
125     start_on_hold.onchange = provision_hold_check;
126     provision_hold_check();
127   }
128 }
129 provision_hold_init();
130 </SCRIPT>
131
132 % if ( scalar(@possible_exports) > 0 || scalar(@mapped_exports) > 0 ) {
133    <TABLE><TR>
134         <TH BGCOLOR="#dcdcdc">Export</TH>
135         <TH BGCOLOR="#dcdcdc">Vendor Package Id <FONT SIZE="-2">(blank to delete)</FONT></TH>
136         </TR>
137 %   foreach my $export ( @mapped_exports ) {
138         <TR>
139             <TD><% $export->exportname %></TD>
140             <TD><INPUT TYPE="text" NAME="export<% $export->exportnum %>"
141                     SIZE="30" VALUE="<% $vendor_pkg_ids{$export->exportnum} %>">
142             </TD>
143         </TR>
144 %   } 
145 %   foreach my $export ( @possible_exports ) {
146 %       unless ( defined $vendor_pkg_ids{$export->exportnum} ) {
147             <TR>
148                 <TD><% $export->exportname %></TD>
149                 <TD>
150                     <INPUT TYPE="text" NAME="export<% $export->exportnum %>" SIZE="30">
151                 </TD>
152             </TR>
153 %       }
154 %   }
155   </TABLE>
156 % }
157
158   </TD>
159 </TR>
160
161 <%init>
162
163 my %opt = @_;
164 my $cgi = $opt{'cgi'};
165
166 my $thead_count = 0;
167 sub pkg_svc_thead {
168   $thead_count += 1;
169   return "\n\n". ntable('#cccccc', 2).
170          '<TR>'.
171          '<TH BGCOLOR="#dcdcdc"><FONT SIZE=-1>Quan.</FONT></TH>'.
172          '<TH BGCOLOR="#dcdcdc"><FONT SIZE=-1>Primary</FONT></TH>'.
173          '<TH BGCOLOR="#dcdcdc">Service</TH>'.
174          '<TH BGCOLOR="#dcdcdc"><FONT SIZE=-1>Hide<BR>from<BR>Invoices</FONT></TH>'.
175          '<TH BGCOLOR="#dcdcdc"><FONT SIZE=-1>Bulk<BR>Charge</FONT></TH>'.
176          '<TH BGCOLOR="#dcdcdc" ID="th_provision_hold' . $thead_count . '"><FONT SIZE=-1>Remove Hold After Provisioning</FONT></TH>'.
177          '</TR>'.
178          qq!<SCRIPT>provision_hold_td.push(document.getElementById('th_provision_hold$thead_count'))</SCRIPT>!;
179 ;
180 }
181
182 my $part_pkg = $opt{'object'};
183 my $pkgpart = $part_pkg->pkgpart;
184
185 my $where =  "WHERE disabled IS NULL OR disabled = ''";
186 if ( $pkgpart ) {
187   $where .=  "   OR 0 < ( SELECT quantity FROM pkg_svc
188                            WHERE pkg_svc.svcpart = part_svc.svcpart
189                              AND pkgpart = $pkgpart
190                         )";
191 }
192 my @part_svc = qsearch('part_svc', {}, '', $where);
193
194 #my $q_part_pkg = $clone_part_pkg || $part_pkg;
195 #my %pkg_svc = map { $_->svcpart => $_ } $q_part_pkg->pkg_svc;
196 my %pkg_svc = map { $_->svcpart => $_ } $part_pkg->pkg_svc('disable_linked'=>1);
197
198 my $count = 0;
199 my $columns = 3;
200
201 my @possible_exports = ();
202 my @mapped_exports = ();
203 my @part_pkg_vendor = $part_pkg->part_pkg_vendor;
204 foreach my $part_pkg_vendor ( @part_pkg_vendor ) {
205     push @mapped_exports, $part_pkg_vendor->part_export;
206 }
207 my %vendor_pkg_ids = $part_pkg->vendor_pkg_ids;
208
209 </%init>