Refactor several more straggler views to use master3
This commit is contained in:
parent
3097f46aa1
commit
ce0195bd51
10 changed files with 187 additions and 148 deletions
|
@ -2,7 +2,7 @@
|
|||
################################################################################
|
||||
#
|
||||
# Rattail -- Retail Software Framework
|
||||
# Copyright © 2010-2017 Lance Edgar
|
||||
# Copyright © 2010-2018 Lance Edgar
|
||||
#
|
||||
# This file is part of Rattail.
|
||||
#
|
||||
|
@ -33,10 +33,7 @@ from sqlalchemy import orm
|
|||
from rattail.db import model
|
||||
from rattail.time import localtime
|
||||
|
||||
import formalchemy as fa
|
||||
|
||||
from tailbone import forms
|
||||
from tailbone.views import MasterView2 as MasterView
|
||||
from tailbone.views import MasterView3 as MasterView
|
||||
from tailbone.util import raw_datetime
|
||||
|
||||
|
||||
|
@ -78,6 +75,21 @@ class CustomerOrderItemsView(MasterView):
|
|||
'note',
|
||||
]
|
||||
|
||||
form_fields = [
|
||||
'person',
|
||||
'product',
|
||||
'product_brand',
|
||||
'product_description',
|
||||
'product_size',
|
||||
'case_quantity',
|
||||
'cases_ordered',
|
||||
'units_ordered',
|
||||
'unit_price',
|
||||
'total_price',
|
||||
'paid_amount',
|
||||
'status_code',
|
||||
]
|
||||
|
||||
def query(self, session):
|
||||
return session.query(model.CustomerOrderItem)\
|
||||
.join(model.CustomerOrder)\
|
||||
|
@ -118,36 +130,49 @@ class CustomerOrderItemsView(MasterView):
|
|||
value = localtime(self.rattail_config, item.order.created, from_utc=True)
|
||||
return raw_datetime(self.rattail_config, value)
|
||||
|
||||
def _preconfigure_fieldset(self, fs):
|
||||
fs.order.set(renderer=forms.renderers.CustomerOrderFieldRenderer)
|
||||
fs.product.set(renderer=forms.renderers.ProductFieldRenderer)
|
||||
fs.product_unit_of_measure.set(renderer=forms.renderers.EnumFieldRenderer(self.enum.UNIT_OF_MEASURE))
|
||||
fs.case_quantity.set(renderer=forms.renderers.QuantityFieldRenderer)
|
||||
fs.cases_ordered.set(renderer=forms.renderers.QuantityFieldRenderer)
|
||||
fs.units_ordered.set(renderer=forms.renderers.QuantityFieldRenderer)
|
||||
fs.unit_price.set(renderer=forms.renderers.CurrencyFieldRenderer)
|
||||
fs.total_price.set(renderer=forms.renderers.CurrencyFieldRenderer)
|
||||
fs.paid_amount.set(renderer=forms.renderers.CurrencyFieldRenderer)
|
||||
fs.status_code.set(label="Status")
|
||||
fs.append(fa.Field('person', value=lambda i: i.order.person,
|
||||
renderer=forms.renderers.PersonFieldRenderer))
|
||||
def configure_form(self, f):
|
||||
super(CustomerOrderItemsView, self).configure_form(f)
|
||||
|
||||
def configure_fieldset(self, fs):
|
||||
fs.configure(
|
||||
include=[
|
||||
fs.person,
|
||||
fs.product,
|
||||
fs.product_brand,
|
||||
fs.product_description,
|
||||
fs.product_size,
|
||||
fs.case_quantity,
|
||||
fs.cases_ordered,
|
||||
fs.units_ordered,
|
||||
fs.unit_price,
|
||||
fs.total_price,
|
||||
fs.paid_amount,
|
||||
fs.status_code,
|
||||
])
|
||||
# order
|
||||
f.set_renderer('order', self.render_order)
|
||||
|
||||
# product
|
||||
f.set_renderer('product', self.render_product)
|
||||
|
||||
# product uom
|
||||
f.set_enum('product_unit_of_measure', self.enum.UNIT_OF_MEASURE)
|
||||
|
||||
# quantity fields
|
||||
f.set_type('case_quantity', 'quantity')
|
||||
f.set_type('cases_ordered', 'quantity')
|
||||
f.set_type('units_ordered', 'quantity')
|
||||
|
||||
# currency fields
|
||||
f.set_type('unit_price', 'currency')
|
||||
f.set_type('total_price', 'currency')
|
||||
f.set_type('paid_amount', 'currency')
|
||||
|
||||
# person
|
||||
f.set_renderer('person', self.render_person)
|
||||
|
||||
# label overrides
|
||||
f.set_label('status_code', "Status")
|
||||
|
||||
def render_order(self, item, field):
|
||||
order = item.order
|
||||
if not order:
|
||||
return ""
|
||||
text = six.text_type(order)
|
||||
url = self.request.route_url('custorders.view', uuid=order.uuid)
|
||||
return tags.link_to(text, url)
|
||||
|
||||
def render_product(self, order, field):
|
||||
product = order.product
|
||||
if not product:
|
||||
return ""
|
||||
text = six.text_type(product)
|
||||
url = self.request.route_url('products.view', uuid=product.uuid)
|
||||
return tags.link_to(text, url)
|
||||
|
||||
def get_row_data(self, item):
|
||||
return self.Session.query(model.CustomerOrderItemEvent)\
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
################################################################################
|
||||
#
|
||||
# Rattail -- Retail Software Framework
|
||||
# Copyright © 2010-2017 Lance Edgar
|
||||
# Copyright © 2010-2018 Lance Edgar
|
||||
#
|
||||
# This file is part of Rattail.
|
||||
#
|
||||
|
@ -26,13 +26,15 @@ Customer Order Views
|
|||
|
||||
from __future__ import unicode_literals, absolute_import
|
||||
|
||||
import six
|
||||
from sqlalchemy import orm
|
||||
|
||||
from rattail.db import model
|
||||
|
||||
from tailbone import forms
|
||||
from webhelpers2.html import tags
|
||||
|
||||
from tailbone.db import Session
|
||||
from tailbone.views import MasterView2 as MasterView
|
||||
from tailbone.views import MasterView as MasterView
|
||||
|
||||
|
||||
class CustomerOrdersView(MasterView):
|
||||
|
@ -53,6 +55,14 @@ class CustomerOrdersView(MasterView):
|
|||
'status_code',
|
||||
]
|
||||
|
||||
form_fields = [
|
||||
'id',
|
||||
'customer',
|
||||
'person',
|
||||
'created',
|
||||
'status_code',
|
||||
]
|
||||
|
||||
def query(self, session):
|
||||
return session.query(model.CustomerOrder)\
|
||||
.options(orm.joinedload(model.CustomerOrder.customer))
|
||||
|
@ -81,22 +91,29 @@ class CustomerOrdersView(MasterView):
|
|||
g.set_label('status_code', "Status")
|
||||
g.set_label('id', "ID")
|
||||
|
||||
def _preconfigure_fieldset(self, fs):
|
||||
fs.customer.set(options=[])
|
||||
fs.id.set(label="ID", readonly=True)
|
||||
fs.person.set(renderer=forms.renderers.PersonFieldRenderer)
|
||||
fs.created.set(readonly=True)
|
||||
fs.status_code.set(label="Status")
|
||||
def configure_form(self, f):
|
||||
super(CustomerOrdersView, self).configure_form(f)
|
||||
|
||||
def configure_fieldset(self, fs):
|
||||
fs.configure(
|
||||
include=[
|
||||
fs.id,
|
||||
fs.customer,
|
||||
fs.person,
|
||||
fs.created,
|
||||
fs.status_code,
|
||||
])
|
||||
# id
|
||||
f.set_readonly('id')
|
||||
f.set_label('id', "ID")
|
||||
|
||||
# person
|
||||
f.set_renderer('person', self.render_person)
|
||||
|
||||
# created
|
||||
f.set_readonly('created')
|
||||
|
||||
# label overrides
|
||||
f.set_label('status_code', "Status")
|
||||
|
||||
def render_person(self, order, field):
|
||||
person = order.person
|
||||
if not person:
|
||||
return ""
|
||||
text = six.text_type(person)
|
||||
url = self.request.route_url('people.view', uuid=person.uuid)
|
||||
return tags.link_to(text, url)
|
||||
|
||||
|
||||
def includeme(config):
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue