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
|
@ -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
|
||||
|
|
|
@ -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,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue