diff --git a/desk/src/components/MultipleAvatar.vue b/desk/src/components/MultipleAvatar.vue
index 9625824fd..64fdc4965 100644
--- a/desk/src/components/MultipleAvatar.vue
+++ b/desk/src/components/MultipleAvatar.vue
@@ -6,19 +6,17 @@
avatars?.length > 1 ? 'flex-row-reverse' : 'truncate [&>div]:truncate',
]"
>
-
-
- {{ avatars[0].label }}
-
+
+
+
+ {{ avatars[0].label }}
+
+
@@ -107,6 +107,14 @@ const send = createResource({
},
});
+function handleClose() {
+ if (showFeedback.value) {
+ showFeedbackDialog.value = true;
+ } else {
+ setValue.submit({ fieldname: "status", value: "Closed" });
+ }
+}
+
const setValue = createResource({
url: "frappe.client.set_value",
debounce: 300,
@@ -135,4 +143,12 @@ const showResolveButton = computed(() =>
const showEditor = computed(() =>
["Open", "Replied", "Resolved"].includes(ticket.data.status)
);
+
+const showFeedback = computed(() => {
+ return ticket.data?.communications?.some((c) => {
+ if (c.sender !== ticket.data.raised_by) {
+ return true;
+ }
+ });
+});
diff --git a/desk/src/pages/ticket/TicketCustomerTemplateFields.vue b/desk/src/pages/ticket/TicketCustomerTemplateFields.vue
index d227af138..b01ba4be9 100644
--- a/desk/src/pages/ticket/TicketCustomerTemplateFields.vue
+++ b/desk/src/pages/ticket/TicketCustomerTemplateFields.vue
@@ -58,6 +58,20 @@ const slaData = computed(() => {
dayjs(ticket.data.first_responded_on).isBefore(ticket.data.response_by)
? "Fulfilled"
: "Failed";
+
+ //TODO: no resolution date for unclassified tickets, configurable?
+ if (ticket.data.priority === "Unclassified") {
+ return [
+ {
+ title: "Expected First Response",
+ showSla: ticket.data.first_responded_on,
+ label: responseSla,
+ theme: responseSla === "Fulfilled" ? "green" : "red",
+ value: ticket.data.response_by,
+ },
+ ];
+ }
+
const resolutionSla =
ticket.data.resolution_date &&
dayjs(ticket.data.resolution_date).isBefore(ticket.data.resolution_by)
@@ -66,14 +80,14 @@ const slaData = computed(() => {
return [
{
- title: "First Response",
+ title: "Expected First Response",
showSla: ticket.data.first_responded_on,
label: responseSla,
theme: responseSla === "Fulfilled" ? "green" : "red",
value: ticket.data.response_by,
},
{
- title: "Resolution",
+ title: "Expected Resolution",
showSla: ticket.data.resolution_date,
label: resolutionSla,
theme: resolutionSla === "Fulfilled" ? "green" : "red",
diff --git a/helpdesk/helpdesk/doctype/hd_ticket/hd_ticket.py b/helpdesk/helpdesk/doctype/hd_ticket/hd_ticket.py
index eb507126b..42576eba7 100644
--- a/helpdesk/helpdesk/doctype/hd_ticket/hd_ticket.py
+++ b/helpdesk/helpdesk/doctype/hd_ticket/hd_ticket.py
@@ -351,7 +351,10 @@ def assign_agent(self, agent):
clear_all_assignments("HD Ticket", self.name)
assign({"assign_to": [agent], "doctype": "HD Ticket", "name": self.name})
- self.notify_agent(agent, "Assignment")
+
+ if frappe.session.user != agent:
+ self.notify_agent(agent, "Assignment")
+
publish_event("helpdesk:ticket-assignee-update", {"name": self.name})
def get_assigned_agent(self):