diff --git a/crm/api/__init__.py b/crm/api/__init__.py index 533a30c0..f0909118 100644 --- a/crm/api/__init__.py +++ b/crm/api/__init__.py @@ -2,6 +2,7 @@ from bs4 import BeautifulSoup import frappe from frappe.translate import get_all_translations from frappe.utils import cstr +from frappe.utils.telemetry import POSTHOG_HOST_FIELD, POSTHOG_PROJECT_FIELD @frappe.whitelist(allow_guest=True) @@ -44,4 +45,13 @@ def get_user_signature(): content = "" if (cstr(_signature) or signature): content = f'

{signature}

' - return content \ No newline at end of file + return content + +@frappe.whitelist() +def get_posthog_settings(): + return { + "posthog_project_id": frappe.conf.get(POSTHOG_PROJECT_FIELD), + "posthog_host": frappe.conf.get(POSTHOG_HOST_FIELD), + "enable_telemetry": frappe.get_system_settings("enable_telemetry"), + "telemetry_site_age": frappe.utils.telemetry.site_age(), + } \ No newline at end of file diff --git a/crm/api/doc.py b/crm/api/doc.py index e0a0da26..aeb76a6f 100644 --- a/crm/api/doc.py +++ b/crm/api/doc.py @@ -246,8 +246,9 @@ def get_data( is_default = True data = [] _list = get_controller(doctype) + default_rows = [] if hasattr(_list, "default_list_data"): - rows = _list.default_list_data().get("rows") + default_rows = _list.default_list_data().get("rows") if view_type != "kanban": if columns or rows: @@ -278,6 +279,7 @@ def get_data( rows = frappe.parse_json(list_view_settings.rows) is_default = False elif not custom_view or is_default and hasattr(_list, "default_list_data"): + rows = default_rows columns = _list.default_list_data().get("columns") # check if rows has all keys from columns if not add them @@ -302,6 +304,9 @@ def get_data( ) or [] if view_type == "kanban": + if not rows: + rows = default_rows + if not kanban_columns and column_field: field_meta = frappe.get_meta(doctype).get_field(column_field) if field_meta.fieldtype == "Link": diff --git a/crm/fcrm/doctype/crm_lead/crm_lead.py b/crm/fcrm/doctype/crm_lead/crm_lead.py index ee99057d..75ca04e0 100644 --- a/crm/fcrm/doctype/crm_lead/crm_lead.py +++ b/crm/fcrm/doctype/crm_lead/crm_lead.py @@ -149,6 +149,7 @@ class CRMLead(Document): "organization_name": self.organization, "website": self.website, "territory": self.territory, + "industry": self.industry, "annual_revenue": self.annual_revenue, } ) diff --git a/crm/fcrm/doctype/crm_view_settings/crm_view_settings.py b/crm/fcrm/doctype/crm_view_settings/crm_view_settings.py index 86f1bff5..e0cf53d5 100644 --- a/crm/fcrm/doctype/crm_view_settings/crm_view_settings.py +++ b/crm/fcrm/doctype/crm_view_settings/crm_view_settings.py @@ -53,11 +53,11 @@ def create(view): def update(view): view = frappe._dict(view) - filters = parse_json(view.filters) or {} - columns = parse_json(view.columns) or [] - rows = parse_json(view.rows) or [] - kanban_columns = parse_json(view.kanban_columns) or [] - kanban_fields = parse_json(view.kanban_fields) or [] + filters = parse_json(view.filters or {}) + columns = parse_json(view.columns or []) + rows = parse_json(view.rows or []) + kanban_columns = parse_json(view.kanban_columns or []) + kanban_fields = parse_json(view.kanban_fields or []) default_rows = sync_default_rows(view.doctype) rows = rows + default_rows if default_rows else rows @@ -92,6 +92,8 @@ def public(name, value): frappe.throw("Not permitted", frappe.PermissionError) doc = frappe.get_doc("CRM View Settings", name) + if doc.pinned: + doc.pinned = False doc.public = value doc.user = "" if value else frappe.session.user doc.save() diff --git a/crm/hooks.py b/crm/hooks.py index 740c21b2..ce6f23e8 100644 --- a/crm/hooks.py +++ b/crm/hooks.py @@ -4,11 +4,23 @@ app_publisher = "Frappe Technologies Pvt. Ltd." app_description = "Kick-ass Open Source CRM" app_email = "shariq@frappe.io" app_license = "AGPLv3" -app_icon_url = "" +app_icon_url = "/assets/crm/manifest/apple-icon-180.png" app_icon_title = "CRM" app_icon_route = "/crm" +# Apps +# ------------------ + # required_apps = [] +add_to_apps_screen = [ + { + "name": "crm", + "logo": "/assets/crm/manifest/apple-icon-180.png", + "title": "CRM", + "route": "/crm", + # "has_permission": "crm.api.permission.has_app_permission" + } +] # Includes in # ------------------ diff --git a/crm/public/images/desk.png b/crm/public/images/desk.png new file mode 100644 index 00000000..f4a09599 Binary files /dev/null and b/crm/public/images/desk.png differ diff --git a/frappe-ui b/frappe-ui index b5cc6c0c..cf4e7d34 160000 --- a/frappe-ui +++ b/frappe-ui @@ -1 +1 @@ -Subproject commit b5cc6c0cd36ee25e8e945e8c91d8b5c035fb5e44 +Subproject commit cf4e7d347237c23ebde5f5c890abdf7e81284961 diff --git a/frontend/package.json b/frontend/package.json index b899efda..a5060017 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -14,7 +14,7 @@ "@vueuse/core": "^10.3.0", "@vueuse/integrations": "^10.3.0", "feather-icons": "^4.28.0", - "frappe-ui": "^0.1.63", + "frappe-ui": "^0.1.66", "gemoji": "^8.1.0", "lodash": "^4.17.21", "mime": "^4.0.1", diff --git a/frontend/src/App.vue b/frontend/src/App.vue index 9b8693a2..61e774c9 100644 --- a/frontend/src/App.vue +++ b/frontend/src/App.vue @@ -1,6 +1,5 @@