def on_update(self, method=None):


		#if we are importing docs from jasperserver
		if not frappe.flags.in_import:

			r_filters=["`tabJasper Reports`.jasper_doctype is NULL", "`tabJasper Reports`.report is NULL"]
			jr = JasperRoot()
			data = jr._get_reports_list(filters_report=r_filters)
			#report_list_dirt_doc is not called from here
			cached = redis_transation(data, "report_list_all")
			if cached and data:
				jaspersession_set_value("report_list_dirt_all", False)
				jaspersession_set_value("report_list_dirt_doc", True)
			elif data:
				#redis not cache
				jaspersession_set_value("report_list_dirt_doc", True)
				jaspersession_set_value("report_list_dirt_all", True)

			if check_root_exists(self.doctype, self.name):
				return
			#if jrxml file was removed then remove all associated images and params
			if self.jasper_report_origin.lower() == "localserver":
				frappe.db.sql("""delete from `tab%s` where %s=%s """ % ("Jasper Parameter", "parent", '%s'),(self.name), auto_commit=1)
				self.query = ""
Exemple #2
0
    def on_update(self, method=None):

        #if we are importing docs from jasperserver
        if not frappe.flags.in_import:

            r_filters = [
                "`tabJasper Reports`.jasper_doctype is NULL",
                "`tabJasper Reports`.report is NULL"
            ]
            jr = JasperRoot()
            data = jr._get_reports_list(filters_report=r_filters)
            #report_list_dirt_doc is not called from here
            cached = redis_transation(data, "report_list_all")
            if cached and data:
                jaspersession_set_value("report_list_dirt_all", False)
                jaspersession_set_value("report_list_dirt_doc", True)
            elif data:
                #redis not cache
                jaspersession_set_value("report_list_dirt_doc", True)
                jaspersession_set_value("report_list_dirt_all", True)

            if check_root_exists(self.doctype, self.name):
                return
            #if jrxml file was removed then remove all associated images and params
            if self.jasper_report_origin.lower() == "localserver":
                frappe.db.sql("""delete from `tab%s` where %s=%s """ %
                              ("Jasper Parameter", "parent", '%s'),
                              (self.name),
                              auto_commit=1)
                self.query = ""
	def before_save(self, method=None):
		self.jasper_doctype = None if not frappe.utils.strip(self.jasper_doctype) else self.jasper_doctype
		self.report = None if not frappe.utils.strip(self.report) else self.report
		if not self.jasper_param_message:
			try:
				self.jasper_param_message = frappe.db.get_values_from_single(["jasper_param_message"], None, "JasperServerConfig")[0][0].format(report=self.jasper_report_name, user=frappe.local.session['user'])
			except:
				self.jasper_param_message = ""

		#check if Jasper is configurated
		use_jasper_server = frappe.db.get_values_from_single(["use_jasper_server"], None, "JasperServerConfig")[0][0]
		if use_jasper_server == "None":
			frappe.throw(_("You need to configure Jasper first."))
			return


		if check_root_exists(self.doctype, self.name):
			rootquery = ''
			self.query = ''
			jrxml_path = _get_jrxml_root_path(self)
			xmldoc = JasperXmlReport(jrxml_path)
			xmlname = check_if_xPath_exists(xmldoc)
			if xmlname and not check_for_report_xPath(xmldoc, xmlname, self):
				frappe.throw(_("Import %s for report %s first." % (xmlname + ".xml",self.jasper_report_name)))

			subreportquerys = getSubReportsQuery(xmldoc, self)
			subquery = ''
			for subreportquery in subreportquerys:
				subquery = subquery + subreportquery.get("name") + ":\n" + subreportquery.get("query") + "\n"

			if xmldoc.queryString or subquery:
				self.query =  xmldoc.name + ":\n" + xmldoc.queryString + "\n" + subquery
			#give feedback to the user shown related params
			params = xmldoc.get_params_from_xml()
			#get total number of parameters to concatenate with name of parameter
			is_copy = "Other"
			action_type = "Ask"

			for param in params:
				pname = param.xpath('./@name')
				pclass = param.xpath('./@class')
				ptype = pclass[0].split(".")
				c = len(ptype) - 1
				if check_param_exists(self, pname[0]):
					break
				if check_queryString_param(xmldoc.queryString, pname[0]):
					is_copy = "Is for where clause"
					action_type = "Automatic"

				#param_type = param_type_java_conversion.get(ptype[c])
				self.append("jasper_parameters", {"__islocal": True, "jasper_param_name":pname[0], "jasper_param_type": ptype[c],#.lower().capitalize()
						"jasper_param_action": action_type, "param_expression":"In", "is_copy":is_copy, "name": self.name + "_" + pname[0]})
			self.query = rootquery + self.query

			return
		#if jrxml file was removed then prepare to remove all associated images and params given feedback to the user
		if self.jasper_report_origin.lower() == "localserver":
			self.jasper_parameters = []
		return
