diff --git a/frappe/boot.py b/frappe/boot.py index c6d754bf53..636948359d 100644 --- a/frappe/boot.py +++ b/frappe/boot.py @@ -21,10 +21,6 @@ from frappe.permissions import has_permission from frappe.query_builder import DocType from frappe.query_builder.functions import Count from frappe.query_builder.terms import ParameterizedValueWrapper, SubQuery -from frappe.social.doctype.energy_point_log.energy_point_log import get_energy_points -from frappe.social.doctype.energy_point_settings.energy_point_settings import ( - is_energy_point_enabled, -) from frappe.utils import add_user_info, cstr, get_system_timezone from frappe.utils.change_log import get_versions from frappe.utils.frappecloud import on_frappecloud @@ -99,10 +95,7 @@ def get_bootinfo(): bootinfo.lang_dict = get_lang_dict() bootinfo.success_action = get_success_action() bootinfo.update(get_email_accounts(user=frappe.session.user)) - bootinfo.energy_points_enabled = is_energy_point_enabled() - bootinfo.website_tracking_enabled = is_tracking_enabled() bootinfo.sms_gateway_enabled = bool(frappe.db.get_single_value("SMS Settings", "sms_gateway_url")) - bootinfo.points = get_energy_points(frappe.session.user) bootinfo.frequently_visited_links = frequently_visited_links() bootinfo.link_preview_doctypes = get_link_preview_doctypes() bootinfo.additional_filters_config = get_additional_filters_from_hooks() diff --git a/frappe/cache_manager.py b/frappe/cache_manager.py index 4e648b9fb6..91c9376e67 100644 --- a/frappe/cache_manager.py +++ b/frappe/cache_manager.py @@ -6,7 +6,6 @@ import frappe common_default_keys = ["__default", "__global"] doctypes_for_mapping = { - "Energy Point Rule", "Assignment Rule", "Milestone Tracker", "Document Naming Rule", diff --git a/frappe/core/doctype/doctype/doctype.json b/frappe/core/doctype/doctype/doctype.json index 4c98bb6788..5c550637b6 100644 --- a/frappe/core/doctype/doctype/doctype.json +++ b/frappe/core/doctype/doctype/doctype.json @@ -773,11 +773,6 @@ "group": "Rules", "link_doctype": "Assignment Rule", "link_fieldname": "document_type" - }, - { - "group": "Rules", - "link_doctype": "Energy Point Rule", - "link_fieldname": "reference_doctype" } ], "modified": "2025-03-27 18:16:53.286909", diff --git a/frappe/core/doctype/scheduled_job_type/test_scheduled_job_type.py b/frappe/core/doctype/scheduled_job_type/test_scheduled_job_type.py index e00f0173bb..134f7b0741 100644 --- a/frappe/core/doctype/scheduled_job_type/test_scheduled_job_type.py +++ b/frappe/core/doctype/scheduled_job_type/test_scheduled_job_type.py @@ -84,7 +84,7 @@ class TestScheduledJobType(IntegrationTestCase): def test_weekly_job(self): job = frappe.get_doc( "Scheduled Job Type", - dict(method="frappe.social.doctype.energy_point_log.energy_point_log.send_weekly_summary"), + dict(method="frappe.desk.form.document_follow.send_weekly_updates"), ) job.db_set("last_execution", "2019-01-01 00:00:00") self.assertTrue(job.is_event_due(get_datetime("2019-01-06 00:10:01"))) # +10 min because of jitter diff --git a/frappe/core/doctype/user/user.json b/frappe/core/doctype/user/user.json index c050f699ba..a673f6226c 100644 --- a/frappe/core/doctype/user/user.json +++ b/frappe/core/doctype/user/user.json @@ -853,11 +853,6 @@ "link_doctype": "Activity Log", "link_fieldname": "user" }, - { - "group": "Logs", - "link_doctype": "Energy Point Log", - "link_fieldname": "user" - }, { "group": "Logs", "link_doctype": "Route History", diff --git a/frappe/core/doctype/user/user.py b/frappe/core/doctype/user/user.py index 51eee70976..04d7daf970 100644 --- a/frappe/core/doctype/user/user.py +++ b/frappe/core/doctype/user/user.py @@ -573,9 +573,6 @@ class User(Document): frappe.db.delete("OAuth Authorization Code", {"user": self.name}) frappe.db.delete("Token Cache", {"user": self.name}) - # Delete EPS data - frappe.db.delete("Energy Point Log", {"user": self.name}) - # Remove user link from Workflow Action frappe.db.set_value("Workflow Action", {"user": self.name}, "user", None) diff --git a/frappe/desk/doctype/notification_log/notification_log.py b/frappe/desk/doctype/notification_log/notification_log.py index 0812c56499..79a013fc0e 100644 --- a/frappe/desk/doctype/notification_log/notification_log.py +++ b/frappe/desk/doctype/notification_log/notification_log.py @@ -29,7 +29,7 @@ class NotificationLog(Document): link: DF.Data | None read: DF.Check subject: DF.Text | None - type: DF.Literal["", "Mention", "Energy Point", "Assignment", "Share", "Alert"] + type: DF.Literal["", "Mention", "Assignment", "Share", "Alert"] # end: auto-generated types def after_insert(self): @@ -103,11 +103,7 @@ def make_notification_logs(doc, users): notification = frappe.new_doc("Notification Log") notification.update(doc) notification.for_user = user - if ( - notification.for_user != notification.from_user - or doc.type == "Energy Point" - or doc.type == "Alert" - ): + if notification.for_user != notification.from_user or doc.type == "Alert": notification.insert(ignore_permissions=True) @@ -119,9 +115,6 @@ def _get_user_ids(user_emails): def send_notification_email(doc: NotificationLog): - if doc.type == "Energy Point" and doc.email_content is None: - return - from frappe.utils import get_url_to_form, strip_html user = frappe.db.get_value("User", doc.for_user, fieldname=["email", "language"], as_dict=True) @@ -158,7 +151,6 @@ def get_email_header(doc, language: str | None = None): "Mention": _("New Mention on {0}", lang=language).format(docname), "Assignment": _("Assignment Update on {0}", lang=language).format(docname), "Share": _("New Document Shared {0}", lang=language).format(docname), - "Energy Point": _("Energy Point Update on {0}", lang=language).format(docname), } return header_map[doc.type or "Default"] diff --git a/frappe/desk/doctype/notification_settings/notification_settings.json b/frappe/desk/doctype/notification_settings/notification_settings.json index d64bf3fe4d..d06aebc369 100644 --- a/frappe/desk/doctype/notification_settings/notification_settings.json +++ b/frappe/desk/doctype/notification_settings/notification_settings.json @@ -13,13 +13,10 @@ "enable_email_mention", "enable_email_assignment", "enable_email_threads_on_assigned_document", - "enable_email_energy_point", "enable_email_share", "enable_email_event_reminders", "user", - "seen", - "system_notifications_section", - "energy_points_system_notifications" + "seen" ], "fields": [ { @@ -59,13 +56,6 @@ "fieldtype": "Check", "label": "Assignments" }, - { - "default": "1", - "depends_on": "enable_email_notifications", - "fieldname": "enable_email_energy_point", - "fieldtype": "Check", - "label": "Energy Points" - }, { "default": "1", "depends_on": "enable_email_notifications", @@ -89,17 +79,6 @@ "hidden": 1, "label": "Seen" }, - { - "fieldname": "system_notifications_section", - "fieldtype": "Section Break", - "label": "System Notifications" - }, - { - "default": "1", - "fieldname": "energy_points_system_notifications", - "fieldtype": "Check", - "label": "Energy Points" - }, { "default": "1", "depends_on": "enable_email_notifications", @@ -119,7 +98,7 @@ "in_create": 1, "index_web_pages_for_search": 1, "links": [], - "modified": "2024-03-23 16:03:31.952985", + "modified": "2025-04-16 17:15:25.641232", "modified_by": "Administrator", "module": "Desk", "name": "Notification Settings", @@ -139,8 +118,9 @@ } ], "read_only": 1, + "row_format": "Dynamic", "sort_field": "creation", "sort_order": "DESC", "states": [], "track_changes": 1 -} \ No newline at end of file +} diff --git a/frappe/desk/doctype/notification_settings/notification_settings.py b/frappe/desk/doctype/notification_settings/notification_settings.py index 691c03588d..8c0925e372 100644 --- a/frappe/desk/doctype/notification_settings/notification_settings.py +++ b/frappe/desk/doctype/notification_settings/notification_settings.py @@ -18,14 +18,12 @@ class NotificationSettings(Document): from frappe.types import DF enable_email_assignment: DF.Check - enable_email_energy_point: DF.Check enable_email_event_reminders: DF.Check enable_email_mention: DF.Check enable_email_notifications: DF.Check enable_email_share: DF.Check enable_email_threads_on_assigned_document: DF.Check enabled: DF.Check - energy_points_system_notifications: DF.Check seen: DF.Check subscribed_documents: DF.TableMultiSelect[NotificationSubscribedDocument] user: DF.Link | None diff --git a/frappe/desk/form/load.py b/frappe/desk/form/load.py index 83f1d5c0bf..565306f07b 100644 --- a/frappe/desk/form/load.py +++ b/frappe/desk/form/load.py @@ -123,7 +123,6 @@ def get_docinfo(doc=None, doctype=None, name=None): "permissions": get_doc_permissions(doc), "shared": get_docshares(doc), "views": get_view_logs(doc), - "energy_point_logs": get_point_logs(doc.doctype, doc.name), "additional_timeline_content": get_additional_timeline_content(doc.doctype, doc.name), "milestones": get_milestones(doc.doctype, doc.name), "is_document_followed": is_document_followed(doc.doctype, doc.name, frappe.session.user), @@ -246,19 +245,6 @@ def get_comments(doctype: str, name: str, comment_type: str | list[str] = "Comme return comments -def get_point_logs(doctype, docname): - from frappe.social.doctype.energy_point_settings.energy_point_settings import is_energy_point_enabled - - if not is_energy_point_enabled(): - return [] - - return frappe.get_all( - "Energy Point Log", - filters={"reference_doctype": doctype, "reference_name": docname, "type": ["!=", "Review"]}, - fields=["*"], - ) - - def _get_communications(doctype, name, start=0, limit=20): communications = get_communication_data(doctype, name, start, limit) for c in communications: diff --git a/frappe/desk/leaderboard.py b/frappe/desk/leaderboard.py deleted file mode 100644 index 4800a7d945..0000000000 --- a/frappe/desk/leaderboard.py +++ /dev/null @@ -1,50 +0,0 @@ -import frappe -from frappe.utils import get_fullname - - -def get_leaderboards(): - return { - "User": { - "fields": ["points"], - "method": "frappe.desk.leaderboard.get_energy_point_leaderboard", - "company_disabled": 1, - "icon": "users", - } - } - - -@frappe.whitelist() -def get_energy_point_leaderboard(date_range, company=None, field=None, limit=None): - users = frappe.get_list( - "User", - filters={ - "name": ["not in", ["Administrator", "Guest"]], - "enabled": 1, - "user_type": ["!=", "Website User"], - }, - pluck="name", - ) - - filters = [["type", "!=", "Review"], ["user", "in", users]] - if date_range: - date_range = frappe.parse_json(date_range) - filters.append(["creation", "between", [date_range[0], date_range[1]]]) - energy_point_users = frappe.get_all( - "Energy Point Log", - fields=["user as name", "sum(points) as value"], - filters=filters, - group_by="user", - order_by="value desc", - ) - - energy_point_users_list = list(map(lambda x: x["name"], energy_point_users)) - for user in users: - if user not in energy_point_users_list: - energy_point_users.append({"name": user, "value": 0}) - - for user in energy_point_users: - user_id = user["name"] - user["name"] = get_fullname(user["name"]) - user["formatted_name"] = f'{get_fullname(user_id)}' - - return energy_point_users diff --git a/frappe/desk/page/leaderboard/__init__.py b/frappe/desk/page/leaderboard/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/frappe/desk/page/leaderboard/leaderboard.css b/frappe/desk/page/leaderboard/leaderboard.css deleted file mode 100644 index d15b4ffcd4..0000000000 --- a/frappe/desk/page/leaderboard/leaderboard.css +++ /dev/null @@ -1,85 +0,0 @@ -.list-filters { - overflow-y: hidden; - padding: 5px -} - -.list-filter-item { - min-width: 150px; - float: left; - margin: 5px; -} - -.list-item_content { - flex: 1; - padding-right: 15px; - align-items: center; -} - -.select-time, .select-doctype, .select-filter, .select-sort { - background: #f0f4f7; -} - -.from-date-field .clearfix{ - display: none; -} - -.from-date-field { - margin-left: 10px; -} - -.select-time:focus, .select-doctype:focus, .select-filter:focus, .select-sort:focus { - background: #f0f4f7; -} - -.header-btn-base { - border: none; - outline: 0; - vertical-align: middle; - overflow: hidden; - text-decoration: none; - color: inherit; - background-color: inherit; - cursor: pointer; - white-space: nowrap; -} - -.header-btn-round { - border-radius: 4px; -} - -.item-title-bold { - font-weight: bold; -} - -.rank { - max-width: 100px; -} - -.leaderboard .result { - border-top: 1px solid var(--border-color); -} - -.leaderboard .list-item { - padding-left: 45px; -} - -.leaderboard .list-item_content { - padding-right: 60px; -} - -.leaderboard-sidebar { - padding-left: 0; - position: fixed; -} - -.leaderboard-list { - padding: var(-padding-sm) 0; - min-height: 70vh; -} - -.leaderboard-empty-state { - align-items: center; - height: 70vh; - justify-content: center; - display: flex; -} diff --git a/frappe/desk/page/leaderboard/leaderboard.js b/frappe/desk/page/leaderboard/leaderboard.js deleted file mode 100644 index a832e2cfb0..0000000000 --- a/frappe/desk/page/leaderboard/leaderboard.js +++ /dev/null @@ -1,409 +0,0 @@ -frappe.pages["leaderboard"].on_page_load = (wrapper) => { - frappe.leaderboard = new Leaderboard(wrapper); - - $(wrapper).bind("show", () => { - // Get which leaderboard to show - let doctype = frappe.get_route()[1]; - frappe.leaderboard.show_leaderboard(doctype); - }); -}; - -class Leaderboard { - constructor(parent) { - frappe.ui.make_app_page({ - parent: parent, - title: __("Leaderboard"), - single_column: false, - card_layout: true, - }); - - this.parent = parent; - this.page = this.parent.page; - this.page.sidebar.html( - `` - ); - this.$sidebar_list = this.page.sidebar.find("ul"); - - this.get_leaderboard_config(); - } - - get_leaderboard_config() { - this.doctypes = []; - this.filters = {}; - this.leaderboard_limit = 20; - - frappe - .xcall("frappe.desk.page.leaderboard.leaderboard.get_leaderboard_config") - .then((config) => { - this.leaderboard_config = config; - for (let doctype in this.leaderboard_config) { - this.doctypes.push(doctype); - this.filters[doctype] = this.leaderboard_config[doctype].fields.map( - (field) => { - if (typeof field === "object") { - return field.label || field.fieldname; - } - return field; - } - ); - } - - // For translation. Do not remove this - // __("This Week"), __("This Month"), __("This Quarter"), __("This Year"), - // __("Last Week"), __("Last Month"), __("Last Quarter"), __("Last Year"), - // __("All Time"), __("Select From Date") - this.timespans = [ - "This Week", - "This Month", - "This Quarter", - "This Year", - "Last Week", - "Last Month", - "Last Quarter", - "Last Year", - "All Time", - "Select Date Range", - ]; - - // for saving current selected filters - const _initial_doctype = frappe.get_route()[1] || this.doctypes[0]; - const _initial_timespan = this.timespans[0]; - const _initial_filter = this.filters[_initial_doctype]; - - this.options = { - selected_doctype: _initial_doctype, - selected_filter: _initial_filter, - selected_filter_item: _initial_filter[0], - selected_timespan: _initial_timespan, - }; - - this.message = null; - this.make(); - }); - } - - make() { - this.$container = $(`
-
-
-
`).appendTo(this.page.main); - - this.$graph_area = this.$container.find(".leaderboard-graph"); - - this.doctypes.map((doctype) => { - const icon = this.leaderboard_config[doctype].icon; - this.get_sidebar_item(doctype, icon).appendTo(this.$sidebar_list); - }); - - this.setup_leaderboard_fields(); - - this.render_selected_doctype(); - - this.render_search_box(); - - // Get which leaderboard to show - let doctype = frappe.get_route()[1]; - this.show_leaderboard(doctype); - } - - setup_leaderboard_fields() { - this.company_select = this.page.add_field({ - fieldname: "company", - label: __("Company"), - fieldtype: "Link", - options: "Company", - default: frappe.defaults.get_default("company"), - reqd: 1, - change: (e) => { - this.make_request(); - }, - }); - - this.timespan_select = this.page.add_select( - __("Timespan"), - this.timespans.map((d) => { - return { label: __(d), value: d }; - }) - ); - this.create_date_range_field(); - - this.type_select = this.page.add_select( - __("Field"), - this.options.selected_filter.map((d) => { - return { label: __(frappe.model.unscrub(d)), value: d }; - }) - ); - - this.timespan_select.on("change", (e) => { - this.options.selected_timespan = e.currentTarget.value; - if (this.options.selected_timespan === "Select Date Range") { - this.date_range_field.show(); - } else { - this.date_range_field.hide(); - } - this.make_request(); - }); - - this.type_select.on("change", (e) => { - this.options.selected_filter_item = e.currentTarget.value; - this.make_request(); - }); - } - - create_date_range_field() { - let timespan_field = $(this.parent).find( - `.frappe-control[data-original-title="${__("Timespan")}"]` - ); - this.date_range_field = $(`
`) - .insertAfter(timespan_field) - .hide(); - - let date_field = frappe.ui.form.make_control({ - df: { - fieldtype: "DateRange", - fieldname: "selected_date_range", - placeholder: __("Date Range"), - default: [frappe.datetime.month_start(), frappe.datetime.now_date()], - input_class: "input-xs", - reqd: 1, - change: () => { - this.selected_date_range = date_field.get_value(); - if (this.selected_date_range) this.make_request(); - }, - }, - parent: $(this.parent).find(".from-date-field"), - render_input: 1, - }); - } - - render_selected_doctype() { - this.$sidebar_list.on("click", "li", (e) => { - let $li = $(e.currentTarget); - let doctype = $li.find(".doctype-text").attr("doctype-value"); - - this.company_select.set_value( - frappe.defaults.get_default("company") || this.company_select.get_value() - ); - this.options.selected_doctype = doctype; - this.options.selected_filter = this.filters[doctype]; - this.options.selected_filter_item = this.filters[doctype][0]; - - this.type_select.empty().add_options( - this.options.selected_filter.map((d) => { - return { label: __(frappe.model.unscrub(d)), value: d }; - }) - ); - if (this.leaderboard_config[this.options.selected_doctype].company_disabled) { - $(this.parent).find("[data-original-title=Company]").hide(); - } else { - $(this.parent).find("[data-original-title=Company]").show(); - } - - this.$sidebar_list.find("li").removeClass("active selected"); - $li.addClass("active selected"); - - frappe.set_route("leaderboard", this.options.selected_doctype); - this.make_request(); - }); - } - - render_search_box() { - this.$search_box = $(``); - - $(this.parent).find(".page-form").append(this.$search_box); - } - - show_leaderboard(doctype) { - if (this.doctypes.length) { - if (this.doctypes.includes(doctype)) { - this.options.selected_doctype = doctype; - this.$sidebar_list - .find(`[doctype-value = "${this.options.selected_doctype}"]`) - .trigger("click"); - } - - this.$search_box.find(".leaderboard-search-input").val(""); - frappe.set_route("leaderboard", this.options.selected_doctype); - } - } - - make_request() { - frappe.model.with_doctype(this.options.selected_doctype, () => { - this.get_leaderboard(this.get_leaderboard_data); - }); - } - - get_leaderboard(notify) { - let company = this.company_select.get_value(); - if (!company && !this.leaderboard_config[this.options.selected_doctype].company_disabled) { - notify(this, null); - frappe.show_alert(__("Please select Company")); - return; - } - frappe - .call(this.leaderboard_config[this.options.selected_doctype].method, { - date_range: this.get_date_range(), - company: company, - field: this.options.selected_filter_item, - limit: this.leaderboard_limit, - }) - .then((r) => { - let results = r.message || []; - - let graph_items = results.slice(0, 10); - - this.$graph_area.show().empty(); - - const custom_options = { - data: { - datasets: [{ values: graph_items.map((d) => d.value) }], - labels: graph_items.map((d) => d.name), - }, - format_tooltip_x: (d) => d[this.options.selected_filter_item], - height: 140, - }; - frappe.utils.make_chart(".leaderboard-graph", custom_options); - - notify(this, r); - }); - } - - get_leaderboard_data(me, res) { - if (res && res.message.length) { - me.message = null; - me.$container.find(".leaderboard-list").html(me.render_list_view(res.message)); - frappe.utils.setup_search($(me.parent), ".list-item-container", ".list-id"); - } else { - me.$graph_area.hide(); - me.message = __("No Items Found"); - me.$container.find(".leaderboard-list").html(me.render_list_view()); - } - } - - render_list_view(items = []) { - var html = `${this.render_message()} -
- ${this.render_result(items)} -
`; - - return $(html); - } - - render_result(items) { - var html = `${this.render_list_header()} - ${this.render_list_result(items)}`; - return html; - } - - render_list_header() { - const _selected_filter = this.options.selected_filter.map((i) => frappe.model.unscrub(i)); - const fields = ["rank", "name", this.options.selected_filter_item]; - const filters = fields - .map((filter) => { - const col = __(frappe.model.unscrub(filter)); - return `
- - ${col} - -
`; - }) - .join(""); - - return `
-
${filters}
-
`; - } - - render_list_result(items) { - let _html = items - .map((item, index) => { - const $value = $(this.get_item_html(item, index + 1)); - const $item_container = $(`
`).append($value); - return $item_container[0].outerHTML; - }) - .join(""); - - return `
-
- ${_html} -
-
`; - } - - render_message() { - const display_class = this.message ? "" : "hide"; - return `
-
- Empty State -
${this.message}
-
-
`; - } - - get_item_html(item, index) { - const fields = this.leaderboard_config[this.options.selected_doctype].fields; - const value = frappe.format( - item.value, - fields.find((field) => { - let fieldname = field.fieldname || field; - return fieldname === this.options.selected_filter_item; - }) - ); - - const link = `/app/${frappe.router.slug(this.options.selected_doctype)}/${item.name}`; - const name_html = item.formatted_name - ? `${item.formatted_name}` - : ` ${item.name} `; - return `
-
- ${index} -
-
- ${name_html} -
-
- ${value} -
-
`; - } - - get_sidebar_item(item, icon) { - let icon_html = icon ? frappe.utils.icon(icon, "md") : ""; - return $(`
  • - ${icon_html} - - ${__(item)} - -
  • `); - } - - get_date_range() { - let timespan = this.options.selected_timespan.toLowerCase(); - let current_date = frappe.datetime.now_date(); - let date_range_map = { - "this week": [frappe.datetime.week_start(), frappe.datetime.week_end()], - "this month": [frappe.datetime.month_start(), frappe.datetime.month_end()], - "this quarter": [frappe.datetime.quarter_start(), frappe.datetime.quarter_end()], - "this year": [frappe.datetime.year_start(), frappe.datetime.year_end()], - "last week": [frappe.datetime.add_days(current_date, -7), current_date], - "last month": [frappe.datetime.add_months(current_date, -1), current_date], - "last quarter": [frappe.datetime.add_months(current_date, -3), current_date], - "last year": [frappe.datetime.add_months(current_date, -12), current_date], - "all time": null, - "select date range": this.selected_date_range || [ - frappe.datetime.month_start(), - current_date, - ], - }; - return date_range_map[timespan]; - } -} diff --git a/frappe/desk/page/leaderboard/leaderboard.json b/frappe/desk/page/leaderboard/leaderboard.json deleted file mode 100644 index 0f0b8d88cd..0000000000 --- a/frappe/desk/page/leaderboard/leaderboard.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "content": null, - "creation": "2017-06-06 02:54:24.785360", - "docstatus": 0, - "doctype": "Page", - "idx": 0, - "modified": "2019-09-27 17:44:51.909947", - "modified_by": "Administrator", - "module": "Desk", - "name": "leaderboard", - "owner": "Administrator", - "page_name": "leaderboard", - "roles": [], - "script": null, - "standard": "Yes", - "style": null, - "system_page": 0, - "title": "Leaderboard" -} \ No newline at end of file diff --git a/frappe/desk/page/leaderboard/leaderboard.py b/frappe/desk/page/leaderboard/leaderboard.py deleted file mode 100644 index 0ad4538a81..0000000000 --- a/frappe/desk/page/leaderboard/leaderboard.py +++ /dev/null @@ -1,13 +0,0 @@ -# Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and Contributors -# License: MIT. See LICENSE -import frappe - - -@frappe.whitelist() -def get_leaderboard_config(): - leaderboard_config = frappe._dict() - leaderboard_hooks = frappe.get_hooks("leaderboards") - for hook in leaderboard_hooks: - leaderboard_config.update(frappe.get_attr(hook)()) - - return leaderboard_config diff --git a/frappe/desk/page/user_profile/__init__.py b/frappe/desk/page/user_profile/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/frappe/desk/page/user_profile/user_profile.css b/frappe/desk/page/user_profile/user_profile.css deleted file mode 100644 index 9bcfc3394a..0000000000 --- a/frappe/desk/page/user_profile/user_profile.css +++ /dev/null @@ -1,30 +0,0 @@ -.recent-activity .new-timeline { - padding-top: 0; -} - -.recent-activity .new-timeline:before { - top: 25px; -} - -.recent-activity-title { - font-weight: 700; - font-size: var(--text-xl); - color: var(--text-color); -} - -.recent-activity .recent-activity-footer { - margin-left: calc(var(--timeline-left-padding) + var(--timeline-item-left-margin)); - max-width: var(--timeline-content-max-width); -} - -.recent-activity .show-more-activity-btn { - display: block; - margin: auto; - width: max-content; - margin-top: 35px; - font-size: var(--text-md); -} - -.recent-activity { - padding-bottom: 60px; -} \ No newline at end of file diff --git a/frappe/desk/page/user_profile/user_profile.html b/frappe/desk/page/user_profile/user_profile.html deleted file mode 100644 index f134441b74..0000000000 --- a/frappe/desk/page/user_profile/user_profile.html +++ /dev/null @@ -1,44 +0,0 @@ -
    -
    -
    - -
    -
    -

    {%=__("Type Distribution") %}

    -
    -
    -
    -
    - {%=__("No Data to Show") %} -
    -
    -
    -
    -
    -

    {%=__("Energy Points") %}

    -
    -
    -
    -
    - {%=__("No Data to Show") %} -
    -
    -
    -
    -
    -
    {%=__("Recent Activity") %}
    -
    - -
    -
    -
    diff --git a/frappe/desk/page/user_profile/user_profile.js b/frappe/desk/page/user_profile/user_profile.js deleted file mode 100644 index e4cef59cc7..0000000000 --- a/frappe/desk/page/user_profile/user_profile.js +++ /dev/null @@ -1,6 +0,0 @@ -frappe.pages["user-profile"].on_page_load = function (wrapper) { - frappe.require("user_profile_controller.bundle.js", () => { - let user_profile = new frappe.ui.UserProfile(wrapper); - user_profile.show(); - }); -}; diff --git a/frappe/desk/page/user_profile/user_profile.json b/frappe/desk/page/user_profile/user_profile.json deleted file mode 100644 index 43385f50a4..0000000000 --- a/frappe/desk/page/user_profile/user_profile.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "content": null, - "creation": "2019-07-22 12:23:38.425877", - "docstatus": 0, - "doctype": "Page", - "idx": 0, - "modified": "2020-03-02 15:17:13.041650", - "modified_by": "Administrator", - "module": "Desk", - "name": "user-profile", - "owner": "Administrator", - "page_name": "User Profile", - "roles": [ - { - "role": "All" - } - ], - "script": null, - "standard": "Yes", - "style": null, - "system_page": 0, - "title": "User Profile" -} \ No newline at end of file diff --git a/frappe/desk/page/user_profile/user_profile.py b/frappe/desk/page/user_profile/user_profile.py deleted file mode 100644 index 3013df54a5..0000000000 --- a/frappe/desk/page/user_profile/user_profile.py +++ /dev/null @@ -1,112 +0,0 @@ -from datetime import datetime - -import frappe -from frappe.query_builder import Interval, Order -from frappe.query_builder.functions import Date, Sum, UnixTimestamp -from frappe.utils import getdate - - -@frappe.whitelist() -def get_energy_points_heatmap_data(user, date): - try: - date = getdate(date) - except Exception: - date = getdate() - - eps_log = frappe.qb.DocType("Energy Point Log") - - return dict( - frappe.qb.from_(eps_log) - .select(UnixTimestamp(Date(eps_log.creation)), Sum(eps_log.points)) - .where(eps_log.user == user) - .where(eps_log["type"] != "Review") - .where(Date(eps_log.creation) > Date(date) - Interval(years=1)) - .where(Date(eps_log.creation) < Date(date) + Interval(years=1)) - .groupby(Date(eps_log.creation)) - .orderby(Date(eps_log.creation), order=Order.asc) - .run() - ) - - -@frappe.whitelist() -def get_energy_points_percentage_chart_data(user, field): - result = frappe.get_all( - "Energy Point Log", - filters={"user": user, "type": ["!=", "Review"]}, - group_by=field, - order_by=field, - fields=[field, "ABS(sum(points)) as points"], - as_list=True, - ) - - return { - "labels": [r[0] for r in result if r[0] is not None], - "datasets": [{"values": [r[1] for r in result]}], - } - - -@frappe.whitelist() -def get_user_rank(user): - month_start = datetime.today().replace(day=1) - monthly_rank = frappe.get_all( - "Energy Point Log", - group_by="`tabEnergy Point Log`.`user`", - filters={"creation": [">", month_start], "type": ["!=", "Review"]}, - fields=["user", "sum(points)"], - order_by="sum(points) desc", - as_list=True, - ) - - all_time_rank = frappe.get_all( - "Energy Point Log", - group_by="`tabEnergy Point Log`.`user`", - filters={"type": ["!=", "Review"]}, - fields=["user", "sum(points)"], - order_by="sum(points) desc", - as_list=True, - ) - - return { - "monthly_rank": [i + 1 for i, r in enumerate(monthly_rank) if r[0] == user], - "all_time_rank": [i + 1 for i, r in enumerate(all_time_rank) if r[0] == user], - } - - -@frappe.whitelist() -def update_profile_info(profile_info): - profile_info = frappe.parse_json(profile_info) - keys = ["location", "interest", "user_image", "bio"] - - for key in keys: - if key not in profile_info: - profile_info[key] = None - - user = frappe.get_doc("User", frappe.session.user) - user.update(profile_info) - user.save() - return user - - -@frappe.whitelist() -def get_energy_points_list(start, limit, user): - return frappe.db.get_list( - "Energy Point Log", - filters={"user": user, "type": ["!=", "Review"]}, - fields=[ - "name", - "user", - "points", - "reference_doctype", - "reference_name", - "reason", - "type", - "seen", - "rule", - "owner", - "creation", - "revert_of", - ], - start=start, - limit=limit, - order_by="creation desc", - ) diff --git a/frappe/desk/page/user_profile/user_profile_controller.js b/frappe/desk/page/user_profile/user_profile_controller.js deleted file mode 100644 index abf0bea297..0000000000 --- a/frappe/desk/page/user_profile/user_profile_controller.js +++ /dev/null @@ -1,494 +0,0 @@ -import BaseTimeline from "../../../public/js/frappe/form/footer/base_timeline"; -frappe.provide("frappe.energy_points"); - -class UserProfile { - constructor(wrapper) { - this.wrapper = $(wrapper); - this.page = frappe.ui.make_app_page({ - parent: wrapper, - }); - this.sidebar = this.wrapper.find(".layout-side-section"); - this.main_section = this.wrapper.find(".layout-main-section"); - this.wrapper.bind("show", () => { - this.show(); - }); - } - - show() { - let route = frappe.get_route(); - this.user_id = route[1] || frappe.session.user; - frappe.dom.freeze(__("Loading user profile") + "..."); - frappe.db.exists("User", this.user_id).then((exists) => { - frappe.dom.unfreeze(); - if (exists) { - this.make_user_profile(); - } else { - frappe.msgprint(__("User does not exist")); - } - }); - } - - make_user_profile() { - this.user = frappe.user_info(this.user_id); - this.page.set_title(this.user.fullname); - this.setup_user_search(); - this.main_section.empty().append(frappe.render_template("user_profile")); - this.energy_points = 0; - this.review_points = 0; - this.rank = 0; - this.month_rank = 0; - this.render_user_details(); - this.render_points_and_rank(); - this.render_heatmap(); - this.render_line_chart(); - this.render_percentage_chart("type", "Type Distribution"); - this.create_percentage_chart_filters(); - this.setup_user_activity_timeline(); - } - - setup_user_search() { - this.$user_search_button = this.page.set_secondary_action( - __("Change User"), - () => this.show_user_search_dialog(), - { icon: "change", size: "sm" } - ); - } - - show_user_search_dialog() { - let dialog = new frappe.ui.Dialog({ - title: __("Change User"), - fields: [ - { - fieldtype: "Link", - fieldname: "user", - options: "User", - label: __("User"), - }, - ], - primary_action_label: __("Go"), - primary_action: ({ user }) => { - dialog.hide(); - frappe.set_route("user-profile", user); - }, - }); - dialog.show(); - } - - render_heatmap() { - this.heatmap = new frappe.Chart(".performance-heatmap", { - type: "heatmap", - countLabel: __("Energy Points"), - data: {}, - discreteDomains: 1, - radius: 3, - height: 150, - }); - this.update_heatmap_data(); - this.create_heatmap_chart_filters(); - } - - update_heatmap_data(date_from) { - frappe - .xcall("frappe.desk.page.user_profile.user_profile.get_energy_points_heatmap_data", { - user: this.user_id, - date: date_from || frappe.datetime.year_start(), - }) - .then((r) => { - this.heatmap.update({ dataPoints: r }); - }); - } - - render_line_chart() { - this.line_chart_filters = [ - ["Energy Point Log", "user", "=", this.user_id, false], - ["Energy Point Log", "type", "!=", "Review", false], - ]; - - this.line_chart_config = { - timespan: "Last Month", - time_interval: "Daily", - type: "Line", - value_based_on: "points", - chart_type: "Sum", - document_type: "Energy Point Log", - name: __("Energy Points"), - width: "half", - based_on: "creation", - }; - - this.line_chart = new frappe.Chart(".performance-line-chart", { - type: "line", - height: 200, - data: { - labels: [], - datasets: [{}], - }, - colors: ["purple"], - axisOptions: { - xIsSeries: 1, - }, - }); - this.update_line_chart_data(); - this.create_line_chart_filters(); - } - - update_line_chart_data() { - this.line_chart_config.filters_json = JSON.stringify(this.line_chart_filters); - - frappe - .xcall("frappe.desk.doctype.dashboard_chart.dashboard_chart.get", { - chart: this.line_chart_config, - no_cache: 1, - }) - .then((chart) => { - this.line_chart.update(chart); - }); - } - - render_percentage_chart(field, title) { - frappe - .xcall( - "frappe.desk.page.user_profile.user_profile.get_energy_points_percentage_chart_data", - { - user: this.user_id, - field: field, - } - ) - .then((chart) => { - if (chart.labels.length) { - this.percentage_chart = new frappe.Chart(".performance-percentage-chart", { - type: "percentage", - data: { - labels: chart.labels, - datasets: chart.datasets, - }, - truncateLegends: 1, - barOptions: { - height: 11, - depth: 1, - }, - height: 200, - maxSlices: 8, - colors: [ - "purple", - "blue", - "cyan", - "teal", - "pink", - "red", - "orange", - "yellow", - ], - }); - } else { - this.wrapper.find(".percentage-chart-container").hide(); - } - }); - } - - create_line_chart_filters() { - let filters = [ - { - label: "All", - options: ["All", "Auto", "Criticism", "Appreciation", "Revert"], - action: (selected_item) => { - if (selected_item === "All") { - this.line_chart_filters = [ - ["Energy Point Log", "user", "=", this.user_id, false], - ["Energy Point Log", "type", "!=", "Review", false], - ]; - } else { - this.line_chart_filters[1] = [ - "Energy Point Log", - "type", - "=", - selected_item, - false, - ]; - } - this.update_line_chart_data(); - }, - }, - { - label: "Last Month", - options: ["Last Week", "Last Month", "Last Quarter", "Last Year"], - action: (selected_item) => { - this.line_chart_config.timespan = selected_item; - this.update_line_chart_data(); - }, - }, - { - label: "Daily", - options: ["Daily", "Weekly", "Monthly"], - action: (selected_item) => { - this.line_chart_config.time_interval = selected_item; - this.update_line_chart_data(); - }, - }, - ]; - frappe.dashboard_utils.render_chart_filters( - filters, - "chart-filter", - ".line-chart-options", - 1 - ); - } - - create_percentage_chart_filters() { - let filters = [ - { - label: "Type", - options: ["Type", "Reference Doctype", "Rule"], - fieldnames: ["type", "reference_doctype", "rule"], - action: (selected_item, fieldname) => { - let title = selected_item + " Distribution"; - this.render_percentage_chart(fieldname, title); - }, - }, - ]; - frappe.dashboard_utils.render_chart_filters( - filters, - "chart-filter", - ".percentage-chart-options" - ); - } - - create_heatmap_chart_filters() { - let filters = [ - { - label: frappe.dashboard_utils.get_year(frappe.datetime.now_date()), - options: frappe.dashboard_utils.get_years_since_creation( - frappe.boot.user.creation - ), - action: (selected_item) => { - this.update_heatmap_data(frappe.datetime.obj_to_str(selected_item)); - }, - }, - ]; - frappe.dashboard_utils.render_chart_filters(filters, "chart-filter", ".heatmap-options"); - } - - edit_profile() { - let edit_profile_dialog = new frappe.ui.Dialog({ - title: __("Edit Profile"), - fields: [ - { - fieldtype: "Attach Image", - fieldname: "user_image", - label: "Profile Image", - }, - { - fieldtype: "Data", - fieldname: "interest", - label: "Interests", - }, - { - fieldtype: "Column Break", - }, - { - fieldtype: "Data", - fieldname: "location", - label: "Location", - }, - { - fieldtype: "Section Break", - fieldname: "Interest", - }, - { - fieldtype: "Small Text", - fieldname: "bio", - label: "Bio", - }, - ], - primary_action: (values) => { - edit_profile_dialog.disable_primary_action(); - frappe - .xcall("frappe.desk.page.user_profile.user_profile.update_profile_info", { - profile_info: values, - }) - .then((user) => { - user.image = user.user_image; - this.user = Object.assign(values, user); - edit_profile_dialog.hide(); - this.render_user_details(); - }) - .finally(() => { - edit_profile_dialog.enable_primary_action(); - }); - }, - primary_action_label: __("Save"), - }); - - edit_profile_dialog.set_values({ - user_image: this.user.image, - location: this.user.location, - interest: this.user.interest, - bio: this.user.bio, - }); - edit_profile_dialog.show(); - } - - render_user_details() { - this.sidebar.empty().append( - frappe.render_template("user_profile_sidebar", { - user_image: this.user.image, - user_abbr: this.user.abbr, - user_location: this.user.location, - user_interest: this.user.interest, - user_bio: this.user.bio, - }) - ); - - this.setup_user_profile_links(); - } - - setup_user_profile_links() { - if (this.user_id !== frappe.session.user) { - this.wrapper.find(".profile-links").hide(); - } else { - this.wrapper.find(".edit-profile-link").on("click", () => { - this.edit_profile(); - }); - - this.wrapper.find(".user-settings-link").on("click", () => { - this.go_to_user_settings(); - }); - } - } - - get_user_rank() { - return frappe - .xcall("frappe.desk.page.user_profile.user_profile.get_user_rank", { - user: this.user_id, - }) - .then((r) => { - if (r.monthly_rank.length) this.month_rank = r.monthly_rank[0]; - if (r.all_time_rank.length) this.rank = r.all_time_rank[0]; - }); - } - - get_user_points() { - return frappe - .xcall( - "frappe.social.doctype.energy_point_log.energy_point_log.get_user_energy_and_review_points", - { - user: this.user_id, - } - ) - .then((r) => { - if (r[this.user_id]) { - this.energy_points = r[this.user_id].energy_points; - this.review_points = r[this.user_id].review_points; - } - }); - } - - render_points_and_rank() { - let $profile_details = this.wrapper.find(".user-stats"); - let $profile_details_wrapper = this.wrapper.find(".user-stats-detail"); - - const _get_stat_dom = (value, label, icon) => { - return `
    - ${frappe.utils.icon(icon, "lg", "no-stroke")} -
    -
    ${value}
    -
    ${label}
    -
    -
    `; - }; - - this.get_user_rank().then(() => { - this.get_user_points().then(() => { - let html = $(` - ${_get_stat_dom(this.energy_points, __("Energy Points"), "color-energy-points")} - ${_get_stat_dom(this.review_points, __("Review Points"), "color-review-points")} - ${_get_stat_dom(this.rank, __("Rank"), "color-rank")} - ${_get_stat_dom(this.month_rank, __("Monthly Rank"), "color-monthly-rank")} - `); - - $profile_details.append(html); - $profile_details_wrapper.removeClass("hide"); - }); - }); - } - - go_to_user_settings() { - frappe.set_route("Form", "User", this.user_id); - } - - setup_user_activity_timeline() { - this.user_activity_timeline = new UserProfileTimeline({ - parent: this.wrapper.find(".recent-activity-list"), - footer: this.wrapper.find(".recent-activity-footer"), - user: this.user_id, - }); - - this.user_activity_timeline.refresh(); - } -} - -class UserProfileTimeline extends BaseTimeline { - make() { - super.make(); - this.activity_start = 0; - this.activity_limit = 20; - this.setup_show_more_activity(); - } - prepare_timeline_contents() { - return this.get_user_activity_data().then((activities) => { - if (!activities.length) { - this.show_more_button.hide(); - this.timeline_wrapper.html(`
    ${__("No activities to show")}
    `); - return; - } - this.show_more_button.toggle(activities.length === this.activity_limit); - this.timeline_items = activities.map((activity) => - this.get_activity_timeline_item(activity) - ); - }); - } - - get_user_activity_data() { - return frappe.xcall("frappe.desk.page.user_profile.user_profile.get_energy_points_list", { - start: this.activity_start, - limit: this.activity_limit, - user: this.user, - }); - } - - get_activity_timeline_item(data) { - let icon = - data.type == "Appreciation" ? "clap" : data.type == "Criticism" ? "criticize" : null; - return { - icon: icon, - creation: data.creation, - is_card: true, - content: frappe.energy_points.format_history_log(data), - }; - } - - setup_show_more_activity() { - this.show_more_button = $( - `${__("Show More Activity")}` - ); - this.show_more_button.hide(); - this.footer.append(this.show_more_button); - this.show_more_button.on("click", () => this.show_more_activity()); - } - - show_more_activity() { - this.activity_start += this.activity_limit; - this.get_user_activity_data().then((activities) => { - if (!activities.length || activities.length < this.activity_limit) { - this.show_more_button.hide(); - } - let timeline_items = activities.map((activity) => - this.get_activity_timeline_item(activity) - ); - timeline_items.map((item) => this.add_timeline_item(item, true)); - }); - } -} - -frappe.provide("frappe.ui"); -frappe.ui.UserProfile = UserProfile; diff --git a/frappe/desk/page/user_profile/user_profile_sidebar.html b/frappe/desk/page/user_profile/user_profile_sidebar.html deleted file mode 100644 index 9f8889fd03..0000000000 --- a/frappe/desk/page/user_profile/user_profile_sidebar.html +++ /dev/null @@ -1,60 +0,0 @@ -
    - -
    - {% if user_bio %} -
    -

    {{user_bio}}

    -
    - {% endif %} - - {% if user_location %} -
    -
    {%=__("Intro") %}
    -

    - - - - - - - {{user_location}} -

    -
    - {% endif %} - - {% if user_interest %} -
    -
    {%=__("Interests") %}
    -

    - {{user_interest}} -

    -
    - {% endif %} - -
    -
    {%=__("Details") %}
    -
    -
    -
    - - -
    -
    diff --git a/frappe/hooks.py b/frappe/hooks.py index 9bd3021ad9..3724599883 100644 --- a/frappe/hooks.py +++ b/frappe/hooks.py @@ -81,8 +81,6 @@ email_append_to = ["Event", "ToDo", "Communication"] calendars = ["Event"] -leaderboards = "frappe.desk.leaderboard.get_leaderboards" - # login on_session_creation = [ @@ -177,7 +175,6 @@ doc_events = { "frappe.core.doctype.file.utils.attach_files_to_document", ], "on_change": [ - "frappe.social.doctype.energy_point_rule.energy_point_rule.process_energy_points", "frappe.automation.doctype.milestone_tracker.milestone_tracker.evaluate_milestone", ], "after_delete": ["frappe.core.doctype.permission_log.permission_log.make_perm_log"], @@ -248,7 +245,6 @@ scheduler_events = { "frappe.email.doctype.notification.notification.trigger_daily_alerts", "frappe.website.doctype.personal_data_deletion_request.personal_data_deletion_request.remove_unverified_record", "frappe.desk.form.document_follow.send_daily_updates", - "frappe.social.doctype.energy_point_settings.energy_point_settings.allocate_review_points", "frappe.integrations.doctype.google_contacts.google_contacts.sync", "frappe.automation.doctype.auto_repeat.auto_repeat.make_auto_repeat_entry", ], @@ -263,13 +259,11 @@ scheduler_events = { "frappe.integrations.doctype.s3_backup_settings.s3_backup_settings.take_backups_weekly", "frappe.desk.form.document_follow.send_weekly_updates", "frappe.utils.change_log.check_for_update", - "frappe.social.doctype.energy_point_log.energy_point_log.send_weekly_summary", "frappe.integrations.doctype.google_drive.google_drive.weekly_backup", "frappe.desk.doctype.changelog_feed.changelog_feed.fetch_changelog_feed", ], "monthly": [ "frappe.email.doctype.auto_email_report.auto_email_report.send_monthly", - "frappe.social.doctype.energy_point_log.energy_point_log.send_monthly_summary", ], "monthly_long": [ "frappe.integrations.doctype.s3_backup_settings.s3_backup_settings.take_backups_monthly" diff --git a/frappe/model/rename_doc.py b/frappe/model/rename_doc.py index d813da43bc..5b1f9c3fe0 100644 --- a/frappe/model/rename_doc.py +++ b/frappe/model/rename_doc.py @@ -199,8 +199,6 @@ def rename_doc( rename_versions(doctype, old, new) - rename_eps_records(doctype, old, new) - # call after_rename new_doc = frappe.get_doc(doctype, new) @@ -329,14 +327,6 @@ def rename_versions(doctype: str, old: str, new: str) -> None: ).run() -def rename_eps_records(doctype: str, old: str, new: str) -> None: - EPL = frappe.qb.DocType("Energy Point Log") - - frappe.qb.update(EPL).set(EPL.reference_name, new).where( - (EPL.reference_doctype == doctype) & (EPL.reference_name == old) - ).run() - - def rename_parent_and_child(doctype: str, old: str, new: str, meta: "Meta") -> None: frappe.qb.update(doctype).set("name", new).where(Field("name") == old).run() diff --git a/frappe/model/sync.py b/frappe/model/sync.py index 7bd7234005..445f06dc41 100644 --- a/frappe/model/sync.py +++ b/frappe/model/sync.py @@ -163,7 +163,7 @@ def remove_orphan_doctypes(): continue try: get_controller(doctype=doctype) - except ImportError: + except (ImportError, frappe.DoesNotExistError): orphan_doctypes.append(doctype) except Exception: continue diff --git a/frappe/model/utils/link_count.py b/frappe/model/utils/link_count.py index 532a7807bd..e2bc3f85f6 100644 --- a/frappe/model/utils/link_count.py +++ b/frappe/model/utils/link_count.py @@ -20,7 +20,6 @@ ignore_doctypes = { "Access Log", "View Log", "Activity Log", - "Energy Point Log", "Notification Log", "Email Queue", "DocShare", diff --git a/frappe/modules.txt b/frappe/modules.txt index 863c448594..ef680e1eef 100644 --- a/frappe/modules.txt +++ b/frappe/modules.txt @@ -8,5 +8,4 @@ Desk Integrations Printing Contacts -Social Automation \ No newline at end of file diff --git a/frappe/patches.txt b/frappe/patches.txt index b56a5173f0..cfbbb88ded 100644 --- a/frappe/patches.txt +++ b/frappe/patches.txt @@ -245,4 +245,4 @@ frappe.desk.doctype.workspace.patches.update_app frappe.patches.v16_0.move_role_desk_settings_to_user frappe.printing.doctype.print_format.patches.sets_wkhtmltopdf_as_default_for_pdf_generator_field frappe.patches.v14_0.fix_user_settings_collation -execute:frappe.core.doctype.system_settings.system_settings.sync_system_settings +execute:frappe.core.doctype.system_settings.system_settings.sync_system_settings diff --git a/frappe/public/js/desk.bundle.js b/frappe/public/js/desk.bundle.js index 1287dbabb1..cd7653fba3 100644 --- a/frappe/public/js/desk.bundle.js +++ b/frappe/public/js/desk.bundle.js @@ -101,7 +101,6 @@ import "./frappe/ui/workspace_sidebar_loading_skeleton.html"; import "./frappe/desk.js"; import "./frappe/query_string.js"; -import "./frappe/utils/energy_point_utils.js"; import "./frappe/utils/dashboard_utils.js"; import "./frappe/ui/chart.js"; import "./frappe/ui/datatable.js"; diff --git a/frappe/public/js/frappe/desk.js b/frappe/public/js/frappe/desk.js index b16e409397..a5e2dc07a5 100644 --- a/frappe/public/js/frappe/desk.js +++ b/frappe/public/js/frappe/desk.js @@ -41,7 +41,6 @@ frappe.Application = class Application { this.set_favicon(); this.set_fullwidth_if_enabled(); this.add_browser_class(); - this.setup_energy_point_listeners(); this.setup_copy_doc_listener(); this.setup_broadcast_listeners(); @@ -499,12 +498,6 @@ frappe.Application = class Application { } } - setup_energy_point_listeners() { - frappe.realtime.on("energy_point_alert", (message) => { - frappe.show_alert(message); - }); - } - setup_copy_doc_listener() { $("body").on("paste", (e) => { try { diff --git a/frappe/public/js/frappe/form/footer/base_timeline.js b/frappe/public/js/frappe/form/footer/base_timeline.js index beacdda462..b28c2c7706 100644 --- a/frappe/public/js/frappe/form/footer/base_timeline.js +++ b/frappe/public/js/frappe/form/footer/base_timeline.js @@ -148,4 +148,5 @@ class BaseTimeline { } } +frappe.ui.BaseTimeline = BaseTimeline; export default BaseTimeline; diff --git a/frappe/public/js/frappe/form/footer/form_timeline.js b/frappe/public/js/frappe/form/footer/form_timeline.js index c79c17619f..bd88b6eabc 100644 --- a/frappe/public/js/frappe/form/footer/form_timeline.js +++ b/frappe/public/js/frappe/form/footer/form_timeline.js @@ -161,7 +161,6 @@ class FormTimeline extends BaseTimeline { this.timeline_items.push(...this.get_comment_timeline_contents()); if (!this.only_communication) { this.timeline_items.push(...this.get_view_timeline_contents()); - this.timeline_items.push(...this.get_energy_point_timeline_contents()); this.timeline_items.push(...this.get_version_timeline_contents()); this.timeline_items.push(...this.get_share_timeline_contents()); this.timeline_items.push(...this.get_workflow_timeline_contents()); @@ -494,36 +493,30 @@ class FormTimeline extends BaseTimeline { get_custom_timeline_contents() { let custom_timeline_contents = []; (this.doc_info.additional_timeline_content || []).forEach((custom_item) => { - custom_timeline_contents.push({ - icon: custom_item.icon, - icon_size: "sm", - is_card: custom_item.is_card, - creation: custom_item.creation, - content: - custom_item.content || - frappe.render_template(custom_item.template, custom_item.template_data), - }); + if (custom_item.timeline_badge) { + custom_timeline_contents.push({ + timeline_badge: custom_item.timeline_badge, + creation: custom_item.creation, + content: frappe.utils.eval(custom_item.method, { + custom_item: custom_item, + }), + }); + } else { + custom_timeline_contents.push({ + icon: custom_item.icon, + timeline_badge: custom_item.timeline_badge, + icon_size: "sm", + is_card: custom_item.is_card, + creation: custom_item.creation, + content: + custom_item.content || + frappe.render_template(custom_item.template, custom_item.template_data), + }); + } }); return custom_timeline_contents; } - get_energy_point_timeline_contents() { - let energy_point_timeline_contents = []; - (this.doc_info.energy_point_logs || []).forEach((log) => { - let timeline_badge = ` -
    - ${log.points} -
    `; - - energy_point_timeline_contents.push({ - timeline_badge: timeline_badge, - creation: log.creation, - content: frappe.energy_points.format_form_log(log), - }); - }); - return energy_point_timeline_contents; - } - setup_reply(communication_box, communication_doc) { let actions = communication_box.find(".custom-actions"); let reply = $(`${frappe.utils.icon("reply", "md")}`).click( diff --git a/frappe/public/js/frappe/form/sidebar/form_sidebar.js b/frappe/public/js/frappe/form/sidebar/form_sidebar.js index 0193b659a2..7902917026 100644 --- a/frappe/public/js/frappe/form/sidebar/form_sidebar.js +++ b/frappe/public/js/frappe/form/sidebar/form_sidebar.js @@ -1,7 +1,6 @@ import "./assign_to"; import "./attachments"; import "./share"; -import "./review"; import "./document_follow"; import "./user_image"; import "./form_sidebar_users"; @@ -28,7 +27,6 @@ frappe.ui.form.Sidebar = class { this.image_wrapper = this.image_section.find(".sidebar-image-wrapper"); this.make_assignments(); this.make_attachments(); - this.make_review(); this.make_shared(); this.make_tags(); @@ -214,18 +212,6 @@ frappe.ui.form.Sidebar = class { refresh_image() {} - make_review() { - const review_wrapper = this.sidebar.find(".form-reviews"); - if (frappe.boot.energy_points_enabled && !this.frm.is_new()) { - this.frm.reviews = new frappe.ui.form.Review({ - parent: review_wrapper, - frm: this.frm, - }); - } else { - review_wrapper.remove(); - } - } - reload_docinfo(callback) { frappe.call({ method: "frappe.desk.form.load.get_docinfo", diff --git a/frappe/public/js/frappe/form/sidebar/review.js b/frappe/public/js/frappe/form/sidebar/review.js deleted file mode 100644 index 10b11bf4d3..0000000000 --- a/frappe/public/js/frappe/form/sidebar/review.js +++ /dev/null @@ -1,198 +0,0 @@ -// Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and Contributors -// MIT License. See license.txt - -frappe.ui.form.Review = class Review { - constructor({ parent, frm }) { - this.parent = parent; - this.frm = frm; - this.points = frappe.boot.points; - this.reviews = this.parent.find(".reviews"); - this.setup_add_review_button(); - this.update_reviewers(); - } - update_points() { - return frappe - .xcall("frappe.social.doctype.energy_point_log.energy_point_log.get_energy_points", { - user: frappe.session.user, - }) - .then((data) => { - frappe.boot.points = data; - this.points = data; - }); - } - setup_add_review_button() { - const review_button = this.reviews.find(".add-review-btn"); - - if (!this.points.review_points) { - review_button.click(false); - review_button.popover({ - trigger: "hover", - content: () => { - return `
    - ${__("You do not have enough review points")} -
    `; - }, - html: true, - }); - } else { - review_button.click(() => this.show_review_dialog()); - } - } - - show_review_dialog() { - const user_options = this.frm.get_involved_users(); - const review_dialog = new frappe.ui.Dialog({ - title: __("Add Review"), - fields: [ - { - fieldname: "to_user", - fieldtype: "Autocomplete", - label: __("To User"), - reqd: 1, - options: user_options, - ignore_validation: 1, - description: __("Only users involved in the document are listed"), - }, - { - fieldname: "review_type", - fieldtype: "Select", - label: __("Action"), - options: [ - { - label: __("Appreciate"), - value: "Appreciation", - }, - { - label: __("Criticize"), - value: "Criticism", - }, - ], - default: "Appreciation", - }, - { - fieldname: "points", - fieldtype: "Int", - label: __("Points"), - reqd: 1, - description: __("Currently you have {0} review points", [ - this.points.review_points, - ]), - }, - { - fieldtype: "Small Text", - fieldname: "reason", - reqd: 1, - label: __("Reason"), - }, - ], - primary_action: (values) => { - review_dialog.disable_primary_action(); - if (values.points > this.points.review_points) { - return frappe.msgprint(__("You do not have enough points")); - } - frappe - .xcall("frappe.social.doctype.energy_point_log.energy_point_log.review", { - doc: { - doctype: this.frm.doc.doctype, - name: this.frm.doc.name, - }, - to_user: values.to_user, - points: values.points, - review_type: values.review_type, - reason: values.reason, - }) - .then((review) => { - review_dialog.hide(); - review_dialog.clear(); - this.frm.get_docinfo().energy_point_logs.unshift(review); - this.frm.timeline.refresh(); - this.update_reviewers(); - this.update_points(); - }) - .finally(() => { - review_dialog.enable_primary_action(); - }); - }, - primary_action_label: __("Submit"), - }); - review_dialog.show(); - } - update_reviewers() { - const review_logs = this.frm - .get_docinfo() - .energy_point_logs.filter((log) => ["Appreciation", "Criticism"].includes(log.type)); - - this.reviews.find(".review").remove(); - review_logs.forEach((log) => { - let review_pill = $(` -
    - ${frappe.avatar(log.owner)} - - ${log.points > 0 ? "+" : ""}${log.points} - -
    - `); - this.reviews.append(review_pill); - this.setup_detail_popover(review_pill, log); - }); - } - setup_detail_popover(el, data) { - let subject = ""; - let fullname = frappe.user.full_name(data.user); - let timestamp = `${frappe.datetime.comment_when( - data.creation - )}`; - let message_parts = [Math.abs(data.points), fullname, timestamp]; - if (data.type === "Appreciation") { - if (data.points == 1) { - subject = __("{0} appreciation point for {1}", message_parts); - } else { - subject = __("{0} appreciation points for {1}", message_parts); - } - } else { - if (data.points == -1) { - subject = __("{0} criticism point for {1}", message_parts); - } else { - subject = __("{0} criticism points for {1}", message_parts); - } - } - - el.popover({ - animation: true, - trigger: "hover", - delay: 500, - placement: "top", - template: ` - ' - `, - content: () => { - return ` -
    -
    -
    ${data.reason}
    -
    - -
    - ${frappe.utils.icon("review")} - ${subject} - -

    - - ${frappe.user.full_name(data.owner)} - ${timestamp} -

    -
    -
    - `; - }, - html: true, - container: "body", - }); - - return el; - } -}; diff --git a/frappe/public/js/frappe/form/templates/form_sidebar.html b/frappe/public/js/frappe/form/templates/form_sidebar.html index 6f8ded92d9..c21a91a2fa 100644 --- a/frappe/public/js/frappe/form/templates/form_sidebar.html +++ b/frappe/public/js/frappe/form/templates/form_sidebar.html @@ -74,18 +74,6 @@
    -