Broad refactor to improve customization of purchase order form etc.
* add dropdown alternative for autocomplete renderer * auto-enhance some common dropdowns * refactor new purchase batch, order form view/templates
This commit is contained in:
parent
e71204dcec
commit
d373eb9ac1
9 changed files with 260 additions and 148 deletions
|
@ -1,8 +1,8 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# -*- coding: utf-8; -*-
|
||||
################################################################################
|
||||
#
|
||||
# Rattail -- Retail Software Framework
|
||||
# Copyright © 2010-2016 Lance Edgar
|
||||
# Copyright © 2010-2017 Lance Edgar
|
||||
#
|
||||
# This file is part of Rattail.
|
||||
#
|
||||
|
@ -92,7 +92,14 @@ class AutocompleteFieldRenderer(fa.FieldRenderer):
|
|||
def service_url(self):
|
||||
return self.request.route_url(self.service_route)
|
||||
|
||||
def render(self, **kwargs):
|
||||
def render(self, options=None, **kwargs):
|
||||
if kwargs.pop('autocomplete', True):
|
||||
return self.render_autocomplete(**kwargs)
|
||||
# 'selected' is a kwarg for autocomplete template *and* select tag
|
||||
kwargs.pop('selected', None)
|
||||
return self.render_dropdown(options, **kwargs)
|
||||
|
||||
def render_autocomplete(self, **kwargs):
|
||||
kwargs.setdefault('field_name', self.name)
|
||||
kwargs.setdefault('field_value', self.field_value)
|
||||
kwargs.setdefault('field_display', self.field_display)
|
||||
|
@ -100,6 +107,22 @@ class AutocompleteFieldRenderer(fa.FieldRenderer):
|
|||
kwargs.setdefault('width', self.width)
|
||||
return render('/forms/field_autocomplete.mako', kwargs)
|
||||
|
||||
def render_dropdown(self, options, **kwargs):
|
||||
# NOTE: this logic copied from formalchemy.fields.SelectFieldRenderer.render()
|
||||
kwargs.setdefault('auto-enhance', 'true')
|
||||
if callable(options):
|
||||
L = fa_fields._normalized_options(options(self.field.parent))
|
||||
if not self.field.is_required() and not self.field.is_collection:
|
||||
L.insert(0, self.field._null_option)
|
||||
else:
|
||||
L = list(options)
|
||||
if len(L) > 0:
|
||||
if len(L[0]) == 2:
|
||||
L = [(k, self.stringify_value(v)) for k, v in L]
|
||||
else:
|
||||
L = [fa_fields._stringify(k) for k in L]
|
||||
return fa_fields.h.select(self.name, self.value, L, **kwargs)
|
||||
|
||||
def render_readonly(self, **kwargs):
|
||||
value = self.field_display
|
||||
if value is None:
|
||||
|
|
|
@ -108,6 +108,10 @@ class DepartmentFieldRenderer(SelectFieldRenderer):
|
|||
Shows the department number as well as the name.
|
||||
"""
|
||||
|
||||
def render(self, **kwargs):
|
||||
kwargs.setdefault('auto-enhance', 'true')
|
||||
return super(DepartmentFieldRenderer, self).render(**kwargs)
|
||||
|
||||
def render_readonly(self, **kwargs):
|
||||
department = self.raw_value
|
||||
if not department:
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# -*- coding: utf-8; -*-
|
||||
################################################################################
|
||||
#
|
||||
# Rattail -- Retail Software Framework
|
||||
# Copyright © 2010-2015 Lance Edgar
|
||||
# Copyright © 2010-2017 Lance Edgar
|
||||
#
|
||||
# This file is part of Rattail.
|
||||
#
|
||||
|
@ -24,9 +24,10 @@
|
|||
Store Field Renderers
|
||||
"""
|
||||
|
||||
from __future__ import unicode_literals
|
||||
from __future__ import unicode_literals, absolute_import
|
||||
|
||||
from formalchemy.fields import SelectFieldRenderer
|
||||
from webhelpers.html import tags
|
||||
|
||||
|
||||
class StoreFieldRenderer(SelectFieldRenderer):
|
||||
|
@ -34,8 +35,15 @@ class StoreFieldRenderer(SelectFieldRenderer):
|
|||
Renderer for :class:`rattail.db.model.Store` instance fields.
|
||||
"""
|
||||
|
||||
def render(self, **kwargs):
|
||||
kwargs.setdefault('auto-enhance', 'true')
|
||||
return super(StoreFieldRenderer, self).render(**kwargs)
|
||||
|
||||
def render_readonly(self, **kwargs):
|
||||
store = self.raw_value
|
||||
if not store:
|
||||
return ''
|
||||
return '{0} - {1}'.format(store.id, store.name)
|
||||
return ""
|
||||
text = "({}) {}".format(store.id, store.name)
|
||||
if kwargs.get('hyperlink', True):
|
||||
return tags.link_to(text, self.request.route_url('stores.view', uuid=store.uuid))
|
||||
return text
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# -*- coding: utf-8; -*-
|
||||
################################################################################
|
||||
#
|
||||
# Rattail -- Retail Software Framework
|
||||
# Copyright © 2010-2016 Lance Edgar
|
||||
# Copyright © 2010-2017 Lance Edgar
|
||||
#
|
||||
# This file is part of Rattail.
|
||||
#
|
||||
|
@ -41,8 +41,11 @@ class VendorFieldRenderer(AutocompleteFieldRenderer):
|
|||
def render_readonly(self, **kwargs):
|
||||
vendor = self.raw_value
|
||||
if not vendor:
|
||||
return ''
|
||||
return tags.link_to(vendor, self.request.route_url('vendors.view', uuid=vendor.uuid))
|
||||
return ""
|
||||
text = "({}) {}".format(vendor.id, vendor.name)
|
||||
if kwargs.get('hyperlink', True):
|
||||
return tags.link_to(text, self.request.route_url('vendors.view', uuid=vendor.uuid))
|
||||
return text
|
||||
|
||||
|
||||
class PurchaseFieldRenderer(SelectFieldRenderer):
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue