def get_definitions(cls, session): """ Fetch the list of CDR query term definitions Required positional argument: session - reference to object for current login Called by: cdr.listQueryTermDefs() client XML wrapper command CdrListQueryTermDefs Return: sequence of `QueryTermDef` objects """ session.log("QueryTermDef.get_definitions()") query = Query("query_term_def d", "d.path", "r.name") query.outer("query_term_rule r", "r.id = d.term_rule") query.order("d.path", "r.name") definitions = [] for row in query.execute(session.cursor).fetchall(): definitions.append(QueryTermDef(session, row.path, row.name)) return definitions
def _menu_term_tree(self): """ Report on the menu term hierarchy Parameters: MenuType - required string restricting report to a single menu type Return: XML document node with the following structure: ReportBody ReportName MenuItem* TermId TermName MenuType MenuStatus DisplayName? ParentId? SortString """ menutype = self.__opts.get("MenuType", "%") operand = "LIKE" if "%" in menutype else "=" fields = ("n.doc_id AS id", "n.value AS name", "t.value AS type", "s.value AS status", "d.value AS display", "p.int_val AS parent", "k.value AS sort_key") i_path = "/Term/MenuInformation/MenuItem" n_path = "/Term/PreferredName" t_path = "{}/MenuType".format(i_path) s_path = "{}/MenuStatus".format(i_path) d_path = "{}/DisplayName".format(i_path) p_path = "{}/MenuParent/@cdr:ref".format(i_path) k_path = "{}/@SortOrder".format(i_path) query = Query("query_term n", *fields).unique().order("n.doc_id") query.join("query_term t", "t.doc_id = n.doc_id") query.join("query_term s", "s.doc_id = t.doc_id", "LEFT(s.node_loc, 8) = LEFT(t.node_loc, 8)") query.outer("query_term d", "d.doc_id = t.doc_id", "d.path = '{}'".format(d_path), "LEFT(d.node_loc, 8) = LEFT(t.node_loc, 8)") query.outer("query_term p", "p.doc_id = t.doc_id", "p.path = '{}'".format(p_path), "LEFT(p.node_loc, 8) = LEFT(t.node_loc, 8)") query.outer("query_term k", "k.doc_id = t.doc_id", "k.path = '{}'".format(k_path), "LEFT(k.node_loc, 8) = LEFT(t.node_loc, 8)") query.where("n.path = '{}'".format(n_path)) query.where("t.path = '{}'".format(t_path)) query.where("s.path = '{}'".format(s_path)) query.where(query.Condition("t.value", menutype, operand)) query.where(query.Condition("s.value", "Offline", "<>")) body = self.__start_body() for row in query.execute(self.cursor).fetchall(): sort_key = row.sort_key if row.sort_key is not None else row.name wrapper = etree.SubElement(body, "MenuItem") etree.SubElement(wrapper, "TermId").text = str(row.id) etree.SubElement(wrapper, "TermName").text = row.name etree.SubElement(wrapper, "MenuType").text = row.type etree.SubElement(wrapper, "MenuStatus").text = row.status if row.display is not None: etree.SubElement(wrapper, "DisplayName").text = row.display if row.parent is not None: etree.SubElement(wrapper, "ParentId").text = str(row.parent) etree.SubElement(wrapper, "SortString").text = sort_key return body