Add products autocomplete view.
This commit is contained in:
parent
e0cb47d03a
commit
d0a977d64b
|
@ -2,7 +2,7 @@
|
||||||
################################################################################
|
################################################################################
|
||||||
#
|
#
|
||||||
# Rattail -- Retail Software Framework
|
# Rattail -- Retail Software Framework
|
||||||
# Copyright © 2010-2014 Lance Edgar
|
# Copyright © 2010-2015 Lance Edgar
|
||||||
#
|
#
|
||||||
# This file is part of Rattail.
|
# This file is part of Rattail.
|
||||||
#
|
#
|
||||||
|
@ -29,6 +29,7 @@ from __future__ import unicode_literals
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
|
|
||||||
|
from sqlalchemy import orm
|
||||||
from sqlalchemy import and_
|
from sqlalchemy import and_
|
||||||
from sqlalchemy.orm import joinedload, aliased
|
from sqlalchemy.orm import joinedload, aliased
|
||||||
|
|
||||||
|
@ -52,7 +53,7 @@ from rattail.db.api import get_product_by_upc
|
||||||
from rattail.db.util import configure_session
|
from rattail.db.util import configure_session
|
||||||
from rattail.pod import get_image_url, get_image_path
|
from rattail.pod import get_image_url, get_image_path
|
||||||
|
|
||||||
from tailbone.views import SearchableAlchemyGridView, CrudView
|
from tailbone.views import SearchableAlchemyGridView, CrudView, AutocompleteView
|
||||||
from tailbone.views.continuum import VersionView, version_defaults
|
from tailbone.views.continuum import VersionView, version_defaults
|
||||||
from tailbone.forms import EnumFieldRenderer, DateTimeFieldRenderer
|
from tailbone.forms import EnumFieldRenderer, DateTimeFieldRenderer
|
||||||
from tailbone.db import Session
|
from tailbone.db import Session
|
||||||
|
@ -344,6 +345,27 @@ class ProductVersionView(VersionView):
|
||||||
return super(ProductVersionView, self).details()
|
return super(ProductVersionView, self).details()
|
||||||
|
|
||||||
|
|
||||||
|
class ProductsAutocomplete(AutocompleteView):
|
||||||
|
"""
|
||||||
|
Autocomplete view for products.
|
||||||
|
"""
|
||||||
|
mapped_class = model.Product
|
||||||
|
fieldname = 'description'
|
||||||
|
|
||||||
|
def query(self, term):
|
||||||
|
q = Session.query(model.Product).outerjoin(model.Brand)
|
||||||
|
q = q.filter(or_(
|
||||||
|
model.Brand.name.ilike('%{0}%'.format(term)),
|
||||||
|
model.Product.description.ilike('%{0}%'.format(term))))
|
||||||
|
if not self.request.has_perm('products.view_deleted'):
|
||||||
|
q = q.filter(model.Product.deleted == False)
|
||||||
|
q = q.order_by(model.Brand.name, model.Product.description)
|
||||||
|
q = q.options(orm.joinedload(model.Product.brand))
|
||||||
|
return q
|
||||||
|
|
||||||
|
def display(self, product):
|
||||||
|
return product.full_description
|
||||||
|
|
||||||
|
|
||||||
def products_search(request):
|
def products_search(request):
|
||||||
"""
|
"""
|
||||||
|
@ -470,6 +492,7 @@ class CreateProductsBatch(ProductsGrid):
|
||||||
|
|
||||||
def add_routes(config):
|
def add_routes(config):
|
||||||
config.add_route('products', '/products')
|
config.add_route('products', '/products')
|
||||||
|
config.add_route('products.autocomplete', '/products/autocomplete')
|
||||||
config.add_route('products.search', '/products/search')
|
config.add_route('products.search', '/products/search')
|
||||||
config.add_route('products.print_labels', '/products/labels')
|
config.add_route('products.print_labels', '/products/labels')
|
||||||
config.add_route('products.create_batch', '/products/batch')
|
config.add_route('products.create_batch', '/products/batch')
|
||||||
|
@ -485,6 +508,11 @@ def includeme(config):
|
||||||
config.add_view(ProductsGrid, route_name='products',
|
config.add_view(ProductsGrid, route_name='products',
|
||||||
renderer='/products/index.mako',
|
renderer='/products/index.mako',
|
||||||
permission='products.list')
|
permission='products.list')
|
||||||
|
|
||||||
|
config.add_view(ProductsAutocomplete, route_name='products.autocomplete',
|
||||||
|
renderer='json',
|
||||||
|
permission='products.list')
|
||||||
|
|
||||||
config.add_view(print_labels, route_name='products.print_labels',
|
config.add_view(print_labels, route_name='products.print_labels',
|
||||||
renderer='json', permission='products.print_labels')
|
renderer='json', permission='products.print_labels')
|
||||||
config.add_view(CreateProductsBatch, route_name='products.create_batch',
|
config.add_view(CreateProductsBatch, route_name='products.create_batch',
|
||||||
|
|
Loading…
Reference in a new issue