feat: create appoitnemnt against customer (#20457)
diff --git a/erpnext/crm/doctype/appointment/appointment.js b/erpnext/crm/doctype/appointment/appointment.js
index 8888b56..ca38121 100644
--- a/erpnext/crm/doctype/appointment/appointment.js
+++ b/erpnext/crm/doctype/appointment/appointment.js
@@ -13,5 +13,14 @@
frappe.set_route("Form", "Event", frm.doc.calendar_event);
});
}
+ },
+ onload: function(frm){
+ frm.set_query("appointment_with", function(){
+ return {
+ filters : {
+ "name": ["in", ["Customer", "Lead"]]
+ }
+ };
+ });
}
});
diff --git a/erpnext/crm/doctype/appointment/appointment.json b/erpnext/crm/doctype/appointment/appointment.json
index 32df8ec..8517dde 100644
--- a/erpnext/crm/doctype/appointment/appointment.json
+++ b/erpnext/crm/doctype/appointment/appointment.json
@@ -1,4 +1,5 @@
{
+ "actions": [],
"autoname": "format:APMT-{customer_name}-{####}",
"creation": "2019-08-27 10:48:27.926283",
"doctype": "DocType",
@@ -15,7 +16,8 @@
"col_br_2",
"customer_details",
"linked_docs_section",
- "lead",
+ "appointment_with",
+ "party",
"col_br_3",
"calendar_event"
],
@@ -62,12 +64,6 @@
"reqd": 1
},
{
- "fieldname": "lead",
- "fieldtype": "Link",
- "label": "Lead",
- "options": "Lead"
- },
- {
"fieldname": "calendar_event",
"fieldtype": "Link",
"label": "Calendar Event",
@@ -91,9 +87,22 @@
{
"fieldname": "col_br_3",
"fieldtype": "Column Break"
+ },
+ {
+ "fieldname": "appointment_with",
+ "fieldtype": "Link",
+ "label": "Appointment With",
+ "options": "DocType"
+ },
+ {
+ "fieldname": "party",
+ "fieldtype": "Dynamic Link",
+ "label": "Party",
+ "options": "appointment_with"
}
],
- "modified": "2019-10-14 15:23:54.630731",
+ "links": [],
+ "modified": "2020-01-28 16:16:45.447213",
"modified_by": "Administrator",
"module": "CRM",
"name": "Appointment",
diff --git a/erpnext/crm/doctype/appointment/appointment.py b/erpnext/crm/doctype/appointment/appointment.py
index f502930..1988bb6 100644
--- a/erpnext/crm/doctype/appointment/appointment.py
+++ b/erpnext/crm/doctype/appointment/appointment.py
@@ -24,6 +24,14 @@
return lead_list[0].name
return None
+ def find_customer_by_email(self):
+ customer_list = frappe.get_list(
+ 'Customer', filters={'email_id': self.customer_email}, ignore_permissions=True
+ )
+ if customer_list:
+ return customer_list[0].name
+ return None
+
def before_insert(self):
number_of_appointments_in_same_slot = frappe.db.count(
'Appointment', filters={'scheduled_time': self.scheduled_time})
@@ -32,11 +40,18 @@
if (number_of_appointments_in_same_slot >= number_of_agents):
frappe.throw('Time slot is not available')
# Link lead
- if not self.lead:
- self.lead = self.find_lead_by_email()
+ if not self.party:
+ lead = self.find_lead_by_email()
+ customer = self.find_customer_by_email()
+ if customer:
+ self.appointment_with = "Customer"
+ self.party = customer
+ else:
+ self.appointment_with = "Lead"
+ self.party = lead
def after_insert(self):
- if self.lead:
+ if self.party:
# Create Calendar event
self.auto_assign()
self.create_calendar_event()
@@ -89,7 +104,7 @@
def create_lead_and_link(self):
# Return if already linked
- if self.lead:
+ if self.party:
return
lead = frappe.get_doc({
'doctype': 'Lead',
@@ -100,7 +115,7 @@
})
lead.insert(ignore_permissions=True)
# Link lead
- self.lead = lead.name
+ self.party = lead.name
def auto_assign(self):
from frappe.desk.form.assign_to import add as add_assignemnt
@@ -129,14 +144,14 @@
break
def get_assignee_from_latest_opportunity(self):
- if not self.lead:
+ if not self.party:
return None
- if not frappe.db.exists('Lead', self.lead):
+ if not frappe.db.exists('Lead', self.party):
return None
opporutnities = frappe.get_list(
'Opportunity',
filters={
- 'party_name': self.lead,
+ 'party_name': self.party,
},
ignore_permissions=True,
order_by='creation desc')
@@ -159,7 +174,7 @@
'status': 'Open',
'type': 'Public',
'send_reminder': frappe.db.get_single_value('Appointment Booking Settings', 'email_reminders'),
- 'event_participants': [dict(reference_doctype='Lead', reference_docname=self.lead)]
+ 'event_participants': [dict(reference_doctype='Lead', reference_docname=self.party)]
})
employee = _get_employee_from_user(self._assign)
if employee:
diff --git a/erpnext/www/book_appointment/index.js b/erpnext/www/book_appointment/index.js
index 262e31b..377a3cc 100644
--- a/erpnext/www/book_appointment/index.js
+++ b/erpnext/www/book_appointment/index.js
@@ -181,10 +181,32 @@
navigate_to_page(2)
let date_container = document.getElementsByClassName('date-span')[0];
let time_container = document.getElementsByClassName('time-span')[0];
+ setup_search_params();
date_container.innerHTML = moment(window.selected_date).format("MMM Do YYYY");
time_container.innerHTML = moment(window.selected_time, "HH:mm:ss").format("LT");
}
+function setup_search_params() {
+ let search_params = new URLSearchParams(window.location.search);
+ let customer_name = search_params.get("name")
+ let customer_email = search_params.get("email")
+ let detail = search_params.get("details")
+ if (customer_name) {
+ let name_input = document.getElementById("customer_name");
+ name_input.value = customer_name;
+ name_input.disabled = true;
+ }
+ if(customer_email) {
+ let email_input = document.getElementById("customer_email");
+ email_input.value = customer_email;
+ email_input.disabled = true;
+ }
+ if(detail) {
+ let detail_input = document.getElementById("customer_notes");
+ detail_input.value = detail;
+ detail_input.disabled = true;
+ }
+}
async function submit() {
let button = document.getElementById('submit-button');
button.disabled = true;