Allow vendor field to be dropdown, for mobile ordering/receiving

based on config.  useful for apps which have very few vendors
This commit is contained in:
Lance Edgar 2019-02-19 21:11:49 -06:00
parent 19080924d5
commit 145e7f5529
5 changed files with 68 additions and 17 deletions

View file

@ -15,6 +15,13 @@ $(document).on('autocompleteitemselected', 'form[name="new-receiving-batch"] .ve
$(document).on('autocompleteitemcleared', 'form[name="new-receiving-batch"] .vendor', function(event) { $(document).on('autocompleteitemcleared', 'form[name="new-receiving-batch"] .vendor', function(event) {
$('#new-receiving-types').hide(); $('#new-receiving-types').hide();
}); });
$(document).on('change', 'form[name="new-receiving-batch"] select[name="vendor"]', function(event) {
if ($(this).val()) {
$('#new-receiving-types').show();
} else {
$('#new-receiving-types').hide();
}
});
// submit new receiving batch form when user clicks "Receive" type button // submit new receiving batch form when user clicks "Receive" type button

View file

@ -9,12 +9,21 @@ ${h.form(request.current_route_url(), class_='ui-filterable', name='new-purchasi
${h.csrf_token(request)} ${h.csrf_token(request)}
<div class="field-wrapper vendor"> <div class="field-wrapper vendor">
% if vendor_use_autocomplete:
<div class="field autocomplete" data-url="${url('vendors.autocomplete')}"> <div class="field autocomplete" data-url="${url('vendors.autocomplete')}">
${h.hidden('vendor')} ${h.hidden('vendor')}
${h.text('new-purchasing-batch-vendor-text', placeholder="Vendor name", autocomplete='off', data_type='search')} ${h.text('new-purchasing-batch-vendor-text', placeholder="Vendor name", autocomplete='off', data_type='search')}
<ul data-role="listview" data-inset="true" data-filter="true" data-input="#new-purchasing-batch-vendor-text"></ul> <ul data-role="listview" data-inset="true" data-filter="true" data-input="#new-purchasing-batch-vendor-text"></ul>
<button type="button" style="display: none;">Change Vendor</button> <button type="button" style="display: none;">Change Vendor</button>
</div> </div>
% else:
<div class="field-row">
<label for="vendor">Vendor</label>
<div class="field">
${h.select('vendor', None, vendor_options)}
</div>
</div>
% endif
</div> </div>
<br /> <br />

View file

@ -10,6 +10,7 @@ ${h.csrf_token(request)}
% if phase == 1: % if phase == 1:
% if vendor_use_autocomplete:
<div class="field-wrapper vendor"> <div class="field-wrapper vendor">
<div class="field autocomplete" data-url="${url('vendors.autocomplete')}"> <div class="field autocomplete" data-url="${url('vendors.autocomplete')}">
${h.hidden('vendor')} ${h.hidden('vendor')}
@ -18,6 +19,14 @@ ${h.csrf_token(request)}
<button type="button" style="display: none;">Change Vendor</button> <button type="button" style="display: none;">Change Vendor</button>
</div> </div>
</div> </div>
% else:
<div class="field-row">
<label for="vendor">Vendor</label>
<div class="field">
${h.select('vendor', None, vendor_options)}
</div>
</div>
% endif
<br /> <br />

View file

@ -2,7 +2,7 @@
################################################################################ ################################################################################
# #
# Rattail -- Retail Software Framework # Rattail -- Retail Software Framework
# Copyright © 2010-2017 Lance Edgar # Copyright © 2010-2019 Lance Edgar
# #
# This file is part of Rattail. # This file is part of Rattail.
# #
@ -36,6 +36,8 @@ from rattail.db import model, api
from rattail.core import Object from rattail.core import Object
from rattail.time import localtime from rattail.time import localtime
from webhelpers2.html import tags
from tailbone.views.purchasing import PurchasingBatchView from tailbone.views.purchasing import PurchasingBatchView
@ -317,6 +319,17 @@ class OrderingBatchView(PurchasingBatchView):
data['index_title'] = self.get_index_title() data['index_title'] = self.get_index_title()
data['index_url'] = self.get_index_url(mobile=True) data['index_url'] = self.get_index_url(mobile=True)
data['mode_title'] = self.enum.PURCHASE_BATCH_MODE[mode].capitalize() data['mode_title'] = self.enum.PURCHASE_BATCH_MODE[mode].capitalize()
data['vendor_use_autocomplete'] = self.rattail_config.getbool(
'rattail', 'vendor.use_autocomplete', default=True)
if not data['vendor_use_autocomplete']:
vendors = self.Session.query(model.Vendor)\
.order_by(model.Vendor.name)
options = [(tags.Option(vendor.name, vendor.uuid))
for vendor in vendors]
options.insert(0, tags.Option("(please choose)", ''))
data['vendor_options'] = options
return self.render_to_response('create', data, mobile=True) return self.render_to_response('create', data, mobile=True)
def configure_mobile_row_form(self, f): def configure_mobile_row_form(self, f):

View file

@ -2,7 +2,7 @@
################################################################################ ################################################################################
# #
# Rattail -- Retail Software Framework # Rattail -- Retail Software Framework
# Copyright © 2010-2018 Lance Edgar # Copyright © 2010-2019 Lance Edgar
# #
# This file is part of Rattail. # This file is part of Rattail.
# #
@ -677,10 +677,23 @@ class ReceivingBatchView(PurchasingBatchView):
data['dform'] = form.make_deform_form() data['dform'] = form.make_deform_form()
data['mode_title'] = self.enum.PURCHASE_BATCH_MODE[mode].capitalize() data['mode_title'] = self.enum.PURCHASE_BATCH_MODE[mode].capitalize()
data['phase'] = phase data['phase'] = phase
if phase == 2:
if phase == 1:
data['vendor_use_autocomplete'] = self.rattail_config.getbool(
'rattail', 'vendor.use_autocomplete', default=True)
if not data['vendor_use_autocomplete']:
vendors = self.Session.query(model.Vendor)\
.order_by(model.Vendor.name)
options = [(tags.Option(vendor.name, vendor.uuid))
for vendor in vendors]
options.insert(0, tags.Option("(please choose)", ''))
data['vendor_options'] = options
elif phase == 2:
purchases = self.eligible_purchases(vendor.uuid, mode=mode) purchases = self.eligible_purchases(vendor.uuid, mode=mode)
data['purchases'] = [(p['key'], p['display']) for p in purchases['purchases']] data['purchases'] = [(p['key'], p['display']) for p in purchases['purchases']]
data['purchase_order_fieldname'] = self.purchase_order_fieldname data['purchase_order_fieldname'] = self.purchase_order_fieldname
return self.render_to_response('create', data, mobile=True) return self.render_to_response('create', data, mobile=True)
def make_mobile_receiving_from_po_schema(self): def make_mobile_receiving_from_po_schema(self):