Add new "v3" grids, refactor all views to use them
or at least that's the idea..hopefully we caught them all
This commit is contained in:
parent
f244c2934b
commit
5b1ae27a10
71 changed files with 2679 additions and 2030 deletions
|
@ -36,7 +36,7 @@ import formalchemy as fa
|
|||
from pyramid import httpexceptions
|
||||
|
||||
from tailbone import forms
|
||||
from tailbone.views.batch import BatchMasterView
|
||||
from tailbone.views.batch import BatchMasterView2 as BatchMasterView
|
||||
|
||||
|
||||
class PurchasingBatchView(BatchMasterView):
|
||||
|
@ -47,6 +47,34 @@ class PurchasingBatchView(BatchMasterView):
|
|||
model_row_class = model.PurchaseBatchRow
|
||||
default_handler_spec = 'rattail.batch.purchase:PurchaseBatchHandler'
|
||||
|
||||
grid_columns = [
|
||||
'id',
|
||||
'vendor',
|
||||
'department',
|
||||
'buyer',
|
||||
'date_ordered',
|
||||
'created',
|
||||
'created_by',
|
||||
'executed',
|
||||
]
|
||||
|
||||
# row_grid_columns = [
|
||||
# 'sequence',
|
||||
# 'upc',
|
||||
# # 'item_id',
|
||||
# 'brand_name',
|
||||
# 'description',
|
||||
# 'size',
|
||||
# 'cases_ordered',
|
||||
# 'units_ordered',
|
||||
# 'cases_received',
|
||||
# 'units_received',
|
||||
# 'po_total',
|
||||
# 'invoice_total',
|
||||
# 'credits',
|
||||
# 'status_code',
|
||||
# ]
|
||||
|
||||
@property
|
||||
def batch_mode(self):
|
||||
raise NotImplementedError("Please define `batch_mode` for your purchasing batch view")
|
||||
|
@ -55,9 +83,8 @@ class PurchasingBatchView(BatchMasterView):
|
|||
return session.query(model.PurchaseBatch)\
|
||||
.filter(model.PurchaseBatch.mode == self.batch_mode)
|
||||
|
||||
def _preconfigure_grid(self, g):
|
||||
super(PurchasingBatchView, self)._preconfigure_grid(g)
|
||||
del g.filters['mode']
|
||||
def configure_grid(self, g):
|
||||
super(PurchasingBatchView, self).configure_grid(g)
|
||||
|
||||
g.joiners['vendor'] = lambda q: q.join(model.Vendor)
|
||||
g.filters['vendor'] = g.make_filter('vendor', model.Vendor.name,
|
||||
|
@ -77,22 +104,8 @@ class PurchasingBatchView(BatchMasterView):
|
|||
g.filters['complete'].default_active = True
|
||||
g.filters['complete'].default_verb = 'is_true'
|
||||
|
||||
g.date_ordered.set(label="Ordered")
|
||||
g.date_received.set(label="Received")
|
||||
|
||||
def configure_grid(self, g):
|
||||
g.configure(
|
||||
include=[
|
||||
g.id,
|
||||
g.vendor,
|
||||
g.department,
|
||||
g.buyer,
|
||||
g.date_ordered,
|
||||
g.created,
|
||||
g.created_by,
|
||||
g.executed,
|
||||
],
|
||||
readonly=True)
|
||||
g.set_label('date_ordered', "Ordered")
|
||||
g.set_label('date_received', "Received")
|
||||
|
||||
# def make_form(self, batch, **kwargs):
|
||||
# if self.creating:
|
||||
|
@ -299,65 +312,36 @@ class PurchasingBatchView(BatchMasterView):
|
|||
# query = super(PurchasingBatchView, self).get_row_data(batch)
|
||||
# return query.options(orm.joinedload(model.PurchaseBatchRow.credits))
|
||||
|
||||
def _preconfigure_row_grid(self, g):
|
||||
super(PurchasingBatchView, self)._preconfigure_row_grid(g)
|
||||
|
||||
g.filters['upc'].label = "UPC"
|
||||
g.filters['brand_name'].label = "Brand"
|
||||
|
||||
g.upc.set(label="UPC")
|
||||
g.brand_name.set(label="Brand")
|
||||
g.cases_ordered.set(label="Cases Ord.", renderer=forms.renderers.QuantityFieldRenderer)
|
||||
g.units_ordered.set(label="Units Ord.", renderer=forms.renderers.QuantityFieldRenderer)
|
||||
g.cases_received.set(label="Cases Rec.", renderer=forms.renderers.QuantityFieldRenderer)
|
||||
g.units_received.set(label="Units Rec.", renderer=forms.renderers.QuantityFieldRenderer)
|
||||
g.po_total.set(label="Total", renderer=forms.renderers.CurrencyFieldRenderer)
|
||||
g.invoice_total.set(label="Total", renderer=forms.renderers.CurrencyFieldRenderer)
|
||||
g.append(fa.Field('has_credits', type=fa.types.Boolean, label="Credits?",
|
||||
value=lambda row: bool(row.credits)))
|
||||
|
||||
def configure_row_grid(self, g):
|
||||
batch = self.get_instance()
|
||||
super(PurchasingBatchView, self).configure_row_grid(g)
|
||||
|
||||
g.configure(
|
||||
include=[
|
||||
g.sequence,
|
||||
g.upc,
|
||||
# g.item_id,
|
||||
g.brand_name,
|
||||
g.description,
|
||||
g.size,
|
||||
g.cases_ordered,
|
||||
g.units_ordered,
|
||||
g.cases_received,
|
||||
g.units_received,
|
||||
g.po_total,
|
||||
g.invoice_total,
|
||||
g.has_credits,
|
||||
g.status_code,
|
||||
],
|
||||
readonly=True)
|
||||
g.set_type('upc', 'gpc')
|
||||
g.set_type('cases_ordered', 'quantity')
|
||||
g.set_type('units_ordered', 'quantity')
|
||||
g.set_type('cases_received', 'quantity')
|
||||
g.set_type('units_received', 'quantity')
|
||||
g.set_type('po_total', 'currency')
|
||||
g.set_type('invoice_total', 'currency')
|
||||
g.set_type('credits', 'boolean')
|
||||
|
||||
if batch.mode == self.enum.PURCHASE_BATCH_MODE_ORDERING:
|
||||
del g.cases_received
|
||||
del g.units_received
|
||||
del g.has_credits
|
||||
del g.invoice_total
|
||||
elif batch.mode in (self.enum.PURCHASE_BATCH_MODE_RECEIVING,
|
||||
self.enum.PURCHASE_BATCH_MODE_COSTING):
|
||||
del g.po_total
|
||||
g.set_label('upc', "UPC")
|
||||
g.set_label('brand_name', "Brand")
|
||||
g.set_label('cases_ordered', "Cases Ord.")
|
||||
g.set_label('units_ordered', "Units Ord.")
|
||||
g.set_label('cases_received', "Cases Rec.")
|
||||
g.set_label('units_received', "Units Rec.")
|
||||
g.set_label('po_total', "Total")
|
||||
g.set_label('invoice_total', "Total")
|
||||
g.set_label('credits', "Credits?")
|
||||
|
||||
def make_row_grid_tools(self, batch):
|
||||
return self.make_default_row_grid_tools(batch)
|
||||
|
||||
def row_grid_row_attrs(self, row, i):
|
||||
attrs = {}
|
||||
def row_grid_extra_class(self, row, i):
|
||||
if row.status_code == row.STATUS_PRODUCT_NOT_FOUND:
|
||||
attrs['class_'] = 'warning'
|
||||
elif row.status_code in (row.STATUS_INCOMPLETE,
|
||||
row.STATUS_ORDERED_RECEIVED_DIFFER):
|
||||
attrs['class_'] = 'notice'
|
||||
return attrs
|
||||
return 'warning'
|
||||
if row.status_code in (row.STATUS_INCOMPLETE, row.STATUS_ORDERED_RECEIVED_DIFFER):
|
||||
return 'notice'
|
||||
|
||||
def _preconfigure_row_fieldset(self, fs):
|
||||
super(PurchasingBatchView, self)._preconfigure_row_fieldset(fs)
|
||||
|
|
|
@ -51,6 +51,23 @@ class OrderingBatchView(PurchasingBatchView):
|
|||
model_title = "Ordering Batch"
|
||||
model_title_plural = "Ordering Batches"
|
||||
|
||||
row_grid_columns = [
|
||||
'sequence',
|
||||
'upc',
|
||||
# 'item_id',
|
||||
'brand_name',
|
||||
'description',
|
||||
'size',
|
||||
'cases_ordered',
|
||||
'units_ordered',
|
||||
# 'cases_received',
|
||||
# 'units_received',
|
||||
'po_total',
|
||||
# 'invoice_total',
|
||||
# 'credits',
|
||||
'status_code',
|
||||
]
|
||||
|
||||
order_form_header_columns = [
|
||||
"UPC",
|
||||
"Brand",
|
||||
|
|
|
@ -39,7 +39,7 @@ import formalchemy as fa
|
|||
import formencode as fe
|
||||
from webhelpers2.html import tags
|
||||
|
||||
from tailbone import forms, newgrids as grids
|
||||
from tailbone import forms, grids3 as grids
|
||||
from tailbone.views.purchasing import PurchasingBatchView
|
||||
|
||||
|
||||
|
@ -93,10 +93,36 @@ class ReceivingBatchView(PurchasingBatchView):
|
|||
mobile_creatable = True
|
||||
mobile_rows_filterable = True
|
||||
|
||||
row_grid_columns = [
|
||||
'sequence',
|
||||
'upc',
|
||||
# 'item_id',
|
||||
'brand_name',
|
||||
'description',
|
||||
'size',
|
||||
'cases_ordered',
|
||||
'units_ordered',
|
||||
'cases_received',
|
||||
'units_received',
|
||||
# 'po_total',
|
||||
'invoice_total',
|
||||
'credits',
|
||||
'status_code',
|
||||
]
|
||||
|
||||
@property
|
||||
def batch_mode(self):
|
||||
return self.enum.PURCHASE_BATCH_MODE_RECEIVING
|
||||
|
||||
def render_mobile_listitem(self, batch, i):
|
||||
title = "({}) {} for ${:0,.2f} - {}, {}".format(
|
||||
batch.id_str,
|
||||
batch.vendor,
|
||||
batch.po_total or 0,
|
||||
batch.department,
|
||||
batch.created_by)
|
||||
return title
|
||||
|
||||
def make_mobile_row_filters(self):
|
||||
"""
|
||||
Returns a set of filters for the mobile row grid.
|
||||
|
@ -158,10 +184,6 @@ class ReceivingBatchView(PurchasingBatchView):
|
|||
kwargs['sms_transaction_number'] = batch.sms_transaction_number
|
||||
return kwargs
|
||||
|
||||
def configure_mobile_grid(self, g):
|
||||
super(ReceivingBatchView, self).configure_mobile_grid(g)
|
||||
g.listitem.set(renderer=ReceivingBatchRenderer)
|
||||
|
||||
def configure_mobile_fieldset(self, fs):
|
||||
fs.configure(include=[
|
||||
fs.vendor.with_renderer(fa.TextFieldRenderer),
|
||||
|
@ -178,13 +200,9 @@ class ReceivingBatchView(PurchasingBatchView):
|
|||
else:
|
||||
del fs.complete
|
||||
|
||||
def render_mobile_row_listitem(self, row, **kwargs):
|
||||
if row is None:
|
||||
return ''
|
||||
def render_mobile_row_listitem(self, row, i):
|
||||
description = row.product.full_description if row.product else row.description
|
||||
title = "({}) {}".format(row.upc.pretty(), description)
|
||||
url = self.request.route_url('mobile.receiving.rows.view', uuid=row.uuid)
|
||||
return tags.link_to(title, url)
|
||||
return "({}) {}".format(row.upc.pretty(), description)
|
||||
|
||||
# TODO: this view can create new rows, with only a GET query. that should
|
||||
# probably be changed to require POST; for now we just require the "create
|
||||
|
@ -344,20 +362,6 @@ class ReceivingBatchView(PurchasingBatchView):
|
|||
cls._defaults(config)
|
||||
|
||||
|
||||
class ReceivingBatchRenderer(fa.FieldRenderer):
|
||||
|
||||
def render_readonly(self, **kwargs):
|
||||
batch = self.raw_value
|
||||
title = "({}) {} for ${:0,.2f} - {}, {}".format(
|
||||
batch.id_str,
|
||||
batch.vendor,
|
||||
batch.po_total or 0,
|
||||
batch.department,
|
||||
batch.created_by)
|
||||
url = self.request.route_url('mobile.receiving.view', uuid=batch.uuid)
|
||||
return tags.link_to(title, url)
|
||||
|
||||
|
||||
class ValidBatchRow(forms.validators.ModelValidator):
|
||||
model_class = model.PurchaseBatchRow
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue