X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=httemplate%2Felements%2Fselect-table.html;h=ecac7f765b419edef75673e6e8c152999b1a7624;hb=a284ef4c8d9d43db336a77db4c34996344cd5717;hp=e7363880165ab6f8a7ab15d2f464c88d686cee97;hpb=3146245f510ef873c4176bc06dc891f990db8f1e;p=freeside.git
diff --git a/httemplate/elements/select-table.html b/httemplate/elements/select-table.html
index e73638801..ecac7f765 100644
--- a/httemplate/elements/select-table.html
+++ b/httemplate/elements/select-table.html
@@ -28,6 +28,7 @@ Example:
'agent_null_right' => '', #right to see un-agented entries
#or
'records' => \@records, #instead of search params
+ 'presorted' => 0, #set true to disable sorting the records on name_col
#instead of the primary key... only for special cases
'value_col' => 'columnname',
@@ -82,17 +83,20 @@ Example:
% || ( $value eq $pre_opt );
% }
% unless ( $opt{'multiple'} || $opt{'disable_empty'} ) {
-
% }
-% foreach my $record ( sort { $a->$name_col() cmp $b->$name_col()
-% || $a->$key() <=> $b->$key()
-% }
-% @records
+% my $curr_option_found;
+% foreach my $record (
+% # we have the order_by parameter for this
+% #sort { $a->$name_col() cmp $b->$name_col()
+% # || $a->$key() <=> $b->$key()
+% # }
+% @records
% )
% {
% my $recvalue = $record->$key();
@@ -105,6 +109,7 @@ Example:
% $selected = ( ref($value) && $value->{$recvalue} )
% || ( $value && $value eq $recvalue ); #not == because of value_col
% }
+% $curr_option_found = $selected unless $curr_option_found;
% }
% while ( @post_options ) {
@@ -125,7 +130,12 @@ Example:
% || ( $value eq $post_opt );
+% }
+
+% my $non_option_label = $opt{'non_option_label'};
+% if (!$curr_option_found && $non_option_label && $value) {
+
% }
@@ -156,7 +166,7 @@ my $key = $opt{'value_col'} || $dbdef_table->primary_key;
my $name_col = $opt{'name_col'};
-my $value = $opt{'curr_value'} || $opt{'value'};
+my $value = exists($opt{'curr_value'}) ? $opt{'curr_value'} : $opt{'value'};
$value = [ split(/\s*,\s*/, $value) ] if $opt{'multiple'} && $value =~ /,/;
#my $addl_from = $opt{'addl_from'} || '';
@@ -175,8 +185,11 @@ if ( $opt{'agent_virt'} ) {
my @records = ();
if ( $opt{'records'} ) {
@records = @{ $opt{'records'} };
+ @records = sort { $a->get($name_col) cmp $b->get($name_col) } @records
+ unless $opt{'presorted'};
} else {
@records = qsearch( {
+ 'select' => $opt{'select'} || '*',
'table' => $opt{'table'},
'addl_from' => $opt{'addl_from'},
'hashref' => $hashref,
@@ -189,13 +202,22 @@ if ( ref( $value ) eq 'ARRAY' ) {
$value = { map { $_ => 1 } @$value };
}
-unless ( !ref($value) && $value < 1 # !$value #ignore negatives too
- or ! exists( $opt{hashref}->{disabled} ) #??
- #or grep { $value == $_->$key() } @records
- ) {
+
+if (
+ (ref $value && $value)
+ or (ref $opt{hashref} && exists $opt{hashref}->{disabled})
+ or $opt{also_show_option}
+) {
+
delete $opt{hashref}->{disabled};
- foreach my $v ( ref($value) ? keys %$value : ($value) ) {
+ # also_show_option: (hack for change_pkg form):
+ # Include an absent select option, without selecting it
+ # as the curr_value
+ my @also_show = ref($value) ? keys %$value : ($value);
+ push @also_show, $opt{also_show_option} if $opt{also_show_option};
+
+ foreach my $v ( @also_show ) {
next if grep { $v == $_->$key() } @records;
$opt{hashref}->{$key} = $v;