refactor: change labels & function names

This commit is contained in:
Pratik 2025-06-23 05:15:40 +00:00
parent ca985a0b76
commit 34102ef6ef
5 changed files with 92 additions and 63 deletions

View File

@ -678,6 +678,7 @@ def remove_assignments(doctype, name, assignees, ignore_permissions=False):
ignore_permissions=ignore_permissions,
)
@frappe.whitelist()
def get_assigned_users(doctype, name, default_assigned_to=None):
assigned_users = frappe.get_all(
@ -749,85 +750,93 @@ def getCounts(d, doctype):
@frappe.whitelist()
def getLinkedDocs(doctype, docname):
def get_linked_docs_of_document(doctype, docname):
doc = frappe.get_doc(doctype, docname)
linked_docs = get_linked_docs(doc)
dynamic_linked_docs = get_dynamic_linked_docs(doc)
linked_docs.extend(dynamic_linked_docs)
linked_docs = list({doc["reference_docname"]: doc for doc in linked_docs}.values())
docs_data = []
for doc in linked_docs:
data = frappe.get_doc(doc["reference_doctype"], doc["reference_docname"])
title = data.get("title")
if data.doctype == "CRM Call Log":
title = f"CRM Call Log - from {data.get('from')} to {data.get('to')}"
title = f"Call from {data.get('from')} to {data.get('to')}"
if data.doctype == "CRM Deal":
title = data.get("organization")
docs_data.append({
"doc": data.doctype,
"title": title or data.get("name"),
"reference_docname": doc["reference_docname"],
"reference_doctype": doc["reference_doctype"],
})
docs_data.append(
{
"doc": data.doctype,
"title": title or data.get("name"),
"reference_docname": doc["reference_docname"],
"reference_doctype": doc["reference_doctype"],
}
)
return docs_data
def removeDocLink(doctype, docname):
def remove_doc_link(doctype, docname):
linked_doc_data = frappe.get_doc(doctype, docname)
linked_doc_data.update({
"reference_doctype": None,
"reference_docname": None,
})
linked_doc_data.update(
{
"reference_doctype": None,
"reference_docname": None,
}
)
linked_doc_data.save(ignore_permissions=True)
def removeContactLink(doctype, docname):
def remove_contact_link(doctype, docname):
linked_doc_data = frappe.get_doc(doctype, docname)
linked_doc_data.update({
"contact": None,
"contacts": [],
})
linked_doc_data.update(
{
"contact": None,
"contacts": [],
}
)
linked_doc_data.save(ignore_permissions=True)
@frappe.whitelist()
def removeLinkedDocReference(items, removeContact=None, delete=False):
def remove_linked_doc_reference(items, remove_contact=None, delete=False):
if isinstance(items, str):
items = frappe.parse_json(items)
for item in items:
if removeContact:
removeContactLink(item["doctype"], item["docname"])
if remove_contact:
remove_contact_link(item["doctype"], item["docname"])
else:
removeDocLink(item["doctype"], item["docname"])
remove_doc_link(item["doctype"], item["docname"])
if delete:
frappe.delete_doc(item["doctype"], item["docname"])
return "success"
@frappe.whitelist()
def deleteBulkDocs(doctype, items, deleteLinked=False):
def delete_bulk_docs(doctype, items, delete_linked=False):
from frappe.desk.reportview import delete_bulk
items = frappe.parse_json(items)
for doc in items:
linked_docs = getLinkedDocs(doctype, doc)
linked_docs = get_linked_docs_of_document(doctype, doc)
for linked_doc in linked_docs:
removeLinkedDocReference([
{
"doctype": linked_doc["reference_doctype"],
"docname": linked_doc["reference_docname"],
}
] ,
removeContact=doctype=="Contact",
delete=deleteLinked
remove_linked_doc_reference(
[
{
"doctype": linked_doc["reference_doctype"],
"docname": linked_doc["reference_docname"],
}
],
remove_contact=doctype == "Contact",
delete=delete_linked,
)
if len(items) > 10:
frappe.enqueue("frappe.desk.reportview.delete_bulk", doctype=doctype, items=items)
else:

View File

@ -54,7 +54,6 @@ declare module 'vue' {
ContactsIcon: typeof import('./src/components/Icons/ContactsIcon.vue')['default']
ContactsListView: typeof import('./src/components/ListViews/ContactsListView.vue')['default']
ConvertIcon: typeof import('./src/components/Icons/ConvertIcon.vue')['default']
copy: typeof import('./src/components/DeleteLinkedDocModal copy.vue')['default']
CountUpTimer: typeof import('./src/components/CountUpTimer.vue')['default']
CreateDocumentModal: typeof import('./src/components/Modals/CreateDocumentModal.vue')['default']
CRMLogo: typeof import('./src/components/Icons/CRMLogo.vue')['default']

View File

@ -149,10 +149,10 @@ const confirmUnlink = () => {
}
const deleteDocs = () => {
call('crm.api.doc.deleteBulkDocs', {
call('crm.api.doc.delete_bulk_docs', {
items: props.items,
doctype: props.doctype,
deleteLinked: confirmDeleteInfo.value.delete,
delete_linked: confirmDeleteInfo.value.delete,
}).then(() => {
confirmDeleteInfo.value = {
show: false,

View File

@ -5,7 +5,11 @@
<div class="mb-6 flex items-center justify-between">
<div>
<h3 class="text-2xl leading-6 text-ink-gray-9 font-semibold">
{{ __('Delete') }}
{{
linkedDocs?.length == 0
? __('Delete')
: __('Delete or unlink linked documents')
}}
</h3>
</div>
<div class="flex items-center gap-1">
@ -32,7 +36,7 @@
key: 'title',
},
{
label: 'Doctype',
label: 'Master',
key: 'reference_doctype',
width: '30%',
},
@ -65,7 +69,7 @@
<div class="flex gap-1">
<FeatherIcon name="trash" class="h-4 w-4" />
<span>
{{ __('Delete and unlink') }}
{{ __('Delete') }}
{{
viewControls?.selections?.length == 0
? __('all')
@ -76,7 +80,8 @@
</Button>
<Button
v-if="linkedDocs?.length > 0"
variant="solid"
variant="subtle"
theme="gray"
@click="confirmUnlink()"
>
<div class="flex gap-1">
@ -172,7 +177,7 @@ const confirmDeleteInfo = ref({
})
const linkedDocsResource = createResource({
url: 'crm.api.doc.getLinkedDocs',
url: 'crm.api.doc.get_linked_docs_of_document',
params: {
doctype: props.doctype,
docname: props.docname,
@ -211,9 +216,9 @@ const unlinkLinkedDoc = (doc) => {
}))
}
call('crm.api.doc.removeLinkedDocReference', {
call('crm.api.doc.remove_linked_doc_reference', {
items: selectedDocs,
removeContact: props.doctype == 'Contact',
remove_contact: props.doctype == 'Contact',
delete: doc.delete,
}).then(() => {
linkedDocsResource.reload()
@ -231,7 +236,7 @@ const confirmDelete = () => {
: viewControls.value.selections.length
confirmDeleteInfo.value = {
show: true,
title: __('Delete'),
title: __('Delete linked item'),
message: __('Are you sure you want to delete {0} linked item(s)?', [items]),
delete: true,
}
@ -244,7 +249,7 @@ const confirmUnlink = () => {
: viewControls.value.selections.length
confirmDeleteInfo.value = {
show: true,
title: __('Unlink'),
title: __('Unlink linked item'),
message: __('Are you sure you want to unlink {0} linked item(s)?', [items]),
delete: false,
}
@ -256,6 +261,7 @@ const removeDocLinks = () => {
reference_docname: props.docname,
delete: confirmDeleteInfo.value.delete,
})
viewControls.value.updateSelections([])
}
const deleteDoc = async () => {

View File

@ -19,15 +19,6 @@
:item="column"
@columnWidthUpdated="emit('columnWidthUpdated', column)"
>
<Button
v-if="column.key == 'reference_docname'"
variant="ghosted"
class="!h-4"
:class="isLikeFilterApplied ? 'fill-red-500' : 'fill-white'"
@click="() => emit('applyLikeFilter')"
>
<HeartIcon class="h-4 w-4" />
</Button>
</ListHeaderItem>
</ListHeader>
<div class="*:mx-0 *:sm:mx-0">
@ -50,6 +41,12 @@
@click.stop="viewLinkedDoc(row)"
/>
</div>
<span
v-if="column.key === 'reference_doctype'"
class="truncate text-base flex gap-2"
>
{{ getDoctypeName(row.reference_doctype) }}
</span>
</template>
</ListRowItem>
</ListRows>
@ -58,7 +55,6 @@
</template>
<script setup>
import HeartIcon from '@/components/Icons/HeartIcon.vue'
import ListRows from '@/components/ListViews/ListRows.vue'
import { ListView, ListHeader, ListHeaderItem, ListRowItem } from 'frappe-ui'
import { ref } from 'vue'
@ -123,7 +119,7 @@ const viewLinkedDoc = (doc) => {
page = 'contacts'
id = doc.reference_docname
break
case 'Organization':
case 'CRM Organization':
page = 'organizations'
id = doc.reference_docname
break
@ -136,4 +132,23 @@ const viewLinkedDoc = (doc) => {
}
window.open(`/crm/${page}/${id}`)
}
const getDoctypeName = (doctype) => {
switch (doctype) {
case 'CRM Lead':
return 'Lead'
case 'CRM Call Log':
return 'Call Log'
case 'CRM Task':
return 'Task'
case 'Contact':
return 'Contact'
case 'CRM Organization':
return 'Organization'
case 'FCRM Note':
return 'Note'
default:
return doctype
}
}
</script>