Example #1
0
def on_doctype_update():
    """Add index in `tabCommunication` for `(reference_doctype, reference_name)`"""
    frappe.db.add_index("Communication",
                        ["reference_doctype", "reference_name"])

    if "_liked_by" not in frappe.db.get_table_columns("Communication"):
        add_column("Communication", "_liked_by", "Text")
Example #2
0
	def update_comment_in_doc(self):
		if self.comment_doctype and self.comment_docname and self.comment and self.comment_type=="Comment":
			try:
				_comments = self.get_comments_from_parent()
				updated = False
				for c in _comments:
					if c.get("name")==self.name:
						c["comment"] = self.comment
						updated = True

				if not updated:
					_comments.append({
						"comment": self.comment,
						"by": self.comment_by or self.owner,
						"name":self.name
					})
				self.update_comments_in_parent(_comments)
			except Exception, e:
				if e.args[0]==1054:
					if frappe.flags.in_test:
						return

					from frappe.model.db_schema import add_column
					add_column(self.comment_doctype, "_comments", "Text")
					self.update_comment_in_doc()
				elif e.args[0]==1146:
					# no table
					pass
				else:
					raise
Example #3
0
File: like.py Project: vrms/frappe
def _toggle_like(doctype, name, add, user=None):
    """Same as toggle_like but hides param `user` from API"""

    if not user:
        user = frappe.session.user

    try:
        liked_by, owner = frappe.db.get_value(doctype, name, ["_liked_by", "owner"])
        if owner == frappe.session.user and add == "Yes":
            frappe.throw(_("You cannot like something that you created"))

        if liked_by:
            liked_by = json.loads(liked_by)
        else:
            liked_by = []

        if add == "Yes":
            if user not in liked_by:
                liked_by.append(user)
                add_comment(doctype, name)

        else:
            if user in liked_by:
                liked_by.remove(user)
                remove_like(doctype, name)

        frappe.db.set_value(doctype, name, "_liked_by", json.dumps(liked_by), update_modified=False)

    except Exception, e:
        if isinstance(e.args, (tuple, list)) and e.args and e.args[0] == 1054:
            add_column(doctype, "_liked_by", "Text")
            _toggle_like(doctype, name, add, user)
        else:
            raise
Example #4
0
    def update_comment_in_doc(self):
        if self.comment_doctype and self.comment_docname and self.comment and self.comment_type == "Comment":
            try:
                _comments = self.get_comments_from_parent()
                updated = False
                for c in _comments:
                    if c.get("name") == self.name:
                        c["comment"] = self.comment
                        updated = True

                if not updated:
                    _comments.append({
                        "comment": self.comment,
                        "by": self.comment_by or self.owner,
                        "name": self.name
                    })
                self.update_comments_in_parent(_comments)
            except Exception, e:
                if e.args[0] == 1054:
                    if frappe.flags.in_test:
                        return

                    from frappe.model.db_schema import add_column
                    add_column(self.comment_doctype, "_comments", "Text")
                    self.update_comment_in_doc()
                elif e.args[0] == 1146:
                    # no table
                    pass
                else:
                    raise
Example #5
0
def _toggle_star(doctype, name, add=False, user=None):
	"""Same as toggle_star but hides param `user` from API"""

	if not user:
		user = frappe.session.user

	try:
		starred_by = frappe.db.get_value(doctype, name, "_starred_by")
		if starred_by:
			starred_by = json.loads(starred_by)
		else:
			starred_by = []

		if add=="Yes":
			if user not in starred_by:
				starred_by.append(user)
		else:
			if user in starred_by:
				starred_by.remove(user)

		frappe.db.sql("""update `tab{0}` set `_starred_by`=%s where name=%s""".format(doctype),
			(json.dumps(starred_by), name))

	except Exception, e:
		if e.args[0]==1054:
			add_column(doctype, "_starred_by", "Text")
			_toggle_star(doctype, name, add, user)
		else:
			raise
Example #6
0
def _toggle_star(doctype, name, add=False, user=None):
    """Same as toggle_star but hides param `user` from API"""

    if not user:
        user = frappe.session.user

    try:
        starred_by = frappe.db.get_value(doctype, name, "_starred_by")
        if starred_by:
            starred_by = json.loads(starred_by)
        else:
            starred_by = []

        if add == "Yes":
            if user not in starred_by:
                starred_by.append(user)
        else:
            if user in starred_by:
                starred_by.remove(user)

        frappe.db.sql(
            """update `tab{0}` set `_starred_by`=%s where name=%s""".format(
                doctype), (json.dumps(starred_by), name))

    except Exception, e:
        if e.args[0] == 1054:
            add_column(doctype, "_starred_by", "Text")
            _toggle_star(doctype, name, add, user)
        else:
            raise
