Add the ability to link customer service definition fields to inventory
[freeside.git] / httemplate / elements / select-table.html
index 10cc8b9..36eb4e2 100644 (file)
@@ -8,12 +8,20 @@
   # 'value'    => 'current_value',
   #
   ##opt
-  # 'empty_label' => '', #better specify it though, the default might change
-  # 'hashref'     => {},
-  # 'records'     => \@records, #instead of hashref
+  # 'empty_label'  => '', #better specify it though, the default might change
+  # 'hashref'      => {},
+  # 'extra_sql'    => '',
+  # 'records'      => \@records, #instead of hashref
+  # 'pre_options'  => [ 'value' => 'option' ], #before normal options
+  # 'element_name' => '', #HTML element name, defaults to the name of
+  #                       # the primary key column
+  # 'element_etc'  => '', #additional attributes (i.e. "DISABLED") for the
+  #                       #<SELECT> element
 
   my( %opt ) = @_;
 
+  #warn "***** select-table: \n". Dumper(%opt);
+
   my $key = dbdef->table($opt{'table'})->primary_key; #? $opt{'primary_key'} ||
 
   my $name_col = $opt{'name_col'};
   if ( $opt{'records'} ) {
     @records = @{ $opt{'records'} };
   } else {
-    @records = qsearch( $opt{'table'}, ( $opt{'hashref'} || {} ) );
+    @records = qsearch( {
+      'table'     => $opt{'table'},
+      'hashref'   => ( $opt{'hashref'} || {} ),
+      'extra_sql' => ( $opt{'extra_sql'} || '' ),
+    });
   }
 
+  my @pre_options = $opt{'pre_options'} ? @{ $opt{'pre_options'} } : ();
+
 %>
 
-<SELECT NAME="<%= $key %>">
+<SELECT NAME="<%= $opt{'element_name'} || $key %>" <%= $opt{'element_etc'} %>>
+
+  <% while ( @pre_options ) { %>
+    <OPTION VALUE="<%= shift(@pre_options) %>"><%= shift(@pre_options) %>
+  <% } %>
 
-  <OPTION VALUE=""><%= $opt{'empty_label'} || 'all' %></OPTION>
+  <OPTION VALUE=""><%= $opt{'empty_label'} || 'all' %>
 
   <% foreach my $record ( sort { $a->$name_col() cmp $b->$name_col() }
                                @records