--- /dev/null
+<SELECT NAME = "locationnum"
+ ID = "locationnum"
+% if ( $opt{onchange} ) {
+ onchange = "<% $opt{onchange} %>"
+% }
+ >
+
+% #false laziness w/select-table.html
+% my @pre_options = $opt{pre_options} ? @{ $opt{pre_options} } : ();
+% while ( @pre_options ) {
+% my $pre_opt = shift(@pre_options);
+% my $pre_label = shift(@pre_options);
+% my $selected = #$opt{'all_selected'}
+% # || ( ref($locationnum) && $locationnum->{$pre_opt} )
+% # ||
+% ( $locationnum eq $pre_opt );
+ <OPTION VALUE="<% $pre_opt %>"
+ <% $selected ? 'SELECTED' : '' %>
+ ><% $pre_label %>
+% }
+
+% if ( $cust_main ) {
+% my $selected = ( $locationnum == $cust_main->ship_locationnum );
+ <OPTION VALUE="<% $cust_main->ship_locationnum %>"
+ <% $selected ? 'SELECTED' : '' %>
+ ><% $opt{'empty_label'} || '(default service address)' |h %>
+% }
+
+% if ( $opt{'is_optional'} ) {
+ <OPTION VALUE="-2" <% $locationnum == -2 ? 'SELECTED' : ''%>><% $opt{'optional_label'} || '(not required)' |h %>
+% }
+
+% foreach my $loc ( @{ $opt{cust_location} } ) {
+% # don't show the ship_location redundantly
+% next if $cust_main && $cust_main->ship_locationnum == $loc->locationnum;
+ <OPTION VALUE="<% $loc->locationnum %>"
+ <% $locationnum == $loc->locationnum ? 'SELECTED' : '' %>
+ ><% $loc->line( cust_main => $cust_main,
+ countrydefault => $countrydefault,
+ )
+ |h %>
+% }
+
+% if ( $addnew ) {
+ <OPTION VALUE="-1"
+ <% $locationnum == -1 ? 'SELECTED' : '' %>
+ >Add new location
+% }
+
+</SELECT>
+<%init>
+
+my $conf = new FS::Conf;
+my $countrydefault = $conf->config('countrydefault') || 'US';
+
+my %opt = @_;
+my $cust_main = $opt{'cust_main'};
+my $locationnum = $opt{'curr_value'};
+
+$opt{'cust_location'} ||= [ $cust_main ? $cust_main->cust_location : () ];
+
+my $addnew = exists($opt{addnew}) ? $opt{addnew}
+ : $cust_main ? 1 : ( $locationnum>0 ? 0 : 1 );
+
+</%init>
<TR>
<<%$th%> ALIGN="right"><% $opt{'label'} || emt('Service location') %></<%$th%>>
<TD COLSPAN=7>
- <SELECT NAME = "locationnum"
- ID = "locationnum"
- onchange = "locationnum_changed(this);"
- >
-% if ( $cust_main ) {
- <OPTION VALUE="<% $cust_main->ship_locationnum %>"><% $opt{'empty_label'} || '(default service address)' |h %>
-% }
-% if ( $opt{'is_optional'} ) {
- <OPTION VALUE="-2" <% $locationnum == -2 ? 'SELECTED' : ''%>><% $opt{'optional_label'} || '(not required)' |h %>
-% }
-%
-% foreach my $loc ( @cust_location ) {
-% # don't show the ship_location redundantly
-% next if $cust_main && $cust_main->ship_locationnum == $loc->locationnum;
- <OPTION VALUE="<% $loc->locationnum %>"
- <% $locationnum == $loc->locationnum ? 'SELECTED' : '' %>
- ><% $loc->line( cust_main => $cust_main,
- countrydefault => $countrydefault,
- )
- |h %>
-% }
-% if ( $addnew ) {
- <OPTION VALUE="-1"
- <% $locationnum == -1 ? 'SELECTED' : '' %>
- >Add new location
-% }
- </SELECT>
+
+ <& /elements/select-cust_location.html,
+ %opt,
+ 'curr_value' => $locationnum,
+ 'cust_location' => \@cust_location,
+ 'onchange' => 'locationnum_changed(this);',
+ &>
+
</TD>
</TR>
}
</STYLE>
+
% # activate rolldown buttons for hidden package blocks
<SCRIPT TYPE="text/javascript">
function toggle_rolldown() {
if ( el ) el.scrollIntoView(true);
</&>
</SCRIPT>
+
<TABLE>
<TR>
<TD ALIGN="left" VALIGN="top">
+% my $br = 0;
+
+% if ( $total_pkgs > $maxrecords ) {
+
+% if ( 1 ) { #FS::pkg_class->num_pkg_class ) {
+ <% $br++ ? ' | ' : '' %>
+ Class: <& /elements/select-cust-pkg_class.html,
+ curr_value => scalar($cgi->param('classnum')),
+ onchange => 'classnum_changed(this);',
+ pre_options => [ '-1' => 'all',
+ '0' => '(none)',
+ ],
+ &>
+% }
+
+ <% $br++ ? ' | ' : '' %>
+ Status: <& /elements/select-cust_pkg-status.html,
+ curr_value => scalar($cgi->param('status')),
+ onchange => 'status_changed(this);',
+ &>
+
+% if ( 1 ) { #$cust_main->num_cust_location ) {
+ <% $br++ ? ' | ' : '' %>
+ Location: <& /elements/select-cust_location.html,
+ cust_main => $cust_main,
+ curr_value => scalar($cgi->param('locationnum')),
+ addnew => 0,
+ onchange => 'locationnum_changed(this);',
+ pre_options => [ '-1' => 'all', ],
+ &>
+% }
+
+ <SCRIPT TYPE="text/javascript">
+
+ function classnum_changed(what) {
+% my $classnum = $cgi->param('classnum');
+% $cgi->delete('classnum');
+ window.location = '<% $cgi->self_url %>;classnum=' + what.options[what.selectedIndex].value;
+% $cgi->param('classnum', $classnum);
+ }
+
+ function status_changed(what) {
+% my $status = $cgi->param('status');
+% $cgi->delete('status');
+ window.location = '<% $cgi->self_url %>;status=' + what.options[what.selectedIndex].value;
+% $cgi->param('status', $status);
+ }
+
+ function locationnum_changed(what) {
+% my $locationnum = $cgi->param('locationnum');
+% $cgi->delete('locationnum');
+ window.location = '<% $cgi->self_url %>;locationnum=' + what.options[what.selectedIndex].value;
+% $cgi->param('locationnum', $locationnum);
+ }
+
+ </SCRIPT>
+
+% }
+
+<% $br++ ? ' | ' : '' %>
% if ( $cust_main->num_cancelled_pkgs ) {
% if ( $cgi->param('showcancelledpackages') eq '0' #see if it was set by me
% || ( $conf->exists('hidecancelledpackages')
% {
% my $prev = $cgi->param('showcancelledpackages');
% $cgi->param('showcancelledpackages', 1);
- ( <a href="<% $cgi->self_url %>"><% mt('show') |h %>
+ <a href="<% $cgi->self_url %>"><% mt('show') |h %>
% $cgi->param('showcancelledpackages', $prev);
% } else {
% $cgi->param('showcancelledpackages', 0);
- ( <a href="<% $cgi->self_url %>"><% mt('hide') |h %>
+ <a href="<% $cgi->self_url %>"><% mt('hide') |h %>
% $cgi->param('showcancelledpackages', 1);
% }
- <% mt('cancelled packages') |h %></a> )
+ <% mt('cancelled packages') |h %></a>
% }
+<% $br++ ? ' | ' : '' %>
% if ( $cgi->param('showoldpackages') ) {
% $cgi->param('showoldpackages', 0);
- ( <a href="<% $cgi->self_url %>"><% mt('hide old packages') |h %></a> )
+ <a href="<% $cgi->self_url %>"><% mt('hide old packages') |h %></a>
% $cgi->param('showoldpackages', 1);
% } else {
% $cgi->param('showoldpackages', 1);
- ( <a href="<% $cgi->self_url %>"><% mt('show old packages') |h %></a> )
+ <a href="<% $cgi->self_url %>"><% mt('show old packages') |h %></a>
% $cgi->param('showoldpackages', 0);
% }
)";
}
+if ( $cgi->param('classnum') =~ /^(\d+)$/ ) {
+ my $classnum = $1;
+ if ( $classnum == 0 ) {
+ $extra_sql .= " AND part_pkg.classnum IS NULL ";
+ } else {
+ $extra_sql .= " AND part_pkg.classnum = $classnum ";
+ }
+}
+
+if ( $cgi->param('status') =~ /^([\w ]+)$/ ) {
+ my $status = $1;
+ $extra_sql .= ' AND '. FS::cust_pkg->status_sql. " = '$status' ";
+}
+
+if ( $cgi->param('locationnum') =~ /^(\d+)$/ ) {
+ my $locationnum = $1;
+ $extra_sql .= " AND cust_pkg.locationnum = $locationnum ";
+}
+
+my $total_pkgs = $cust_main->all_pkgs;
+
my $num_method = $hide_cancelled ? 'ncancelled_pkgs' : 'all_pkgs';
my $num_pkgs = $cust_main->$num_method({
'addl_from' => $addl_from,