Example #7
0
    def update_in_reference(self):
        if not (self.reference_type and self.reference_name):
            return

        try:
            assignments = [
                d[0] for d in frappe.get_all(
                    "ToDo",
                    filters={
                        "reference_type": self.reference_type,
                        "reference_name": self.reference_name,
                        "status": "Open"
                    },
                    fields=["owner"],
                    as_list=True)
            ]

            assignments.reverse()
            frappe.db.set_value(self.reference_type, self.reference_name,
                                "_assign", json.dumps(assignments))

        except Exception, e:
            if e.args[0] == 1146 and frappe.flags.in_install:
                # no table
                return

            elif e.args[0] == 1054:
                from frappe.model.db_schema import add_column
                add_column(self.reference_type, "_assign", "Text")
                self.update_in_reference()

            else:
                raise
Example #8
0
	def update_in_reference(self):
		if not (self.reference_type and self.reference_name):
			return

		try:
			assignments = [d[0] for d in frappe.get_all("ToDo",
				filters={
					"reference_type": self.reference_type,
					"reference_name": self.reference_name,
					"status": "Open"
				},
				fields=["owner"], as_list=True)]

			assignments.reverse()
			frappe.db.set_value(self.reference_type, self.reference_name,
				"_assign", json.dumps(assignments))

		except Exception, e:
			if e.args[0] == 1146 and frappe.flags.in_install:
				# no table
				return

			elif e.args[0]==1054:
				from frappe.model.db_schema import add_column
				add_column(self.reference_type, "_assign", "Text")
				self.update_in_reference()

			else:
				raise
Example #9
0
def toggle_star(doctype, name, add=False):
    """Adds / removes the current user in the `__starred_by` property of the given document.
	If column does not exist, will add it in the database.

	The `_starred_by` property is always set from this function and is ignored if set via
	Document API

	:param doctype: DocType of the document to star
	:param name: Name of the document to star
	:param add: `Yes` if star is to be added. If not `Yes` the star will be removed."""
    try:
        starred_by = frappe.db.get_value(doctype, name, "_starred_by")
        if starred_by:
            starred_by = json.loads(starred_by)
        else:
            starred_by = []

        if add == "Yes":
            if frappe.session.user not in starred_by:
                starred_by.append(frappe.session.user)
        else:
            if frappe.session.user in starred_by:
                starred_by.remove(frappe.session.user)

        frappe.db.sql(
            """update `tab{0}` set `_starred_by`=%s where name=%s""".format(
                doctype), (json.dumps(starred_by), name))
    except Exception, e:
        if e.args[0] == 1054:
            add_column(doctype, "_starred_by", "Text")
            toggle_star(doctype, name, add)
        else:
            raise
Example #10
0
def update_comments_in_parent_after_request():
	"""update _comments in parent if _comments column is missing"""
	if hasattr(frappe.local, "_comments"):
		for (reference_doctype, reference_name, _comments) in frappe.local._comments:
			add_column(reference_doctype, "_comments", "Text")
			update_comments_in_parent(reference_doctype, reference_name, _comments)

		frappe.db.commit()
Example #11
0
def update_comments_in_parent_after_request():
	"""update _comments in parent if _comments column is missing"""
	if hasattr(frappe.local, "_comments"):
		for (reference_doctype, reference_name, _comments) in frappe.local._comments:
			add_column(reference_doctype, "_comments", "Text")
			update_comments_in_parent(reference_doctype, reference_name, _comments)

		frappe.db.commit()
Example #12
0
def on_doctype_update():
	"""Add index to `tabComment` `(comment_doctype, comment_name)`"""
	if not frappe.db.sql("""show index from `tabComment`
		where Key_name="comment_doctype_docname_index" """):
		frappe.db.commit()
		frappe.db.sql("""alter table `tabComment`
			add index comment_doctype_docname_index(comment_doctype, comment_docname)""")

	if "_liked_by" not in frappe.db.get_table_columns("Comment"):
		add_column("Comment", "_liked_by", "Text")
Example #13
0
def execute():
	frappe.db.sql("""update `tabSingles` set field='_liked_by' where field='_starred_by'""")
	frappe.db.commit()

	for table in frappe.db.get_tables():
		columns = [r[0] for r in frappe.db.sql("DESC `{0}`".format(table))]
		if "_starred_by" in columns:
			frappe.db.sql_ddl("""alter table `{0}` change `_starred_by` `_liked_by` Text """.format(table))

	if not frappe.db.has_column("Communication", "_liked_by"):
		add_column("Communication", "_liked_by", "Text")
Example #14
0
def execute():
    frappe.db.sql(
        """update `tabSingles` set field='_liked_by' where field='_starred_by'"""
    )
    frappe.db.commit()

    for table in frappe.db.get_tables():
        columns = [r[0] for r in frappe.db.sql("DESC `{0}`".format(table))]
        if "_starred_by" in columns:
            frappe.db.sql_ddl(
                """alter table `{0}` change `_starred_by` `_liked_by` Text """.
                format(table))

    if not frappe.db.has_column("Communication", "_liked_by"):
        add_column("Communication", "_liked_by", "Text")