Exemple #4
0
    def before_save(self, method=None):
        self.jasper_doctype = None if not frappe.utils.strip(
            self.jasper_doctype) else self.jasper_doctype
        self.report = None if not frappe.utils.strip(
            self.report) else self.report
        if not self.jasper_param_message:
            self.jasper_param_message = frappe.db.get_values_from_single(
                ["jasper_param_message"], None,
                "JasperServerConfig")[0][0].format(
                    report=self.jasper_report_name,
                    user=frappe.local.session['user'])

        #check if Jasper is configurated
        use_jasper_server = frappe.db.get_values_from_single(
            ["use_jasper_server"], None, "JasperServerConfig")[0][0]
        if use_jasper_server == "None":
            frappe.throw(_("You need to configure Jasper first."))
            return

        if check_root_exists(self.doctype, self.name):
            rootquery = ''
            self.query = ''
            jrxml_path = _get_jrxml_root_path(self)
            xmldoc = JasperXmlReport(jrxml_path)
            xmlname = check_if_xPath_exists(xmldoc)
            if xmlname and not check_for_report_xPath(xmldoc, xmlname, self):
                frappe.throw(
                    _("Import %s for report %s first." %
                      (xmlname + ".xml", self.jasper_report_name)))

            subreportquerys = getSubReportsQuery(xmldoc, self)
            subquery = ''
            for subreportquery in subreportquerys:
                subquery = subquery + subreportquery.get(
                    "name") + ":\n" + subreportquery.get("query") + "\n"

            if xmldoc.queryString or subquery:
                self.query = xmldoc.name + ":\n" + xmldoc.queryString + "\n" + subquery
            #give feedback to the user shown related params
            params = xmldoc.get_params_from_xml()
            #get total number of parameters to concatenate with name of parameter
            is_copy = "Other"
            action_type = "Ask"

            for param in params:
                pname = param.xpath('./@name')
                pclass = param.xpath('./@class')
                ptype = pclass[0].split(".")
                c = len(ptype) - 1
                if check_param_exists(self, pname[0]):
                    break
                if check_queryString_param(xmldoc.queryString, pname[0]):
                    is_copy = "Is for where clause"
                    action_type = "Automatic"

                #param_type = param_type_java_conversion.get(ptype[c])
                self.append(
                    "jasper_parameters",
                    {
                        "__islocal": True,
                        "jasper_param_name": pname[0],
                        "jasper_param_type": ptype[c],  #.lower().capitalize()
                        "jasper_param_action": action_type,
                        "param_expression": "In",
                        "is_copy": is_copy,
                        "name": self.name + "_" + pname[0]
                    })
            self.query = rootquery + self.query

            return
        #if jrxml file was removed then prepare to remove all associated images and params given feedback to the user
        if self.jasper_report_origin.lower() == "localserver":
            self.jasper_parameters = []
        return