def get_resource_flowable(self, resource, doc): # get a list of fields, if the list_fields attribute is provided # then use that to extract the fields that are required, otherwise # use the list of readable fields. from s3.s3utils import S3DataTable if not self.list_fields: self.list_fields = [] fields = resource.readable_fields() for field in fields: if field.type == "id": continue if self.pdf_hide_comments and field.name == "comments": continue self.list_fields.append(field.name) rfields = resource.resolve_selectors(self.list_fields)[0] (orderby, filter) = S3DataTable.getControlData(rfields, current.request.vars) resource.add_filter(filter) current.manager.ROWSPERPAGE = None # needed to get all the data rows = resource._select(self.list_fields, orderby=orderby) data = resource._extract(rows, self.list_fields, represent=True) # Now generate the PDF table pdf_table = S3PDFTable( doc, rfields, data, groupby=self.pdf_groupby, autogrow=self.table_autogrow, body_height=doc.body_height ).build() return pdf_table
def organisation(): """ Function to handle pagination for the org list on the homepage """ from s3.s3utils import S3DataTable resource = s3db.resource("org_organisation") totalrows = resource.count() table = resource.table list_fields = ["id", "name"] limit = int(request.get_vars["iDisplayLength"] ) if request.extension == "aadata" else 1 rfields = resource.resolve_selectors(list_fields)[0] (orderby, filter) = S3DataTable.getControlData(rfields, request.vars) resource.add_filter(filter) filteredrows = resource.count() if isinstance(orderby, bool): orderby = table.name rows = resource.select( list_fields, orderby=orderby, start=0, limit=limit, ) data = resource.extract( rows, list_fields, represent=True, ) dt = S3DataTable(rfields, data) dt.defaultActionButtons(resource) s3.no_formats = True if request.extension == "html": items = dt.html( totalrows, filteredrows, "org_list_1", dt_displayLength=10, dt_ajax_url=URL( c="default", f="organisation", extension="aadata", vars={"id": "org_list_1"}, ), ) elif request.extension.lower() == "aadata": limit = resource.count() if "sEcho" in request.vars: echo = int(request.vars.sEcho) else: echo = None items = dt.json(totalrows, filteredrows, "org_list_1", echo) else: raise HTTP(501, s3mgr.ERROR.BAD_FORMAT) return items
def organisation(): """ Function to handle pagination for the org list on the homepage """ from s3.s3utils import S3DataTable resource = s3db.resource("org_organisation") totalrows = resource.count() table = resource.table list_fields = ["id", "name"] limit = int(request.get_vars["iDisplayLength"]) if request.extension == "aaData" else 1 rfields = resource.resolve_selectors(list_fields)[0] (orderby, filter) = S3DataTable.getControlData(rfields, request.vars) resource.add_filter(filter) filteredrows = resource.count() if isinstance(orderby, bool): orderby = table.name rows = resource.select(list_fields, orderby=orderby, start=0, limit=limit, ) data = resource.extract(rows, list_fields, represent=True, ) dt = S3DataTable(rfields, data) dt.defaultActionButtons(resource) s3.no_formats = True if request.extension == "html": items = dt.html(totalrows, filteredrows, "org_list_1", dt_displayLength=10, dt_ajax_url=URL(c="default", f="organisation", extension="aaData", vars={"id": "org_list_1"}, ), ) elif request.extension.lower() == "aadata": limit = resource.count() if "sEcho" in request.vars: echo = int(request.vars.sEcho) else: echo = None items = dt.json(totalrows, filteredrows, "supply_list_1", echo) else: raise HTTP(501, s3mgr.ERROR.BAD_FORMAT) return items
def extractResource(self, resource, list_fields, report_groupby): """ Extract the items from the resource @param resource: the resource @param list_fields: fields to include in list views @param report_groupby: a Field object of the field to group the records by """ from s3.s3utils import S3DataTable s3 = current.response.s3 # Use the title_list CRUD string for the title name = "title_list" tablename = resource.tablename crud_strings = s3.crud_strings.get(tablename, s3.crud_strings) not_found = s3.crud_strings.get(name, current.request.function) title = str(crud_strings.get(name, not_found)) rfields = resource.resolve_selectors(list_fields)[0] types = [] for f in rfields: if f.show: if f.field: types.append(f.field.type) else: # Virtual Field types.append("string") lfields = [] heading = {} for field in rfields: selector = "%s.%s" % (field.tname, field.fname) lfields.append(selector) heading[selector] = (field.label) (orderby, filter) = S3DataTable.getControlData(rfields, current.request.vars) resource.add_filter(filter) current.manager.ROWSPERPAGE = None # needed to get all the data rows = resource.select( list_fields, orderby=orderby, ) items = resource.extract( rows, list_fields, represent=True, ) return (title, types, lfields, heading, items)
def extractResource(self, resource, list_fields, report_groupby): """ Extract the items from the resource @param resource: the resource @param list_fields: fields to include in list views @param report_groupby: a Field object of the field to group the records by """ from s3.s3utils import S3DataTable s3 = current.response.s3 # Use the title_list CRUD string for the title name = "title_list" tablename = resource.tablename crud_strings = s3.crud_strings.get(tablename, s3.crud_strings) not_found = s3.crud_strings.get(name, current.request.function) title = str(crud_strings.get(name, not_found)) rfields = resource.resolve_selectors(list_fields)[0] types = [] for f in rfields: if f.show: if f.field: types.append(f.field.type) else: # Virtual Field types.append("string") lfields = [] heading = {} for field in rfields: if field.show: selector = "%s.%s" % (field.tname, field.fname) lfields.append(selector) heading[selector] = (field.label) (orderby, filter) = S3DataTable.getControlData(rfields, current.request.vars) resource.add_filter(filter) current.manager.ROWSPERPAGE = None # needed to get all the data rows = resource.select(list_fields, orderby=orderby, ) items = resource.extract(rows, list_fields, represent=True, ) return (title, types, lfields, heading, items)
def get_resource_flowable(self, resource, doc): """ Get a list of fields, if the list_fields attribute is provided then use that to extract the fields that are required, otherwise use the list of readable fields. """ from s3.s3utils import S3DataTable if not self.list_fields: self.list_fields = [] fields = resource.readable_fields() for field in fields: if field.type == "id": continue if self.pdf_hide_comments and field.name == "comments": continue self.list_fields.append(field.name) rfields = resource.resolve_selectors(self.list_fields)[0] (orderby, filter) = S3DataTable.getControlData(rfields, current.request.vars) resource.add_filter(filter) current.manager.ROWSPERPAGE = None # needed to get all the data rows = resource.select( self.list_fields, orderby=orderby, ) data = resource.extract( rows, self.list_fields, represent=True, ) # Now generate the PDF table pdf_table = S3PDFTable( doc, rfields, data, groupby=self.pdf_groupby, autogrow=self.table_autogrow, body_height=doc.body_height, ).build() return pdf_table