refactor: exclude submittable doctype from SLA (#29286)
This commit is contained in:
commit
1d976655f5
@ -111,6 +111,7 @@ frappe.ui.form.on('Service Level Agreement', {
|
|||||||
filters: [
|
filters: [
|
||||||
['DocType', 'issingle', '=', 0],
|
['DocType', 'issingle', '=', 0],
|
||||||
['DocType', 'istable', '=', 0],
|
['DocType', 'istable', '=', 0],
|
||||||
|
['DocType', 'is_submittable', '=', 0],
|
||||||
['DocType', 'name', 'not in', invalid_doctypes],
|
['DocType', 'name', 'not in', invalid_doctypes],
|
||||||
['DocType', 'module', 'not in', ["Email", "Core", "Custom", "Event Streaming", "Social", "Data Migration", "Geo", "Desk"]]
|
['DocType', 'module', 'not in', ["Email", "Core", "Custom", "Event Streaming", "Social", "Data Migration", "Geo", "Desk"]]
|
||||||
]
|
]
|
||||||
|
@ -29,6 +29,7 @@ from erpnext.support.doctype.issue.issue import get_holidays
|
|||||||
|
|
||||||
class ServiceLevelAgreement(Document):
|
class ServiceLevelAgreement(Document):
|
||||||
def validate(self):
|
def validate(self):
|
||||||
|
self.validate_selected_doctype()
|
||||||
self.validate_doc()
|
self.validate_doc()
|
||||||
self.validate_status_field()
|
self.validate_status_field()
|
||||||
self.check_priorities()
|
self.check_priorities()
|
||||||
@ -106,6 +107,23 @@ class ServiceLevelAgreement(Document):
|
|||||||
frappe.throw(_("Service Level Agreement for {0} {1} already exists.").format(
|
frappe.throw(_("Service Level Agreement for {0} {1} already exists.").format(
|
||||||
frappe.bold(self.entity_type), frappe.bold(self.entity)))
|
frappe.bold(self.entity_type), frappe.bold(self.entity)))
|
||||||
|
|
||||||
|
def validate_selected_doctype(self):
|
||||||
|
invalid_doctypes = list(frappe.model.core_doctypes_list)
|
||||||
|
invalid_doctypes.extend(['Cost Center', 'Company'])
|
||||||
|
valid_document_types = frappe.get_all('DocType', {
|
||||||
|
'issingle': 0,
|
||||||
|
'istable': 0,
|
||||||
|
'is_submittable': 0,
|
||||||
|
'name': ['not in', invalid_doctypes],
|
||||||
|
'module': ['not in', ["Email", "Core", "Custom", "Event Streaming", "Social", "Data Migration", "Geo", "Desk"]]
|
||||||
|
}, pluck="name")
|
||||||
|
|
||||||
|
if self.document_type not in valid_document_types:
|
||||||
|
frappe.throw(
|
||||||
|
msg=_("Please select valid document type."),
|
||||||
|
title=_("Invalid Document Type")
|
||||||
|
)
|
||||||
|
|
||||||
def validate_status_field(self):
|
def validate_status_field(self):
|
||||||
meta = frappe.get_meta(self.document_type)
|
meta = frappe.get_meta(self.document_type)
|
||||||
if not meta.get_field("status"):
|
if not meta.get_field("status"):
|
||||||
@ -247,9 +265,15 @@ def get_active_service_level_agreement_for(doc):
|
|||||||
]
|
]
|
||||||
|
|
||||||
customer = doc.get('customer')
|
customer = doc.get('customer')
|
||||||
or_filters.append(
|
if customer:
|
||||||
["Service Level Agreement", "entity", "in", [customer] + get_customer_group(customer) + get_customer_territory(customer)]
|
or_filters.extend([
|
||||||
)
|
["Service Level Agreement", "entity", "in", [customer] + get_customer_group(customer) + get_customer_territory(customer)],
|
||||||
|
["Service Level Agreement", "entity_type", "is", "not set"]
|
||||||
|
])
|
||||||
|
else:
|
||||||
|
or_filters.append(
|
||||||
|
["Service Level Agreement", "entity_type", "is", "not set"]
|
||||||
|
)
|
||||||
|
|
||||||
default_sla_filter = filters + [["Service Level Agreement", "default_service_level_agreement", "=", 1]]
|
default_sla_filter = filters + [["Service Level Agreement", "default_service_level_agreement", "=", 1]]
|
||||||
default_sla = frappe.get_all("Service Level Agreement", filters=default_sla_filter,
|
default_sla = frappe.get_all("Service Level Agreement", filters=default_sla_filter,
|
||||||
@ -361,11 +385,18 @@ def apply(doc, method=None):
|
|||||||
sla = get_active_service_level_agreement_for(doc)
|
sla = get_active_service_level_agreement_for(doc)
|
||||||
|
|
||||||
if not sla:
|
if not sla:
|
||||||
|
remove_sla_if_applied(doc)
|
||||||
return
|
return
|
||||||
|
|
||||||
process_sla(doc, sla)
|
process_sla(doc, sla)
|
||||||
|
|
||||||
|
|
||||||
|
def remove_sla_if_applied(doc):
|
||||||
|
doc.service_level_agreement = None
|
||||||
|
doc.response_by = None
|
||||||
|
doc.resolution_by = None
|
||||||
|
|
||||||
|
|
||||||
def process_sla(doc, sla):
|
def process_sla(doc, sla):
|
||||||
|
|
||||||
if not doc.creation:
|
if not doc.creation:
|
||||||
|
@ -1,13 +0,0 @@
|
|||||||
from frappe import _
|
|
||||||
|
|
||||||
|
|
||||||
def get_data():
|
|
||||||
return {
|
|
||||||
'fieldname': 'service_level_agreement',
|
|
||||||
'transactions': [
|
|
||||||
{
|
|
||||||
'label': _('Issue'),
|
|
||||||
'items': ['Issue']
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
@ -244,6 +244,13 @@ class TestServiceLevelAgreement(unittest.TestCase):
|
|||||||
applied_sla = frappe.db.get_value('Lead', lead.name, 'service_level_agreement')
|
applied_sla = frappe.db.get_value('Lead', lead.name, 'service_level_agreement')
|
||||||
self.assertEqual(applied_sla, lead_sla.name)
|
self.assertEqual(applied_sla, lead_sla.name)
|
||||||
|
|
||||||
|
# check if SLA is removed if condition fails
|
||||||
|
lead.reload()
|
||||||
|
lead.source = None
|
||||||
|
lead.save()
|
||||||
|
applied_sla = frappe.db.get_value('Lead', lead.name, 'service_level_agreement')
|
||||||
|
self.assertFalse(applied_sla)
|
||||||
|
|
||||||
def tearDown(self):
|
def tearDown(self):
|
||||||
for d in frappe.get_all("Service Level Agreement"):
|
for d in frappe.get_all("Service Level Agreement"):
|
||||||
frappe.delete_doc("Service Level Agreement", d.name, force=1)
|
frappe.delete_doc("Service Level Agreement", d.name, force=1)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user