-<% ntable("#cccccc", 2) %>
- <TR>
- <TD align="right">Tax product</TD>
- <TD>
- <INPUT name="part_pkg_taxproduct_taxproductnum" id="taxproductnum" type="hidden" value="<% $opt{'taxproductnum'}%>">
- <INPUT name="part_pkg_taxproduct_description" id="taxproductnum_description" type="text" value="<% $opt{taxproduct_description} %>" size="12" onclick="overlib( OLiframeContent('<% $p %>/browse/part_pkg_taxproduct.cgi?_type=select&id=taxproductnum&taxproductnum='+document.getElementById('taxproductnum').value, 1000, 400, 'tax_product_popup'), CAPTION, 'Select product', STICKY, AUTOSTATUSCAP, MIDX, 0, MIDY, 0, DRAGGABLE, CLOSECLICK); return false;">
- </TD>
- </TR>
- <TR>
- <TD colspan="2" align="right">
- <INPUT name="tax_override" id="tax_override" type="hidden" value="<% $opt{tax_override} %>">
- <A href="javascript:void(0)" onclick="overlib( OLiframeContent('part_pkg_taxoverride.html?selected='+document.getElementById('tax_override').value, 1100, 600, 'tax_product_popup'), CAPTION, 'Edit product tax overrides', STICKY, AUTOSTATUSCAP, MIDX, 0, MIDY, 0, DRAGGABLE, CLOSECLICK); return false;">
- <% $opt{tax_override} ? 'Edit tax overrides' : 'Override taxes' %>
- </A>
- </TD>
- </TR>
-</TABLE>
-
+% if (!$init) {
+% $init = 1;
+<STYLE TYPE="text/css">
+.ui-autocomplete-loading {
+ background-color: silver;
+}
+ul.ui-autocomplete li.ui-menu-item {
+ font-size: 0.8em;
+ padding: 2px;
+}
+ul.ui-autocomplete li.ui-state-focus {
+ font-weight: normal;
+ color: #7e0079;
+ background-color: inherit;
+ border: 1px solid #7e0079;
+}
+</STYLE>
+<SCRIPT TYPE="text/javascript">
+$().ready(function() {
+ $('input.taxproduct_desc').autocomplete({
+ source: '<% $fsurl %>misc/taxproduct.cgi',
+ minLength: 3,
+ autoFocus: true,
+ response: function( event, ui ) {
+ // if there's only one choice (user entered an exact taxproduct) then
+ // select it
+ if ( ui.content.length == 1 ) {
+ var input_taxproductnum = $(this).siblings('.taxproductnum')
+ var item = ui.content[0];
+ $(this).val(item.label);
+ input_taxproductnum.val(item.value);
+ }
+ },
+ focus: function( event, ui ) {
+ return false;
+ },
+ select: function( event, ui ) {
+ // find the hidden input for the taxproductnum
+ var input_taxproductnum = $(this).siblings('.taxproductnum')
+ if ( ui.item ) {
+ $(this).val(ui.item.label);
+ input_taxproductnum.val(ui.item.value);
+ return false; // don't store item.value in this input
+ } else {
+ input_taxproductnum.val('');
+ }
+ },
+ change: function( event, ui ) {
+ var input_taxproductnum = $(this).siblings('.taxproductnum')
+ if ( $(this).val() == '' ) {
+ input_taxproductnum.val('');
+ }
+ }
+ });
+});
+</SCRIPT>
+% }
+<% $opt{'prefix'} %>
+<INPUT NAME = "<% $name %>"
+ ID = "<% $name %>"
+ TYPE = "hidden"
+ VALUE = "<% $value |h %>"
+ CLASS = "taxproductnum"
+>
+<INPUT NAME = "<% $name %>_description"
+ ID = "<% $name %>_description"
+ TYPE = "text"
+ VALUE = "<% $description %>"
+ SIZE = "50"
+ CLASS = "taxproduct_desc"
+>
+<BUTTON STYLE="padding: 0" onclick="<% $onclick %>">...</BUTTON>
+<% $opt{'postfix'} %>
+<%shared>
+my $init = 0;
+</%shared>
<%init>
my %opt = @_;
+my $name = $opt{element_name} || $opt{field} || 'taxproductnum';
+my $value = length($opt{curr_value}) ? $opt{curr_value} : $opt{value};
+my $description = $opt{'taxproduct_description'};
+
+unless ( $description || ! $value ) {
+ my $part_pkg_taxproduct =
+ qsearchs( 'part_pkg_taxproduct', { 'taxproductnum'=> $value } );
+ $description = $part_pkg_taxproduct->taxproduct . ' ' .
+ $part_pkg_taxproduct->description
+ if $part_pkg_taxproduct;
+}
-$opt{'taxproduct_description'} ||= $opt{'object'}->taxproduct_description
- if $opt{'object'};
+my $conf = FS::Conf->new;
+my $vendor = lc($conf->config('tax_data_vendor'));
+my $onclick = $opt{onclick} ||
+ "overlib( OLiframeContent('${p}/browse/part_pkg_taxproduct/$vendor.html?_type=select&id=${name}&taxproductnum='+document.getElementById('${name}').value, 1000, 400, 'tax_product_popup'), CAPTION, 'Select product', STICKY, AUTOSTATUSCAP, MIDX, 0, MIDY, 0, DRAGGABLE, CLOSECLICK); return false;";
</%init>