diff --git a/crm/api/activities.py b/crm/api/activities.py
index 42611b24..c458a383 100644
--- a/crm/api/activities.py
+++ b/crm/api/activities.py
@@ -32,10 +32,13 @@ def get_deal_activities(name):
lead = doc[2]
activities = []
+ calls = []
+ notes = []
+ tasks = []
creation_text = "created this deal"
if lead:
- activities = get_lead_activities(lead)
+ activities, calls, notes, tasks = get_lead_activities(lead)
creation_text = "converted the lead to this deal"
activities.append({
@@ -125,10 +128,14 @@ def get_deal_activities(name):
}
activities.append(activity)
+ calls = calls + get_linked_calls(name)
+ notes = notes + get_linked_notes(name)
+ tasks = tasks + get_linked_tasks(name)
+
activities.sort(key=lambda x: x["creation"], reverse=True)
activities = handle_multiple_versions(activities)
- return activities
+ return activities, calls, notes, tasks
def get_lead_activities(name):
get_docinfo('', "CRM Lead", name)
@@ -232,10 +239,14 @@ def get_lead_activities(name):
}
activities.append(activity)
+ calls = get_linked_calls(name)
+ notes = get_linked_notes(name)
+ tasks = get_linked_tasks(name)
+
activities.sort(key=lambda x: x["creation"], reverse=True)
activities = handle_multiple_versions(activities)
- return activities
+ return activities, calls, notes, tasks
@redis_cache()
def get_attachments(name):
@@ -276,4 +287,52 @@ def parse_grouped_versions(versions):
return version
other_versions = versions[1:]
version["other_versions"] = other_versions
- return version
\ No newline at end of file
+ return version
+
+def get_linked_calls(name):
+ calls = frappe.db.get_all(
+ "CRM Call Log",
+ filters={"reference_docname": name},
+ fields=[
+ "name",
+ "caller",
+ "receiver",
+ "from",
+ "to",
+ "duration",
+ "start_time",
+ "end_time",
+ "status",
+ "type",
+ "recording_url",
+ "creation",
+ "note",
+ ],
+ )
+ return calls or []
+
+def get_linked_notes(name):
+ notes = frappe.db.get_all(
+ "CRM Note",
+ filters={"reference_docname": name},
+ fields=['name', 'title', 'content', 'owner', 'modified'],
+ )
+ return notes or []
+
+def get_linked_tasks(name):
+ tasks = frappe.db.get_all(
+ "CRM Task",
+ filters={"reference_docname": name},
+ fields=[
+ "name",
+ "title",
+ "description",
+ "assigned_to",
+ "assigned_to",
+ "due_date",
+ "priority",
+ "status",
+ "modified",
+ ],
+ )
+ return tasks or []
diff --git a/frontend/src/components/Activities.vue b/frontend/src/components/Activities.vue
index 2b8ee34c..7eb43032 100644
--- a/frontend/src/components/Activities.vue
+++ b/frontend/src/components/Activities.vue
@@ -717,14 +717,14 @@
/>
{
- if (versions.data == null) {
- versions.fetch()
- }
- if (calls.data == null) {
- calls.fetch()
- }
- if (notes.data == null) {
- notes.fetch()
- }
- if (tasks.data == null) {
- tasks.fetch()
- }
-})
-
-const calls = createListResource({
- type: 'list',
- doctype: 'CRM Call Log',
- cache: ['Call Logs', doc.value.data.name],
- fields: [
- 'name',
- 'caller',
- 'receiver',
- 'from',
- 'to',
- 'duration',
- 'start_time',
- 'end_time',
- 'status',
- 'type',
- 'recording_url',
- 'creation',
- 'note',
- ],
- filters: { reference_docname: doc.value.data.name },
- orderBy: 'creation desc',
- pageLength: 999,
- transform: (docs) => {
- docs.forEach((doc) => {
- doc.show_recording = false
- doc.activity_type =
- doc.type === 'Incoming' ? 'incoming_call' : 'outgoing_call'
- doc.duration = secondsToDuration(doc.duration)
- if (doc.type === 'Incoming') {
- doc.caller = {
- label:
- getContact(doc.from)?.full_name ||
- getLeadContact(doc.from)?.full_name ||
- 'Unknown',
- image: getContact(doc.from)?.image || getLeadContact(doc.from)?.image,
+ auto: true,
+ transform: ([versions, calls, notes, tasks]) => {
+ if (calls?.length) {
+ calls.forEach((doc) => {
+ doc.show_recording = false
+ doc.activity_type =
+ doc.type === 'Incoming' ? 'incoming_call' : 'outgoing_call'
+ doc.duration = secondsToDuration(doc.duration)
+ if (doc.type === 'Incoming') {
+ doc.caller = {
+ label:
+ getContact(doc.from)?.full_name ||
+ getLeadContact(doc.from)?.full_name ||
+ 'Unknown',
+ image:
+ getContact(doc.from)?.image || getLeadContact(doc.from)?.image,
+ }
+ doc.receiver = {
+ label: getUser(doc.receiver).full_name,
+ image: getUser(doc.receiver).user_image,
+ }
+ } else {
+ doc.caller = {
+ label: getUser(doc.caller).full_name,
+ image: getUser(doc.caller).user_image,
+ }
+ doc.receiver = {
+ label:
+ getContact(doc.to)?.full_name ||
+ getLeadContact(doc.to)?.full_name ||
+ 'Unknown',
+ image: getContact(doc.to)?.image || getLeadContact(doc.to)?.image,
+ }
}
- doc.receiver = {
- label: getUser(doc.receiver).full_name,
- image: getUser(doc.receiver).user_image,
- }
- } else {
- doc.caller = {
- label: getUser(doc.caller).full_name,
- image: getUser(doc.caller).user_image,
- }
- doc.receiver = {
- label:
- getContact(doc.to)?.full_name ||
- getLeadContact(doc.to)?.full_name ||
- 'Unknown',
- image: getContact(doc.to)?.image || getLeadContact(doc.to)?.image,
- }
- }
- })
- return docs
+ })
+ }
+ return { versions, calls, notes, tasks }
},
})
-const notes = createListResource({
- type: 'list',
- doctype: 'CRM Note',
- cache: ['Notes', doc.value.data.name],
- fields: ['name', 'title', 'content', 'owner', 'modified'],
- filters: { reference_docname: doc.value.data.name },
- orderBy: 'modified desc',
- pageLength: 999,
-})
-
-const tasks = createListResource({
- type: 'list',
- doctype: 'CRM Task',
- cache: ['Tasks', doc.value.data.name],
- fields: [
- 'name',
- 'title',
- 'description',
- 'assigned_to',
- 'assigned_to',
- 'due_date',
- 'priority',
- 'status',
- 'modified',
- ],
- filters: { reference_docname: doc.value.data.name },
- orderBy: 'modified desc',
- pageLength: 999,
-})
-
-function all_activities() {
- if (!versions.data) return []
- if (!calls.data) return versions.data
- return [...versions.data, ...calls.data].sort(
+function get_activities() {
+ if (!all_activities.data?.versions) return []
+ if (!all_activities.data?.calls.length)
+ return all_activities.data.versions || []
+ return [...all_activities.data.versions, ...all_activities.data.calls].sort(
(a, b) => new Date(a.creation) - new Date(b.creation)
)
}
@@ -919,22 +855,25 @@ function all_activities() {
const activities = computed(() => {
let activities = []
if (props.title == 'Activity') {
- activities = all_activities()
+ activities = get_activities()
} else if (props.title == 'Emails') {
- if (!versions.data) return []
- activities = versions.data
+ if (!all_activities.data?.versions) return []
+ activities = all_activities.data.versions
.filter((activity) => activity.activity_type === 'communication')
.sort((a, b) => new Date(a.creation) - new Date(b.creation))
} else if (props.title == 'Calls') {
- return calls.data?.sort(
+ if (!all_activities.data?.calls) return []
+ return all_activities.data.calls.sort(
(a, b) => new Date(a.creation) - new Date(b.creation)
)
} else if (props.title == 'Tasks') {
- return tasks.data?.sort(
+ if (!all_activities.data?.tasks) return []
+ return all_activities.data.tasks.sort(
(a, b) => new Date(a.creation) - new Date(b.creation)
)
} else if (props.title == 'Notes') {
- return notes.data?.sort(
+ if (!all_activities.data?.notes) return []
+ return all_activities.data.notes.sort(
(a, b) => new Date(a.creation) - new Date(b.creation)
)
}
@@ -1051,7 +990,7 @@ async function deleteNote(name) {
doctype: 'CRM Note',
name,
})
- notes.reload()
+ all_activities.reload()
}
// Tasks
@@ -1075,7 +1014,7 @@ async function deleteTask(name) {
doctype: 'CRM Task',
name,
})
- tasks.reload()
+ all_activities.reload()
}
function updateTaskStatus(status, task) {
@@ -1085,7 +1024,7 @@ function updateTaskStatus(status, task) {
fieldname: 'status',
value: status,
}).then(() => {
- tasks.reload()
+ all_activities.reload()
})
}