fix: show and allow changing role from agents settings page
(cherry picked from commit 346849631eb2ac886b6bf796d355f3891217ff9f)
This commit is contained in:
parent
b0341aebde
commit
f7344cde43
@ -1,9 +1,27 @@
|
|||||||
# Copyright (c) 2025, Frappe Technologies Pvt. Ltd. and contributors
|
# Copyright (c) 2025, Frappe Technologies Pvt. Ltd. and contributors
|
||||||
# For license information, please see license.txt
|
# For license information, please see license.txt
|
||||||
|
|
||||||
# import frappe
|
import frappe
|
||||||
from frappe.model.document import Document
|
from frappe.model.document import Document
|
||||||
|
|
||||||
|
|
||||||
class CRMAgent(Document):
|
class CRMAgent(Document):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
@frappe.whitelist()
|
||||||
|
def update_agent_role(user, new_role):
|
||||||
|
"""
|
||||||
|
Update the role of the user to Agent
|
||||||
|
"""
|
||||||
|
|
||||||
|
user_doc = frappe.get_doc("User", user)
|
||||||
|
|
||||||
|
if new_role == "Sales Manager":
|
||||||
|
user_doc.append_roles("Sales Manager", "System Manager")
|
||||||
|
if new_role == "Sales User":
|
||||||
|
user_doc.append_roles("Sales User")
|
||||||
|
if "Sales Manager" in frappe.get_roles(user_doc.name):
|
||||||
|
user_doc.remove_roles("Sales Manager", "System Manager")
|
||||||
|
|
||||||
|
user_doc.save()
|
||||||
|
|||||||
@ -58,6 +58,15 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<Dropdown
|
||||||
|
:options="getDropdownOptions(agent)"
|
||||||
|
:button="{
|
||||||
|
label: __(getUserRole(agent.name)),
|
||||||
|
iconRight: 'chevron-down',
|
||||||
|
variant: 'ghost',
|
||||||
|
}"
|
||||||
|
placement="right"
|
||||||
|
/>
|
||||||
</li>
|
</li>
|
||||||
<!-- Load More Button -->
|
<!-- Load More Button -->
|
||||||
<div class="flex justify-center">
|
<div class="flex justify-center">
|
||||||
@ -75,8 +84,12 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import { Avatar, createListResource, FormControl } from 'frappe-ui'
|
import LucideCheck from '~icons/lucide/check'
|
||||||
import { ref, watch } from 'vue'
|
import { usersStore } from '@/stores/users'
|
||||||
|
import { Avatar, createListResource, FormControl, toast, call } from 'frappe-ui'
|
||||||
|
import { ref, h, watch } from 'vue'
|
||||||
|
|
||||||
|
const { users, getUserRole } = usersStore()
|
||||||
|
|
||||||
const agents = createListResource({
|
const agents = createListResource({
|
||||||
doctype: 'CRM Agent',
|
doctype: 'CRM Agent',
|
||||||
@ -89,6 +102,68 @@ const agents = createListResource({
|
|||||||
orderBy: 'creation desc',
|
orderBy: 'creation desc',
|
||||||
})
|
})
|
||||||
|
|
||||||
|
function getDropdownOptions(user) {
|
||||||
|
const agentRole = getUserRole(user.name)
|
||||||
|
return [
|
||||||
|
{
|
||||||
|
label: 'Sales Manager',
|
||||||
|
component: (props) =>
|
||||||
|
RoleOption({
|
||||||
|
role: 'Sales Manager',
|
||||||
|
active: props.active,
|
||||||
|
selected: agentRole === 'Sales Manager',
|
||||||
|
onClick: () => updateRole(user.name, 'Sales Manager'),
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'Sales Agent',
|
||||||
|
component: (props) =>
|
||||||
|
RoleOption({
|
||||||
|
role: 'Sales Agent',
|
||||||
|
active: props.active,
|
||||||
|
selected: agentRole === 'Sales User',
|
||||||
|
onClick: () => updateRole(user.name, 'Sales User'),
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
function RoleOption({ active, role, onClick, selected }) {
|
||||||
|
return h(
|
||||||
|
'button',
|
||||||
|
{
|
||||||
|
class: [
|
||||||
|
active ? 'bg-surface-gray-2' : 'text-ink-gray-9',
|
||||||
|
'group flex w-full justify-between items-center rounded-md px-2 py-2 text-sm',
|
||||||
|
],
|
||||||
|
onClick: !selected ? onClick : null,
|
||||||
|
},
|
||||||
|
[
|
||||||
|
h('span', { class: 'whitespace-nowrap' }, role),
|
||||||
|
selected
|
||||||
|
? h(LucideCheck, {
|
||||||
|
class: ['h-4 w-4 shrink-0 text-ink-gray-7'],
|
||||||
|
'aria-hidden': true,
|
||||||
|
})
|
||||||
|
: null,
|
||||||
|
],
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
function updateRole(agent, newRole) {
|
||||||
|
const currentRole = getUserRole(agent)
|
||||||
|
if (currentRole === newRole) return
|
||||||
|
|
||||||
|
call('crm.fcrm.doctype.crm_agent.crm_agent.update_agent_role', {
|
||||||
|
user: agent,
|
||||||
|
new_role: newRole,
|
||||||
|
}).then(() => {
|
||||||
|
toast.success(__('{0} role updated to {1}', [agent, newRole]))
|
||||||
|
users.reload()
|
||||||
|
agents.reload()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
const search = ref('')
|
const search = ref('')
|
||||||
watch(search, (newValue) => {
|
watch(search, (newValue) => {
|
||||||
agents.filters = {
|
agents.filters = {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user