Example #15
0
def _toggle_like(doctype, name, add, user=None):
    """Same as toggle_like but hides param `user` from API"""

    if not user:
        user = frappe.session.user

    try:
        liked_by = frappe.db.get_value(doctype, name, "_liked_by")

        # CHANGED: Allow someone to like their own documents as it also works as a bookmark
        # if owner==frappe.session.user and add=="Yes":
        # 	frappe.throw(_("You cannot like something that you created"))

        if liked_by:
            liked_by = json.loads(liked_by)
        else:
            liked_by = []

        if add == "Yes":
            if user not in liked_by:
                liked_by.append(user)
                add_comment(doctype, name)

        else:
            if user in liked_by:
                liked_by.remove(user)
                remove_like(doctype, name)

        frappe.db.set_value(doctype,
                            name,
                            "_liked_by",
                            json.dumps(liked_by),
                            update_modified=False)

    except Exception, e:
        if isinstance(e.args, (tuple, list)) and e.args and e.args[0] == 1054:
            add_column(doctype, "_liked_by", "Text")
            _toggle_like(doctype, name, add, user)
        else:
            raise
Example #16
0
    def update_comment_in_doc(self):
        """Updates `_comments` (JSON) property in parent Document.
		Creates a column `_comments` if property does not exist.

		`_comments` format

			{
				"comment": [String],
				"by": [user],
				"name": [Comment Document name]
			}"""
        if self.comment_doctype and self.comment_docname and self.comment and self.comment_type == "Comment":
            try:
                _comments = self.get_comments_from_parent()
                updated = False
                for c in _comments:
                    if c.get("name") == self.name:
                        c["comment"] = self.comment
                        updated = True

                if not updated:
                    _comments.append({
                        "comment": self.comment,
                        "by": self.comment_by or self.owner,
                        "name": self.name
                    })
                self.update_comments_in_parent(_comments)
            except Exception, e:
                if e.args[0] == 1054:
                    if frappe.flags.in_test:
                        return

                    from frappe.model.db_schema import add_column
                    add_column(self.comment_doctype, "_comments", "Text")
                    self.update_comment_in_doc()
                elif e.args[0] == 1146:
                    # no table
                    pass
                else:
                    raise
Example #17
0
def _toggle_like(doctype, name, add, user=None):
    """Same as toggle_like but hides param `user` from API"""

    if not user:
        user = frappe.session.user

    try:
        liked_by, owner = frappe.db.get_value(doctype, name,
                                              ["_liked_by", "owner"])
        if owner == frappe.session.user and add == "Yes":
            frappe.throw(_("You cannot like something that you created"))

        if liked_by:
            liked_by = json.loads(liked_by)
        else:
            liked_by = []

        if add == "Yes":
            if user not in liked_by:
                liked_by.append(user)
                add_comment(doctype, name)

        else:
            if user in liked_by:
                liked_by.remove(user)
                remove_like(doctype, name)

        frappe.db.set_value(doctype,
                            name,
                            "_liked_by",
                            json.dumps(liked_by),
                            update_modified=False)

    except Exception, e:
        if e.args[0] == 1054:
            add_column(doctype, "_liked_by", "Text")
            _toggle_like(doctype, name, add, user)
        else:
            raise
Example #18
0
	def get_comments_from_parent(self):
		try:
			_comments = frappe.db.get_value(self.comment_doctype,
				self.comment_docname, "_comments") or "[]"

			return json.loads(_comments)

		except Exception, e:

			if e.args[0]==1054:
				if frappe.flags.in_test:
					return

				add_column(self.comment_doctype, "_comments", "Text")

				return self.get_comments_from_parent()

			elif e.args[0]==1146:
				# no table
				pass

			else:
				raise
Example #19
0
	def get_comments_from_parent(self):
		try:
			_comments = frappe.db.get_value(self.comment_doctype,
				self.comment_docname, "_comments") or "[]"

			return json.loads(_comments)

		except Exception, e:

			if e.args[0]==1054:
				if frappe.flags.in_test:
					return

				add_column(self.comment_doctype, "_comments", "Text")

				return self.get_comments_from_parent()

			elif e.args[0]==1146:
				# no table
				pass

			else:
				raise
Example #20
0
 def setup(self):
     """adds the _user_tags column if not exists"""
     from frappe.model.db_schema import add_column
     add_column(self.dt, "_user_tags", "Data")
Example #21
0
	def setup(self):
		"""adds the _user_tags column if not exists"""
		from frappe.model.db_schema import add_column
		add_column(self.dt, "_user_tags", "Data")
def on_doctype_update():
	"""Add index in `tabCommunication` for `(reference_doctype, reference_name)`"""
	frappe.db.add_index("Communication", ["reference_doctype", "reference_name"])

	if "_liked_by" not in frappe.db.get_table_columns("Communication"):
		add_column("Communication", "_liked_by", "Text")