Ignore system article in notifications.
This commit is contained in:
parent
43bb991f27
commit
dfc5900234
9 changed files with 103 additions and 32 deletions
|
@ -23,6 +23,9 @@ class Observer::Ticket::Article::CommunicateEmail::BackgroundJob
|
|||
sender = Ticket::Article::Sender.lookup(id: record.sender_id)
|
||||
if sender['name'] == 'System'
|
||||
notification = true
|
||||
|
||||
# ignore notifications in developer mode
|
||||
return if Setting.get('developer_mode') == true
|
||||
end
|
||||
|
||||
# get linked channel and send
|
||||
|
|
|
@ -5,42 +5,57 @@ class Observer::Ticket::ArticleChanges < ActiveRecord::Observer
|
|||
|
||||
def after_create(record)
|
||||
|
||||
article_count_update(record)
|
||||
changed = false
|
||||
if article_count_update(record)
|
||||
changed = true
|
||||
end
|
||||
|
||||
first_response_update(record)
|
||||
if first_response_update(record)
|
||||
changed = true
|
||||
end
|
||||
|
||||
sender_type_update(record)
|
||||
if sender_type_update(record)
|
||||
changed = true
|
||||
end
|
||||
|
||||
last_contact_update(record)
|
||||
if last_contact_update(record)
|
||||
changed = true
|
||||
end
|
||||
|
||||
# save ticket
|
||||
return if !changed
|
||||
record.ticket.save
|
||||
end
|
||||
|
||||
# get article count
|
||||
def article_count_update(record)
|
||||
record.ticket.article_count = record.ticket.articles.count
|
||||
current_count = record.ticket.article_count
|
||||
sender = Ticket::Article::Sender.lookup(name: 'System')
|
||||
count = Ticket::Article.where(ticket_id: record.ticket_id).where('sender_id NOT IN (?)', sender.id).count
|
||||
return false if current_count == count
|
||||
record.ticket.article_count = count
|
||||
true
|
||||
end
|
||||
|
||||
# set frist response
|
||||
def first_response_update(record)
|
||||
|
||||
# return if we run import mode
|
||||
return if Setting.get('import_mode')
|
||||
return false if Setting.get('import_mode')
|
||||
|
||||
# if article in internal
|
||||
return true if record.internal
|
||||
return false if record.internal
|
||||
|
||||
# if sender is not agent
|
||||
sender = Ticket::Article::Sender.lookup(id: record.sender_id)
|
||||
type = Ticket::Article::Type.lookup(id: record.type_id)
|
||||
return true if sender.name != 'Agent'
|
||||
return false if sender.name != 'Agent'
|
||||
|
||||
# if article is a message to customer
|
||||
return true if !type.communication
|
||||
type = Ticket::Article::Type.lookup(id: record.type_id)
|
||||
return false if !type.communication
|
||||
|
||||
# check if first_response is already set
|
||||
return true if record.ticket.first_response
|
||||
return false if record.ticket.first_response
|
||||
|
||||
# set first_response
|
||||
record.ticket.first_response = record.created_at
|
||||
|
@ -53,20 +68,25 @@ class Observer::Ticket::ArticleChanges < ActiveRecord::Observer
|
|||
|
||||
# ignore if create channel is already set
|
||||
count = Ticket::Article.where(ticket_id: record.ticket_id).count
|
||||
return if count > 1
|
||||
return false if count > 1
|
||||
|
||||
record.ticket.create_article_type_id = record.type_id
|
||||
record.ticket.create_article_sender_id = record.sender_id
|
||||
true
|
||||
end
|
||||
|
||||
# set last contact
|
||||
def last_contact_update(record)
|
||||
|
||||
# if article in internal
|
||||
return true if record.internal
|
||||
return false if record.internal
|
||||
|
||||
# if sender is system
|
||||
sender = Ticket::Article::Sender.lookup(id: record.sender_id)
|
||||
return false if sender.name == 'System'
|
||||
|
||||
# if article is a message to customer
|
||||
return true if !Ticket::Article::Type.lookup(id: record.type_id).communication
|
||||
return false if !Ticket::Article::Type.lookup(id: record.type_id).communication
|
||||
|
||||
# if sender is customer
|
||||
sender = Ticket::Article::Sender.lookup(id: record.sender_id)
|
||||
|
@ -74,7 +94,7 @@ class Observer::Ticket::ArticleChanges < ActiveRecord::Observer
|
|||
if sender.name == 'Customer'
|
||||
|
||||
# if customer is sending agains, ignore update of last contact (usecase of update escalation)
|
||||
return true if ticket.last_contact_customer &&
|
||||
return false if ticket.last_contact_customer &&
|
||||
ticket.last_contact &&
|
||||
ticket.last_contact_customer == ticket.last_contact
|
||||
|
||||
|
@ -94,7 +114,7 @@ class Observer::Ticket::ArticleChanges < ActiveRecord::Observer
|
|||
end
|
||||
|
||||
# if sender is not agent
|
||||
return if sender.name != 'Agent'
|
||||
return false if sender.name != 'Agent'
|
||||
|
||||
# set last_contact_agent
|
||||
record.ticket.last_contact_agent = record.created_at
|
||||
|
|
|
@ -33,6 +33,13 @@ class Transaction::Notification
|
|||
ticket = Ticket.find(@item[:object_id])
|
||||
if @item[:article_id]
|
||||
article = Ticket::Article.find(@item[:article_id])
|
||||
|
||||
# ignore notifications
|
||||
sender = Ticket::Article::Sender.lookup(id: article.sender_id)
|
||||
if sender && sender.name == 'System'
|
||||
return if @item[:changes].empty?
|
||||
article = nil
|
||||
end
|
||||
end
|
||||
|
||||
# find recipients
|
||||
|
|
|
@ -37,6 +37,7 @@ class Transaction::Trigger
|
|||
article = Ticket::Article.lookup(id: @item[:article_id])
|
||||
end
|
||||
|
||||
original_user_id = UserInfo.current_user_id
|
||||
UserInfo.current_user_id = 1
|
||||
|
||||
triggers.each {|trigger|
|
||||
|
@ -89,6 +90,7 @@ class Transaction::Trigger
|
|||
|
||||
ticket.perform_changes(trigger.perform, 'trigger', @item)
|
||||
}
|
||||
UserInfo.current_user_id = original_user_id
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
@ -3878,7 +3878,7 @@ Trigger.create_or_update(
|
|||
},
|
||||
perform: {
|
||||
'notification.email' => {
|
||||
'body' => '<p>Your request (#{config.ticket_hook}##{ticket.number}) has been received and will be reviewed by our support staff.<p>
|
||||
'body' => '<p>Your request (#{config.ticket_hook}#{ticket.number}) has been received and will be reviewed by our support staff.<p>
|
||||
<br/>
|
||||
<p>To provide additional information, please reply to this email or click on the following link:
|
||||
<a href="#{config.http_type}://#{config.fqdn}/#ticket/zoom/#{ticket.id}">#{config.http_type}://#{config.fqdn}/#ticket/zoom/#{ticket.id}</a>
|
||||
|
@ -3917,7 +3917,7 @@ Trigger.create_or_update(
|
|||
},
|
||||
perform: {
|
||||
'notification.email' => {
|
||||
'body' => '<p>Your follow up for (#{config.ticket_hook}##{ticket.number}) has been received and will be reviewed by our support staff.<p>
|
||||
'body' => '<p>Your follow up for (#{config.ticket_hook}#{ticket.number}) has been received and will be reviewed by our support staff.<p>
|
||||
<br/>
|
||||
<p>To provide additional information, please reply to this email or click on the following link:
|
||||
<a href="#{config.http_type}://#{config.fqdn}/#ticket/zoom/#{ticket.id}">#{config.http_type}://#{config.fqdn}/#ticket/zoom/#{ticket.id}</a>
|
||||
|
|
|
@ -3,6 +3,45 @@ require 'test_helper'
|
|||
|
||||
class TicketNotificationTest < ActiveSupport::TestCase
|
||||
|
||||
Trigger.create_or_update(
|
||||
name: 'auto reply - new ticket',
|
||||
condition: {
|
||||
'ticket.action' => {
|
||||
'operator' => 'is',
|
||||
'value' => 'create',
|
||||
},
|
||||
'ticket.state_id' => {
|
||||
'operator' => 'is not',
|
||||
'value' => Ticket::State.lookup(name: 'closed').id,
|
||||
},
|
||||
'article.type_id' => {
|
||||
'operator' => 'is',
|
||||
'value' => [
|
||||
Ticket::Article::Type.lookup(name: 'email').id,
|
||||
Ticket::Article::Type.lookup(name: 'phone').id,
|
||||
Ticket::Article::Type.lookup(name: 'web').id,
|
||||
],
|
||||
},
|
||||
},
|
||||
perform: {
|
||||
'notification.email' => {
|
||||
'body' => '<p>Your request (Ticket##{ticket.number}) has been received and will be reviewed by our support staff.<p>
|
||||
<br/>
|
||||
<p>To provide additional information, please reply to this email or click on the following link:
|
||||
<a href="#{config.http_type}://#{config.fqdn}/#ticket/zoom/#{ticket.id}">#{config.http_type}://#{config.fqdn}/#ticket/zoom/#{ticket.id}</a>
|
||||
</p>
|
||||
<br/>
|
||||
<p><i><a href="http://zammad.com">Zammad</a>, your customer support system</i></p>',
|
||||
'recipient' => 'ticket_customer',
|
||||
'subject' => 'Thanks for your inquiry (#{ticket.title})',
|
||||
},
|
||||
},
|
||||
disable_notification: true,
|
||||
active: true,
|
||||
created_by_id: 1,
|
||||
updated_by_id: 1,
|
||||
)
|
||||
|
||||
# create agent1 & agent2
|
||||
groups = Group.where(name: 'Users')
|
||||
roles = Role.where(name: 'Agent')
|
||||
|
@ -64,7 +103,7 @@ class TicketNotificationTest < ActiveSupport::TestCase
|
|||
ticket1 = Ticket.create(
|
||||
title: 'some notification test 1',
|
||||
group: Group.lookup(name: 'Users'),
|
||||
customer: agent1,
|
||||
customer: customer,
|
||||
state: Ticket::State.lookup(name: 'new'),
|
||||
priority: Ticket::Priority.lookup(name: '2 normal'),
|
||||
updated_by_id: agent1.id,
|
||||
|
@ -98,7 +137,7 @@ class TicketNotificationTest < ActiveSupport::TestCase
|
|||
ticket1 = Ticket.create(
|
||||
title: 'some notification test 1',
|
||||
group: Group.lookup(name: 'Users'),
|
||||
customer: agent1,
|
||||
customer: customer,
|
||||
state: Ticket::State.lookup(name: 'new'),
|
||||
priority: Ticket::Priority.lookup(name: '2 normal'),
|
||||
updated_by_id: agent1.id,
|
||||
|
|
|
@ -371,7 +371,7 @@ class TicketTriggerTest < ActiveSupport::TestCase
|
|||
},
|
||||
'ticket.state_id' => {
|
||||
'operator' => 'is not',
|
||||
'value' => '4',
|
||||
'value' => Ticket::State.lookup(name: 'closed').id,
|
||||
},
|
||||
'article.type_id' => {
|
||||
'operator' => 'is',
|
||||
|
|
Loading…
Reference in a new issue