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")
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
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
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
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
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
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
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
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
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()
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")
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")
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")
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
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
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
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
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")