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:
Lance Edgar 2017-03-24 17:22:12 -05:00
parent e71204dcec
commit d373eb9ac1
9 changed files with 260 additions and 148 deletions

View file

@ -81,6 +81,16 @@ class PurchaseBatchView(BatchMasterView):
rows_editable = True
edit_with_rows = False
order_form_header_columns = [
"UPC",
"Brand",
"Description",
"Case",
"Vend. Code",
"Pref.",
"Unit Cost",
]
def get_instance_title(self, batch):
return '{} ({})'.format(batch.id_str, self.enum.PURCHASE_BATCH_MODE[batch.mode])
@ -133,6 +143,7 @@ class PurchaseBatchView(BatchMasterView):
def _preconfigure_fieldset(self, fs):
super(PurchaseBatchView, self)._preconfigure_fieldset(fs)
fs.mode.set(renderer=forms.renderers.EnumFieldRenderer(self.enum.PURCHASE_BATCH_MODE))
fs.store.set(renderer=forms.renderers.StoreFieldRenderer)
fs.purchase.set(renderer=forms.renderers.PurchaseFieldRenderer, options=[])
fs.vendor.set(renderer=forms.renderers.VendorFieldRenderer,
attrs={'selected': 'vendor_selected',
@ -174,6 +185,7 @@ class PurchaseBatchView(BatchMasterView):
fs.id,
fs.mode,
fs.store,
fs.buyer,
fs.vendor,
fs.department,
fs.purchase,
@ -181,7 +193,6 @@ class PurchaseBatchView(BatchMasterView):
fs.vendor_fax,
fs.vendor_contact,
fs.vendor_phone,
fs.buyer,
fs.date_ordered,
fs.date_received,
fs.po_number,
@ -333,6 +344,10 @@ class PurchaseBatchView(BatchMasterView):
'tailbone', 'purchases.order_form.vendor_cost_warning_threshold', default=699)
return kwargs
def template_kwargs_create(self, **kwargs):
kwargs['purchases_field'] = 'purchase_uuid'
return kwargs
def get_row_data(self, batch):
query = super(PurchaseBatchView, self).get_row_data(batch)
return query.options(orm.joinedload(model.PurchaseBatchRow.credits))
@ -361,6 +376,7 @@ class PurchaseBatchView(BatchMasterView):
include=[
g.sequence,
g.upc,
g.item_id,
g.brand_name,
g.description,
g.size,
@ -566,10 +582,8 @@ class PurchaseBatchView(BatchMasterView):
# organize vendor catalog costs by dept / subdept
departments = {}
costs = self.get_order_form_costs(batch.vendor)\
.order_by(model.Brand.name,
model.Product.description,
model.Product.size)
costs = self.get_order_form_costs(batch.vendor)
costs = self.sort_order_form_costs(costs)
for cost in costs:
department = cost.product.department
@ -577,7 +591,7 @@ class PurchaseBatchView(BatchMasterView):
departments.setdefault(department.uuid, department)
else:
if None not in departments:
department = Object()
department = Object(name=None, number=None)
departments[None] = department
department = departments[None]
@ -590,7 +604,7 @@ class PurchaseBatchView(BatchMasterView):
subdepartments.setdefault(subdepartment.uuid, subdepartment)
else:
if None not in subdepartments:
subdepartment = Object()
subdepartment = Object(name=None, number=None)
subdepartments[None] = subdepartment
subdepartment = subdepartments[None]
@ -620,6 +634,8 @@ class PurchaseBatchView(BatchMasterView):
'departments': departments,
'history': history,
'get_upc': lambda p: p.upc.pretty() if p.upc else '',
'header_columns': self.order_form_header_columns,
'ignore_cases': self.handler.ignore_cases,
})
def get_order_form_history(self, batch, costs, count):
@ -643,7 +659,16 @@ class PurchaseBatchView(BatchMasterView):
return Session.query(model.ProductCost)\
.join(model.Product)\
.outerjoin(model.Brand)\
.filter(model.ProductCost.vendor == vendor)
.filter(model.ProductCost.vendor == vendor)\
.options(orm.joinedload(model.ProductCost.product)\
.joinedload(model.Product.department))\
.options(orm.joinedload(model.ProductCost.product)\
.joinedload(model.Product.subdepartment))
def sort_order_form_costs(self, costs):
return costs.order_by(model.Brand.name,
model.Product.description,
model.Product.size)
def decorate_order_form_cost(self, cost):
pass

View file

@ -136,6 +136,7 @@ class PurchaseView(MasterView):
readonly=True)
def _preconfigure_fieldset(self, fs):
fs.store.set(renderer=forms.renderers.StoreFieldRenderer)
fs.vendor.set(renderer=forms.renderers.VendorFieldRenderer)
fs.department.set(renderer=forms.renderers.DepartmentFieldRenderer)
fs.status.set(renderer=forms.renderers.EnumFieldRenderer(self.enum.PURCHASE_STATUS),
@ -206,6 +207,7 @@ class PurchaseView(MasterView):
include=[
g.sequence,
g.upc,
g.item_id,
g.brand_name,
g.description,
g.size,