Refactor several more straggler views to use master3

This commit is contained in:
Lance Edgar 2018-01-08 20:41:31 -06:00
parent 3097f46aa1
commit ce0195bd51
10 changed files with 187 additions and 148 deletions

View file

@ -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)\

View file

@ -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):