Add product report codes to the UI.
This commit is contained in:
parent
bdf835a4dd
commit
6943298ee0
2
setup.py
2
setup.py
|
@ -84,7 +84,7 @@ requires = [
|
|||
'pyramid_exclog', # 0.6
|
||||
'pyramid_simpleform', # 0.6.1
|
||||
'pyramid_tm', # 0.3
|
||||
'rattail[db]>=0.3.18', # 0.3.18
|
||||
u'rattail[db]>=0.3.32', # 0.3.32
|
||||
'transaction', # 1.2.0
|
||||
'waitress', # 0.8.1
|
||||
'WebHelpers', # 1.3
|
||||
|
|
13
tailbone/templates/reportcodes/crud.mako
Normal file
13
tailbone/templates/reportcodes/crud.mako
Normal file
|
@ -0,0 +1,13 @@
|
|||
## -*- coding: utf-8 -*-
|
||||
<%inherit file="/crud.mako" />
|
||||
|
||||
<%def name="context_menu_items()">
|
||||
<li>${h.link_to(u"Back to Report Codes", url(u'reportcodes'))}</li>
|
||||
% if form.readonly:
|
||||
<li>${h.link_to(u"Edit this Report Code", url(u'reportcode.update', uuid=form.fieldset.model.uuid))}</li>
|
||||
% elif form.updating:
|
||||
<li>${h.link_to(u"View this Report Code", url(u'reportcode.read', uuid=form.fieldset.model.uuid))}</li>
|
||||
% endif
|
||||
</%def>
|
||||
|
||||
${parent.body()}
|
12
tailbone/templates/reportcodes/index.mako
Normal file
12
tailbone/templates/reportcodes/index.mako
Normal file
|
@ -0,0 +1,12 @@
|
|||
## -*- coding: utf-8 -*-
|
||||
<%inherit file="/grid.mako" />
|
||||
|
||||
<%def name="title()">Report Codes</%def>
|
||||
|
||||
<%def name="context_menu_items()">
|
||||
% if request.has_perm(u'reportcodes.create'):
|
||||
<li>${h.link_to(u"Create a new Report Code", url(u'reportcode.create'))}</li>
|
||||
% endif
|
||||
</%def>
|
||||
|
||||
${parent.body()}
|
|
@ -1,9 +1,8 @@
|
|||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
################################################################################
|
||||
#
|
||||
# Rattail -- Retail Software Framework
|
||||
# Copyright © 2010-2012 Lance Edgar
|
||||
# Copyright © 2010-2014 Lance Edgar
|
||||
#
|
||||
# This file is part of Rattail.
|
||||
#
|
||||
|
@ -63,6 +62,7 @@ def includeme(config):
|
|||
config.include('tailbone.views.people')
|
||||
config.include('tailbone.views.products')
|
||||
config.include('tailbone.views.progress')
|
||||
config.include(u'tailbone.views.reportcodes')
|
||||
config.include('tailbone.views.roles')
|
||||
config.include('tailbone.views.stores')
|
||||
config.include('tailbone.views.subdepartments')
|
||||
|
|
|
@ -1,9 +1,8 @@
|
|||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
################################################################################
|
||||
#
|
||||
# Rattail -- Retail Software Framework
|
||||
# Copyright © 2010-2012 Lance Edgar
|
||||
# Copyright © 2010-2014 Lance Edgar
|
||||
#
|
||||
# This file is part of Rattail.
|
||||
#
|
||||
|
@ -102,6 +101,8 @@ class ProductsGrid(SearchableAlchemyGridView):
|
|||
'subdepartment':
|
||||
lambda q: q.outerjoin(Subdepartment,
|
||||
Subdepartment.uuid == Product.subdepartment_uuid),
|
||||
u'report_code':
|
||||
lambda q: q.outerjoin(model.ReportCode),
|
||||
'regular_price':
|
||||
lambda q: q.outerjoin(ProductPrice,
|
||||
ProductPrice.uuid == Product.regular_price_uuid),
|
||||
|
@ -146,6 +147,7 @@ class ProductsGrid(SearchableAlchemyGridView):
|
|||
brand=self.filter_ilike(Brand.name),
|
||||
family=self.filter_ilike(model.Family.name),
|
||||
department=self.filter_ilike(Department.name),
|
||||
report_code=self.filter_ilike(model.ReportCode.name),
|
||||
subdepartment=self.filter_ilike(Subdepartment.name),
|
||||
vendor=self.filter_ilike(Vendor.name),
|
||||
vendor_any=self.filter_ilike(self.VendorAny.name),
|
||||
|
@ -257,8 +259,9 @@ class ProductCrud(CrudView):
|
|||
fs.description,
|
||||
fs.size,
|
||||
fs.department,
|
||||
fs.family,
|
||||
fs.subdepartment,
|
||||
fs.family,
|
||||
fs.report_code,
|
||||
fs.regular_price,
|
||||
fs.current_price,
|
||||
])
|
||||
|
|
112
tailbone/views/reportcodes.py
Normal file
112
tailbone/views/reportcodes.py
Normal file
|
@ -0,0 +1,112 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
################################################################################
|
||||
#
|
||||
# Rattail -- Retail Software Framework
|
||||
# Copyright © 2010-2014 Lance Edgar
|
||||
#
|
||||
# This file is part of Rattail.
|
||||
#
|
||||
# Rattail is free software: you can redistribute it and/or modify it under the
|
||||
# terms of the GNU Affero General Public License as published by the Free
|
||||
# Software Foundation, either version 3 of the License, or (at your option)
|
||||
# any later version.
|
||||
#
|
||||
# Rattail is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
# FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for
|
||||
# more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with Rattail. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
################################################################################
|
||||
|
||||
"""
|
||||
Report Code Views
|
||||
"""
|
||||
|
||||
from tailbone.views import SearchableAlchemyGridView, CrudView
|
||||
|
||||
from rattail.db import model
|
||||
|
||||
|
||||
class ReportCodesGrid(SearchableAlchemyGridView):
|
||||
|
||||
mapped_class = model.ReportCode
|
||||
config_prefix = u'reportcodes'
|
||||
sort = u'name'
|
||||
|
||||
def filter_map(self):
|
||||
return self.make_filter_map(
|
||||
exact=[u'code'],
|
||||
ilike=[u'name'])
|
||||
|
||||
def filter_config(self):
|
||||
return self.make_filter_config(
|
||||
include_filter_name=True,
|
||||
filter_type_name=u'lk')
|
||||
|
||||
def sort_map(self):
|
||||
return self.make_sort_map(u'code', u'name')
|
||||
|
||||
def grid(self):
|
||||
g = self.make_grid()
|
||||
g.configure(
|
||||
include=[
|
||||
g.code,
|
||||
g.name,
|
||||
],
|
||||
readonly=True)
|
||||
if self.request.has_perm(u'reportcodes.read'):
|
||||
g.viewable = True
|
||||
g.view_route_name = u'reportcode.read'
|
||||
if self.request.has_perm(u'reportcodes.update'):
|
||||
g.editable = True
|
||||
g.edit_route_name = u'reportcode.update'
|
||||
if self.request.has_perm(u'reportcodes.delete'):
|
||||
g.deletable = True
|
||||
g.delete_route_name = u'reportcode.delete'
|
||||
return g
|
||||
|
||||
|
||||
class ReportCodeCrud(CrudView):
|
||||
|
||||
mapped_class = model.ReportCode
|
||||
home_route = u'reportcodes'
|
||||
|
||||
def fieldset(self, model):
|
||||
fs = self.make_fieldset(model)
|
||||
fs.configure(
|
||||
include=[
|
||||
fs.code,
|
||||
fs.name,
|
||||
])
|
||||
return fs
|
||||
|
||||
|
||||
def add_routes(config):
|
||||
config.add_route(u'reportcodes', u'/reportcodes')
|
||||
config.add_route(u'reportcode.create', u'/reportcodes/new')
|
||||
config.add_route(u'reportcode.read', u'/reportcodes/{uuid}')
|
||||
config.add_route(u'reportcode.update', u'/reportcodes/{uuid}/edit')
|
||||
config.add_route(u'reportcode.delete', u'/reportcodes/{uuid}/delete')
|
||||
|
||||
|
||||
def includeme(config):
|
||||
add_routes(config)
|
||||
|
||||
config.add_view(ReportCodesGrid, route_name=u'reportcodes',
|
||||
renderer=u'/reportcodes/index.mako',
|
||||
permission=u'reportcodes.list')
|
||||
|
||||
config.add_view(ReportCodeCrud, attr=u'create', route_name=u'reportcode.create',
|
||||
renderer=u'/reportcodes/crud.mako',
|
||||
permission=u'reportcodes.create')
|
||||
config.add_view(ReportCodeCrud, attr=u'read', route_name=u'reportcode.read',
|
||||
renderer=u'/reportcodes/crud.mako',
|
||||
permission=u'reportcodes.read')
|
||||
config.add_view(ReportCodeCrud, attr=u'update', route_name=u'reportcode.update',
|
||||
renderer=u'/reportcodes/crud.mako',
|
||||
permission=u'reportcodes.update')
|
||||
config.add_view(ReportCodeCrud, attr=u'delete', route_name=u'reportcode.delete',
|
||||
permission=u'reportcodes.delete')
|
Loading…
Reference in a new issue