diff --git a/tailbone/views/categories.py b/tailbone/views/categories.py index 607a2fee..649ecfeb 100644 --- a/tailbone/views/categories.py +++ b/tailbone/views/categories.py @@ -28,6 +28,7 @@ from __future__ import unicode_literals, absolute_import from rattail.db import model +from tailbone import forms from tailbone.views import MasterView @@ -39,17 +40,16 @@ class CategoriesView(MasterView): model_title_plural = "Categories" route_prefix = 'categories' has_versions = True + results_downloadable_xlsx = True grid_columns = [ 'code', - 'number', 'name', 'department', ] form_fields = [ 'code', - 'number', 'name', 'department', ] @@ -65,9 +65,47 @@ class CategoriesView(MasterView): g.set_sort_defaults('code') g.set_link('code') - g.set_link('number') g.set_link('name') + def get_xlsx_fields(self): + fields = super(CategoriesView, self).get_xlsx_fields() + fields.extend([ + 'department_number', + 'department_name', + ]) + return fields + + def get_xlsx_row(self, category, fields): + row = super(CategoriesView, self).get_xlsx_row(category, fields) + dept = category.department + if dept: + row['department_number'] = dept.number + row['department_name'] = dept.name + else: + row['department_number'] = None + row['department_name'] = None + return row + + def configure_form(self, f): + super(CategoriesView, self).configure_form(f) + + # department + if self.creating or self.editing: + if 'department' in f: + f.replace('department', 'department_uuid') + f.set_label('department_uuid', "Department") + dept_values = self.get_department_values() + dept_values.insert(0, ('', "(none)")) + f.set_widget('department_uuid', forms.widgets.JQuerySelectWidget(values=dept_values)) + else: + f.set_readonly('department') + + def get_department_values(self): + departments = self.Session.query(model.Department)\ + .order_by(model.Department.number) + return [(dept.uuid, "{} {}".format(dept.number, dept.name)) + for dept in departments] + def includeme(config): CategoriesView.defaults(config) diff --git a/tailbone/views/reportcodes.py b/tailbone/views/reportcodes.py index b50d138f..63044c3b 100644 --- a/tailbone/views/reportcodes.py +++ b/tailbone/views/reportcodes.py @@ -38,6 +38,7 @@ class ReportCodesView(MasterView): model_class = model.ReportCode model_title = "Report Code" has_versions = True + results_downloadable_xlsx = True grid_columns = [ 'code',