Add mechanism for user to bulk-change status for purchase credits
trying to stay pretty generic yet...
This commit is contained in:
parent
0516d44842
commit
ec4e52fa1a
2 changed files with 163 additions and 1 deletions
|
@ -28,7 +28,9 @@ from __future__ import unicode_literals, absolute_import
|
|||
|
||||
from rattail.db import model
|
||||
|
||||
from tailbone import forms
|
||||
from webhelpers2.html import tags
|
||||
|
||||
from tailbone import forms, grids
|
||||
from tailbone.views import MasterView2 as MasterView
|
||||
|
||||
|
||||
|
@ -41,6 +43,7 @@ class PurchaseCreditView(MasterView):
|
|||
url_prefix = '/purchases/credits'
|
||||
creatable = False
|
||||
editable = False
|
||||
checkboxes = True
|
||||
|
||||
grid_columns = [
|
||||
'vendor',
|
||||
|
@ -67,6 +70,12 @@ class PurchaseCreditView(MasterView):
|
|||
g.default_sortkey = 'date_received'
|
||||
g.default_sortdir = 'desc'
|
||||
|
||||
g.filters['status'].set_value_renderer(grids.filters.EnumValueRenderer(self.enum.PURCHASE_CREDIT_STATUS))
|
||||
g.filters['status'].default_active = True
|
||||
g.filters['status'].default_verb = 'not_equal'
|
||||
g.filters['status'].default_value = self.enum.PURCHASE_CREDIT_STATUS_SATISFIED
|
||||
|
||||
g.set_enum('status', self.enum.PURCHASE_CREDIT_STATUS)
|
||||
# g.set_type('upc', 'gpc')
|
||||
g.set_type('cases_shorted', 'quantity')
|
||||
g.set_type('units_shorted', 'quantity')
|
||||
|
@ -80,6 +89,62 @@ class PurchaseCreditView(MasterView):
|
|||
g.set_label('mispick_upc', "Mispick UPC")
|
||||
g.set_label('date_received', "Date")
|
||||
|
||||
def change_status(self):
|
||||
if self.request.method != 'POST':
|
||||
self.request.session.flash("Sorry, you must POST to change credit status", 'error')
|
||||
return self.redirect(self.get_index_url())
|
||||
|
||||
status = self.request.POST.get('status', '')
|
||||
if status.isdigit():
|
||||
status = int(status)
|
||||
else:
|
||||
self.request.session.flash("Received invalid status: {}".format(status), 'error')
|
||||
return self.redirect(self.get_index_url())
|
||||
|
||||
credits_ = []
|
||||
for uuid in self.request.POST.get('uuids', '').split(','):
|
||||
uuid = uuid.strip()
|
||||
if uuid:
|
||||
credit = self.Session.query(model.PurchaseCredit).get(uuid)
|
||||
if credit:
|
||||
credits_.append(credit)
|
||||
if not credits_:
|
||||
self.request.session.flash("Received zero valid credits", 'error')
|
||||
return self.redirect(self.get_index_url())
|
||||
|
||||
# okay, really change status
|
||||
for credit in credits_:
|
||||
credit.status = status
|
||||
|
||||
self.request.session.flash("Changed status for {} credits".format(len(credits_)))
|
||||
return self.redirect(self.get_index_url())
|
||||
|
||||
def template_kwargs_index(self, **kwargs):
|
||||
kwargs['status_options'] = self.status_options()
|
||||
return kwargs
|
||||
|
||||
def status_options(self):
|
||||
options = []
|
||||
for value in sorted(self.enum.PURCHASE_CREDIT_STATUS):
|
||||
options.append(tags.Option(self.enum.PURCHASE_CREDIT_STATUS[value], value))
|
||||
return options
|
||||
|
||||
@classmethod
|
||||
def defaults(cls, config):
|
||||
route_prefix = cls.get_route_prefix()
|
||||
url_prefix = cls.get_url_prefix()
|
||||
permission_prefix = cls.get_permission_prefix()
|
||||
model_title_plural = cls.get_model_title_plural()
|
||||
|
||||
# change status
|
||||
config.add_tailbone_permission(permission_prefix, '{}.change_status'.format(permission_prefix),
|
||||
"Change status for {}".format(model_title_plural))
|
||||
config.add_route('{}.change_status'.format(route_prefix), '{}/change-status'.format(url_prefix))
|
||||
config.add_view(cls, attr='change_status', route_name='{}.change_status'.format(route_prefix),
|
||||
permission='{}.change_status'.format(permission_prefix))
|
||||
|
||||
cls._defaults(config)
|
||||
|
||||
|
||||
def includeme(config):
|
||||
PurchaseCreditView.defaults(config)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue