Beispiel #1
0
    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
Beispiel #2
0
    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