예제 #1
0
 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)
예제 #2
0
파일: pyramid.py 프로젝트: do3cc/fa.jquery
 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)
예제 #3
0
    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')
예제 #4
0
 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)
예제 #5
0
파일: pyramid.py 프로젝트: do3cc/fa.jquery
 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
예제 #6
0
 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
예제 #7
0
파일: pyramid.py 프로젝트: do3cc/fa.jquery
 def index(self, *args, **kwargs):
     kwargs['pager'] = ''
     return Base.index(self, *args, **kwargs)
예제 #8
0
 def index(self, *args, **kwargs):
     kwargs['pager'] = ''
     return Base.index(self, *args, **kwargs)
예제 #9
0
 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
예제 #10
0
 def __init__(self, context, request):
     Base.__init__(self, context, request)
     fa_extjs.need()
     theme.gray.need()