From f1935156ecbe4f05722b93f50bc096a50e006b57 Mon Sep 17 00:00:00 2001 From: Shariq Ansari Date: Tue, 17 Jun 2025 16:59:02 +0530 Subject: [PATCH] feat: add existing users (cherry picked from commit 6873c6db4e100e7225ebd7c461c31eb9f35356da) --- crm/fcrm/doctype/crm_user/crm_user.py | 24 +++- frontend/components.d.ts | 1 + .../Modals/AddExistingUserModal.vue | 113 ++++++++++++++++++ frontend/src/components/Settings/Settings.vue | 3 +- frontend/src/components/Settings/Users.vue | 6 + 5 files changed, 143 insertions(+), 4 deletions(-) create mode 100644 frontend/src/components/Modals/AddExistingUserModal.vue diff --git a/crm/fcrm/doctype/crm_user/crm_user.py b/crm/fcrm/doctype/crm_user/crm_user.py index 98c74d51..2bc585a8 100644 --- a/crm/fcrm/doctype/crm_user/crm_user.py +++ b/crm/fcrm/doctype/crm_user/crm_user.py @@ -21,6 +21,26 @@ class CRMUser(Document): self.image = user.user_image +@frappe.whitelist() +def add_existing_users(users, role='Sales User'): + """ + Add existing users to the CRM User doctype. + :param users: List of user names to be added + """ + frappe.only_for(["System Manager", "Sales Manager"]) + users = frappe.parse_json(users) + + for user in users: + if not frappe.db.exists("CRM User", {"user": user}): + new_user = frappe.new_doc("CRM User") + new_user.user = user + new_user.save(ignore_permissions=True) + + update_user_role(user, role) + else: + frappe.throw(f"User {user} already exists") + + @frappe.whitelist() def update_user_role(user, new_role): """ @@ -29,7 +49,7 @@ def update_user_role(user, new_role): :param new_role: The new role to assign (Sales Manager or Sales User) """ - frappe.only_for(["System Manager", "System Manager"]) + frappe.only_for(["System Manager", "Sales Manager"]) if new_role not in ["System Manager", "Sales Manager", "Sales User"]: frappe.throw("Cannot assign this role") @@ -55,6 +75,6 @@ def update_user_status(user, status): :param user: The name of the user :param status: The status to set (1 for active, 0 for inactive) """ - frappe.only_for("Sales Manager") + frappe.only_for(["System Manager", "Sales Manager"]) frappe.db.set_value("CRM User", user, "is_active", status) diff --git a/frontend/components.d.ts b/frontend/components.d.ts index 4c5b3699..8dd7f4d4 100644 --- a/frontend/components.d.ts +++ b/frontend/components.d.ts @@ -12,6 +12,7 @@ declare module 'vue' { Activities: typeof import('./src/components/Activities/Activities.vue')['default'] ActivityHeader: typeof import('./src/components/Activities/ActivityHeader.vue')['default'] ActivityIcon: typeof import('./src/components/Icons/ActivityIcon.vue')['default'] + AddExistingUserModal: typeof import('./src/components/Modals/AddExistingUserModal.vue')['default'] AddressIcon: typeof import('./src/components/Icons/AddressIcon.vue')['default'] AddressModal: typeof import('./src/components/Modals/AddressModal.vue')['default'] Agents: typeof import('./src/components/Settings/Agents.vue')['default'] diff --git a/frontend/src/components/Modals/AddExistingUserModal.vue b/frontend/src/components/Modals/AddExistingUserModal.vue new file mode 100644 index 00000000..d196946f --- /dev/null +++ b/frontend/src/components/Modals/AddExistingUserModal.vue @@ -0,0 +1,113 @@ + + + diff --git a/frontend/src/components/Settings/Settings.vue b/frontend/src/components/Settings/Settings.vue index e7f5c9c5..a46c29bc 100644 --- a/frontend/src/components/Settings/Settings.vue +++ b/frontend/src/components/Settings/Settings.vue @@ -44,7 +44,6 @@ import WhatsAppIcon from '@/components/Icons/WhatsAppIcon.vue' import ERPNextIcon from '@/components/Icons/ERPNextIcon.vue' import PhoneIcon from '@/components/Icons/PhoneIcon.vue' -import InviteIcon from '@/components/Icons/InviteIcon.vue' import Email2Icon from '@/components/Icons/Email2Icon.vue' import Users from '@/components/Settings/Users.vue' import GeneralSettings from '@/components/Settings/GeneralSettings.vue' @@ -97,7 +96,7 @@ const tabs = computed(() => { }, { label: __('Invite User'), - icon: InviteIcon, + icon: 'user-plus', component: markRaw(InviteUserPage), condition: () => isManager(), }, diff --git a/frontend/src/components/Settings/Users.vue b/frontend/src/components/Settings/Users.vue index c6d375a3..2361e34d 100644 --- a/frontend/src/components/Settings/Users.vue +++ b/frontend/src/components/Settings/Users.vue @@ -127,10 +127,16 @@ +