diff --git a/ordr2/resources/admin.py b/ordr2/resources/admin.py index 5434ff8..af2feb2 100644 --- a/ordr2/resources/admin.py +++ b/ordr2/resources/admin.py @@ -1,10 +1,10 @@ from pyramid.security import Allow, Authenticated, Deny, DENY_ALL, Everyone from .base import BaseResource, PaginationResourceMixin -from ordr2.models import User, Role - +from ordr2.models import Category, Consumable, User, Role +# user accounr resources class UserAccount(BaseResource): def __acl__(self): @@ -67,6 +67,68 @@ class UserList(BaseResource, PaginationResourceMixin): +# consumables resources +class ConsumableResource(BaseResource): + def __acl__(self): + return [ + (Allow, 'role:admin', 'view'), + (Allow, 'role:admin', 'edit'), + (Allow, 'role:admin', 'delete'), + DENY_ALL + ] + + +class ConsumableList(BaseResource, PaginationResourceMixin): + sql_model_class = Consumable + child_resource_class = ConsumableResource + default_sorting = 'cas.asc' + default_items_per_page = 12 + + def __acl__(self): + return [ + (Allow, 'role:admin', 'view'), + (Allow, 'role:admin', 'edit'), + (Allow, 'role:admin', 'delete'), + DENY_ALL + ] + + + def prepare_filtered_query(self, dbsession, filter_params): + ''' setup the base filtered query ''' + query = dbsession.query(self.sql_model_class) + category_name = filter_params.get('category', None) + try: + category_name = cat_name.lower() + category = Category(category_name) + query = query.filter_by(category=category) + except (AttributeError, ValueError): + category_name = None + self.filters['category'] = category_name + return query + + + def prepare_sorted_query(self, query, sorting): + ''' setup the base filtered query ''' + available_fields = { + 'cas': 'cas_description', + 'category': 'category', + 'catalog': 'catalog_nr', + 'vendor': 'vendor', + 'pkg': 'package_size', + 'price': 'unit_price', + 'currency': 'currency' + } + name = available_fields.get(sorting.field, None) + model_field = getattr(self.sql_model_class, name, None) + if model_field: + sort_func = sorting.func(model_field) + query = query.order_by(sort_func) + default_sort = self.parse_sort_parameters(self.default_sorting) + if sorting.field != default_sort.field: + default_sort = self.parse_sort_parameters(self.default_sorting) + query = self.prepare_sorted_query(query, default_sort) + return query + class Admin(BaseResource): nodes = {