Skip to content

Commit

Permalink
fix: agent assignment and permissions for appointment
Browse files Browse the repository at this point in the history
  • Loading branch information
DaizyModi committed Dec 15, 2022
1 parent ac51c27 commit 4bfe2ea
Showing 1 changed file with 17 additions and 6 deletions.
23 changes: 17 additions & 6 deletions erpnext/crm/doctype/appointment/appointment.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,9 @@

import frappe
from frappe import _
from frappe.desk.form.assign_to import add as add_assignment
from frappe.model.document import Document
from frappe.share import add_docshare
from frappe.utils import get_url, getdate, now
from frappe.utils.verified_command import get_signed_params

Expand Down Expand Up @@ -130,21 +132,21 @@ def create_lead_and_link(self):
self.party = lead.name

def auto_assign(self):
from frappe.desk.form.assign_to import add as add_assignemnt

existing_assignee = self.get_assignee_from_latest_opportunity()
if existing_assignee:
# If the latest opportunity is assigned to someone
# Assign the appointment to the same
add_assignemnt({"doctype": self.doctype, "name": self.name, "assign_to": [existing_assignee]})
add_agent_assignment(
{"doctype": self.doctype, "name": self.name, "assign_to": [existing_assignee]}
)
return
if self._assign:
return
available_agents = _get_agents_sorted_by_asc_workload(getdate(self.scheduled_time))
for agent in available_agents:
if _check_agent_availability(agent, self.scheduled_time):
agent = agent[0]
add_assignemnt({"doctype": self.doctype, "name": self.name, "assign_to": [agent]})
add_agent_assignment({"doctype": self.doctype, "name": self.name, "assign_to": [agent]})
break

def get_assignee_from_latest_opportunity(self):
Expand Down Expand Up @@ -201,7 +203,7 @@ def _get_verify_url(self):


def _get_agents_sorted_by_asc_workload(date):
appointments = frappe.db.get_list("Appointment", fields="*")
appointments = frappe.get_all("Appointment", fields="*")
agent_list = _get_agent_list_as_strings()
if not appointments:
return agent_list
Expand All @@ -226,7 +228,7 @@ def _get_agent_list_as_strings():


def _check_agent_availability(agent_email, scheduled_time):
appointemnts_at_scheduled_time = frappe.get_list(
appointemnts_at_scheduled_time = frappe.get_all(
"Appointment", filters={"scheduled_time": scheduled_time}
)
for appointment in appointemnts_at_scheduled_time:
Expand All @@ -240,3 +242,12 @@ def _get_employee_from_user(user):
if employee_docname:
return frappe.get_doc("Employee", employee_docname)
return None


def add_agent_assignment(args):
doc = frappe.get_cached_doc(args.get("doctype"), args.get("name"))
for assign_to in args.get("assign_to"):
if not frappe.has_permission(doc=doc, user=assign_to):
add_docshare(doc.doctype, doc.name, assign_to, flags={"ignore_share_permission": True})

add_assignment(args)

0 comments on commit 4bfe2ea

Please sign in to comment.