def get_page(self, **kwargs): if 'collection' not in kwargs: request = self.request params = request.params query = request.session_factory.query(request.model_class) collection = request.query_factory(request, query, id=None) fields = request.model_class._sa_class_manager # FIXME: use id by default but should use pk field sidx = params.get('sidx', 'id').decode() if sidx and fields.has_key(sidx): sidx = fields[sidx] sord = params.get('sord', 'asc').decode().lower() if sord in ['asc', 'desc']: collection = collection.order_by(getattr(sidx, sord)()) if 'searchField' in params: field = fields.get(params['searchField'], None) if field: op = params['searchOper'] value = params['searchString'] if op == 'cn': value = '%%%s%%' % value filter = field.ilike(value) else: filter = field == value collection = collection.filter(filter) kwargs.update(collection=collection) if 'items_per_page' not in kwargs: kwargs.update(items_per_page=int(self.request.GET.get('rows', 20))) return Base.get_page(self, **kwargs)
def get_page(self, **kwargs): if 'collection' not in kwargs: request = self.request params = request.params query = request.session_factory.query(request.model_class) collection = request.query_factory(request, query, id=None) fields = request.model_class._sa_class_manager # FIXME: use id by default but should use pk field sidx = params.get('sidx', 'id').decode() if sidx and fields.has_key(sidx): sidx = fields[sidx] sord = params.get('sord', 'asc').decode().lower() if sord in ['asc', 'desc']: collection = collection.order_by(getattr(sidx, sord)()) if 'searchField' in params: field = fields.get(params['searchField'], None) if field: op = params['searchOper'] value = params['searchString'] if op == 'cn': value = '%%%s%%' % value filter = field.ilike(value) else: filter = field==value collection = collection.filter(filter) kwargs.update(collection=collection) if 'items_per_page' not in kwargs: kwargs.update(items_per_page=int(self.request.GET.get('rows', 20))) return Base.get_page(self, **kwargs)
def listing(self, *args, **kwargs): request = self.request if request.format != 'json': return Base.listing(self, *args, **kwargs) page = self.get_page(**kwargs) fs = self.get_grid() fs = fs.bind(instances=page, request=self.request) columns = [] fields = [] total = 0 for field in fs.render_fields.values(): type = field.type.__class__.__name__.lower() columns.append(dict( dataIndex=field.name, header=field.label(), editor=dict(xtype=self.xtypes.get(type, '%sfield' % type)), width=160, fixed=False )) fields.append(dict(name=field.name, type=self.types.get(type, type))) values = [] for item in page: total = total+1 pk = _pk(item) fs._set_active(item) value = dict(id=pk, absolute_url=request.fa_url(request.model_name, request.format, pk)) value.update(fs.to_dict(with_prefix=bool(request.params.get('with_prefix')))) values.append(value) data = dict(columns=columns, metaData=dict(fields=fields, root='records', id='id'), records=values, success=True, total=total) return Response(self.encoder.encode(data), content_type='application/json')
def get_page(self, **kwargs): if 'collection' not in kwargs: request = self.request params = request.params query = request.session_factory.query(request.model_class) collection = request.query_factory(request, query, id=None) fields = request.model_class._sa_class_manager # FIXME: use id by default but should use pk field sidx = params.get('sidx', 'id').decode() if sidx and fields.has_key(sidx): sidx = fields[sidx] sord = params.get('sord', 'asc').decode().lower() if sord in ['asc', 'desc']: collection = collection.order_by(getattr(sidx, sord)()) if 'searchField' in params: field = fields.get(params['searchField'], None) if field: filter = self.get_page_search_filter(field, params['searchOper'], params['searchString']) collection = collection.filter(filter) if 'filters' in params: filters = json.loads(params['filters']) clauses = [] for rule in filters['rules']: field = fields.get(rule['field'], None) if field: filter = self.get_page_search_filter(field, rule['op'], rule['data']) clauses.append(filter) if filters['groupOp'] == 'AND': collection = collection.filter(and_(*clauses)) else: collection = collection.filter(or_(*clauses)) kwargs.update(collection=collection) if 'items_per_page' not in kwargs: kwargs.update(items_per_page=int(self.request.GET.get('rows', 20))) return Base.get_page(self, **kwargs)
def render_xhr_format(self, fs=None, **kwargs): resp = Base.render_xhr_format(self, fs=fs, **kwargs) if fs and self.request.POST and 'field' not in self.request.GET: flash = utils.Flash() if fs.errors: errors = [f.label_text or fs.prettify(f.key) for f in fs.render_fields.values() if f.errors] flash.error('Field(s) %s have errors' % ','.join(errors)) else: flash.info('Record saved') resp.unicode_body += flash.render() return resp
def render_xhr_format(self, fs=None, **kwargs): resp = Base.render_xhr_format(self, fs=fs, **kwargs) if fs and self.request.POST and 'field' not in self.request.GET: flash = utils.Flash() if fs.errors: errors = [ f.label_text or fs.prettify(f.key) for f in fs.render_fields.values() if f.errors ] flash.error('Field(s) %s have errors' % ','.join(errors)) else: flash.info('Record saved') resp.unicode_body += flash.render() return resp
def index(self, *args, **kwargs): kwargs['pager'] = '' return Base.index(self, *args, **kwargs)
def render(self, *args, **kwargs): results = Base.render(self, *args, **kwargs) if self.request.format == 'html': results.update(request=self.request) return render_to_response('fa.extjs:index.pt', results) return results
def __init__(self, context, request): Base.__init__(self, context, request) fa_extjs.need() theme.gray.need()