Added escalation notification.
This commit is contained in:
parent
fa653b3743
commit
91dc89c32b
10 changed files with 153 additions and 19 deletions
|
@ -154,6 +154,7 @@ class App.OnlineNotificationWidget extends App.Controller
|
||||||
title = item.objectNative.activityMessage(item)
|
title = item.objectNative.activityMessage(item)
|
||||||
else
|
else
|
||||||
title = "Need objectNative in item #{item.object}.find(#{item.o_id})"
|
title = "Need objectNative in item #{item.object}.find(#{item.o_id})"
|
||||||
|
title = title.replace(/<.+?>/g, '"')
|
||||||
@notifyDesktop(
|
@notifyDesktop(
|
||||||
url: item.link
|
url: item.link
|
||||||
title: title
|
title: title
|
||||||
|
|
|
@ -130,7 +130,7 @@ class Observer::Ticket::Notification::BackgroundJob
|
||||||
next if @p[:type] == 'update' && !article && ( !changes || changes.empty? )
|
next if @p[:type] == 'update' && !article && ( !changes || changes.empty? )
|
||||||
|
|
||||||
# check if today already notified
|
# check if today already notified
|
||||||
if @p[:type] == 'reminder_reached' || @p[:type] == 'escalation'
|
if @p[:type] == 'reminder_reached' || @p[:type] == 'escalation' || @p[:type] == 'escalation_warning'
|
||||||
identifier = user.email
|
identifier = user.email
|
||||||
if !identifier || identifier == ''
|
if !identifier || identifier == ''
|
||||||
identifier = user.login
|
identifier = user.login
|
||||||
|
@ -154,11 +154,17 @@ class Observer::Ticket::Notification::BackgroundJob
|
||||||
created_by_id = ticket.updated_by_id || 1
|
created_by_id = ticket.updated_by_id || 1
|
||||||
|
|
||||||
# delete old notifications
|
# delete old notifications
|
||||||
if @p[:type] == 'reminder_reached' || @p[:type] == 'escalation'
|
if @p[:type] == 'reminder_reached'
|
||||||
seen = false
|
seen = false
|
||||||
created_by_id = 1
|
created_by_id = 1
|
||||||
OnlineNotification.remove_by_type('Ticket', ticket.id, @p[:type], user)
|
OnlineNotification.remove_by_type('Ticket', ticket.id, @p[:type], user)
|
||||||
|
|
||||||
|
elsif @p[:type] == 'escalation' || @p[:type] == 'escalation_warning'
|
||||||
|
seen = false
|
||||||
|
created_by_id = 1
|
||||||
|
OnlineNotification.remove_by_type('Ticket', ticket.id, 'escalation', user)
|
||||||
|
OnlineNotification.remove_by_type('Ticket', ticket.id, 'escalation_warning', user)
|
||||||
|
|
||||||
# on updates without state changes create unseen messages
|
# on updates without state changes create unseen messages
|
||||||
elsif @p[:type] != 'create' && (!@p[:changes] || @p[:changes].empty? || !@p[:changes]['state_id'])
|
elsif @p[:type] != 'create' && (!@p[:changes] || @p[:changes].empty? || !@p[:changes]['state_id'])
|
||||||
seen = false
|
seen = false
|
||||||
|
@ -197,6 +203,8 @@ class Observer::Ticket::Notification::BackgroundJob
|
||||||
template = 'ticket_reminder_reached'
|
template = 'ticket_reminder_reached'
|
||||||
elsif @p[:type] == 'escalation'
|
elsif @p[:type] == 'escalation'
|
||||||
template = 'ticket_escalation'
|
template = 'ticket_escalation'
|
||||||
|
elsif @p[:type] == 'escalation_warning'
|
||||||
|
template = 'ticket_escalation_warning'
|
||||||
else
|
else
|
||||||
fail "unknown type for notification #{@p[:type]}"
|
fail "unknown type for notification #{@p[:type]}"
|
||||||
end
|
end
|
||||||
|
|
|
@ -126,7 +126,7 @@ returns
|
||||||
|
|
||||||
processes tickets which have reached their pending time and sets next state_id
|
processes tickets which have reached their pending time and sets next state_id
|
||||||
|
|
||||||
processed_tickets = Ticket.process_pending()
|
processed_tickets = Ticket.process_pending
|
||||||
|
|
||||||
returns
|
returns
|
||||||
|
|
||||||
|
@ -196,6 +196,54 @@ returns
|
||||||
|
|
||||||
=begin
|
=begin
|
||||||
|
|
||||||
|
processes escalated tickets
|
||||||
|
|
||||||
|
processed_tickets = Ticket.process_escalation
|
||||||
|
|
||||||
|
returns
|
||||||
|
|
||||||
|
processed_tickets = [<Ticket>, ...]
|
||||||
|
|
||||||
|
=end
|
||||||
|
|
||||||
|
def self.process_escalation
|
||||||
|
result = []
|
||||||
|
|
||||||
|
# get max warning diff
|
||||||
|
|
||||||
|
tickets = where('escalation_time <= ?', Time.zone.now + 15.minutes)
|
||||||
|
|
||||||
|
tickets.each {|ticket|
|
||||||
|
|
||||||
|
# get sla
|
||||||
|
sla = ticket.escalation_calculation_get_sla
|
||||||
|
|
||||||
|
# send escalation
|
||||||
|
if ticket.escalation_time < Time.zone.now
|
||||||
|
bg = Observer::Ticket::Notification::BackgroundJob.new(
|
||||||
|
ticket_id: ticket.id,
|
||||||
|
article_id: ticket.articles.last.id,
|
||||||
|
type: 'escalation',
|
||||||
|
)
|
||||||
|
bg.perform
|
||||||
|
result.push ticket
|
||||||
|
next
|
||||||
|
end
|
||||||
|
|
||||||
|
# check if warning need to be sent
|
||||||
|
bg = Observer::Ticket::Notification::BackgroundJob.new(
|
||||||
|
ticket_id: ticket.id,
|
||||||
|
article_id: ticket.articles.last.id,
|
||||||
|
type: 'escalation_warning',
|
||||||
|
)
|
||||||
|
bg.perform
|
||||||
|
result.push ticket
|
||||||
|
}
|
||||||
|
result
|
||||||
|
end
|
||||||
|
|
||||||
|
=begin
|
||||||
|
|
||||||
merge tickets
|
merge tickets
|
||||||
|
|
||||||
ticket = Ticket.find(123)
|
ticket = Ticket.find(123)
|
||||||
|
|
18
app/views/mailer/ticket_escalation/de.html.erb
Normal file
18
app/views/mailer/ticket_escalation/de.html.erb
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
Ticket ist eskaliert (<%= d 'ticket.title' %>)
|
||||||
|
|
||||||
|
<p>Hallo <%= d 'recipient.firstname' %>,</p>
|
||||||
|
<br>
|
||||||
|
<p>Ticket (<%= d 'ticket.title' %>) von "<b><%= d 'ticket.customer.longname' %></b>" ist seit "<%= d 'ticket.escalation_time' %>" eskaliert!</p>
|
||||||
|
<br>
|
||||||
|
<% if @objects[:article] %>
|
||||||
|
<p>
|
||||||
|
<%= t 'Information' %>:
|
||||||
|
<blockquote type="cite">
|
||||||
|
<%= a 'article' %>
|
||||||
|
</blockquote>
|
||||||
|
</p>
|
||||||
|
<% end %>
|
||||||
|
<br>
|
||||||
|
<p>
|
||||||
|
<a href="<%= c 'http_type' %>://<%= c 'fqdn' %>/#ticket/zoom/<%= d 'ticket.id' %>" target="zammad_app"><%= t 'View this in Zammad' %></a>
|
||||||
|
</p>
|
18
app/views/mailer/ticket_escalation/en.html.erb
Normal file
18
app/views/mailer/ticket_escalation/en.html.erb
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
Ticket is escalated (<%= d 'ticket.title' %>)
|
||||||
|
|
||||||
|
<p>Hi <%= d 'recipient.firstname' %>,</p>
|
||||||
|
<br>
|
||||||
|
<p>Ticket (<%= d 'ticket.title' %>) from "<b><%= d 'ticket.customer.longname' %></b>" is escalated since "<%= d 'ticket.escalation_time' %>"!</p>
|
||||||
|
<br>
|
||||||
|
<% if @objects[:article] %>
|
||||||
|
<p>
|
||||||
|
<%= t 'Information' %>:
|
||||||
|
<blockquote type="cite">
|
||||||
|
<%= a 'article' %>
|
||||||
|
</blockquote>
|
||||||
|
</p>
|
||||||
|
<% end %>
|
||||||
|
<br>
|
||||||
|
<p>
|
||||||
|
<a href="<%= c 'http_type' %>://<%= c 'fqdn' %>/#ticket/zoom/<%= d 'ticket.id' %>" target="zammad_app"><%= t 'View this in Zammad' %></a>
|
||||||
|
</p>
|
18
app/views/mailer/ticket_escalation_warning/de.html.erb
Normal file
18
app/views/mailer/ticket_escalation_warning/de.html.erb
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
Ticket wird eskalieren (<%= d 'ticket.title' %>)
|
||||||
|
|
||||||
|
<p>Hallo <%= d 'recipient.firstname' %>,</p>
|
||||||
|
<br>
|
||||||
|
<p>Ticket (<%= d 'ticket.title' %>) von "<b><%= d 'ticket.customer.longname' %></b>" wird um "<%= d 'ticket.escalation_time' %>" eskalieren!</p>
|
||||||
|
<br>
|
||||||
|
<% if @objects[:article] %>
|
||||||
|
<p>
|
||||||
|
<%= t 'Information' %>:
|
||||||
|
<blockquote type="cite">
|
||||||
|
<%= a 'article' %>
|
||||||
|
</blockquote>
|
||||||
|
</p>
|
||||||
|
<% end %>
|
||||||
|
<br>
|
||||||
|
<p>
|
||||||
|
<a href="<%= c 'http_type' %>://<%= c 'fqdn' %>/#ticket/zoom/<%= d 'ticket.id' %>" target="zammad_app"><%= t 'View this in Zammad' %></a>
|
||||||
|
</p>
|
18
app/views/mailer/ticket_escalation_warning/en.html.erb
Normal file
18
app/views/mailer/ticket_escalation_warning/en.html.erb
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
Ticket will escalated (<%= d 'ticket.title' %>)
|
||||||
|
|
||||||
|
<p>Hi <%= d 'recipient.firstname' %>,</p>
|
||||||
|
<br>
|
||||||
|
<p>Ticket (<%= d 'ticket.title' %>) from "<b><%= d 'ticket.customer.longname' %></b>" will escalated at "<%= d 'ticket.escalation_time' %>"!</p>
|
||||||
|
<br>
|
||||||
|
<% if @objects[:article] %>
|
||||||
|
<p>
|
||||||
|
<%= t 'Information' %>:
|
||||||
|
<blockquote type="cite">
|
||||||
|
<%= a 'article' %>
|
||||||
|
</blockquote>
|
||||||
|
</p>
|
||||||
|
<% end %>
|
||||||
|
<br>
|
||||||
|
<p>
|
||||||
|
<a href="<%= c 'http_type' %>://<%= c 'fqdn' %>/#ticket/zoom/<%= d 'ticket.id' %>" target="zammad_app"><%= t 'View this in Zammad' %></a>
|
||||||
|
</p>
|
|
@ -1,15 +0,0 @@
|
||||||
class UpdateChannel2 < ActiveRecord::Migration
|
|
||||||
def up
|
|
||||||
|
|
||||||
Scheduler.create_or_update(
|
|
||||||
name: 'Check streams for Channel ',
|
|
||||||
method: 'Channel.stream',
|
|
||||||
period: 60,
|
|
||||||
prio: 1,
|
|
||||||
active: true,
|
|
||||||
updated_by_id: 1,
|
|
||||||
created_by_id: 1,
|
|
||||||
)
|
|
||||||
|
|
||||||
end
|
|
||||||
end
|
|
13
db/migrate/20160223000001_add_process_escalation_tickets.rb
Normal file
13
db/migrate/20160223000001_add_process_escalation_tickets.rb
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
class AddProcessEscalationTickets < ActiveRecord::Migration
|
||||||
|
def up
|
||||||
|
Scheduler.create_if_not_exists(
|
||||||
|
name: 'Process escalation tickets',
|
||||||
|
method: 'Ticket.process_escalation',
|
||||||
|
period: 60 * 5,
|
||||||
|
prio: 1,
|
||||||
|
active: true,
|
||||||
|
updated_by_id: 1,
|
||||||
|
created_by_id: 1,
|
||||||
|
)
|
||||||
|
end
|
||||||
|
end
|
|
@ -3301,6 +3301,13 @@ Scheduler.create_if_not_exists(
|
||||||
prio: 1,
|
prio: 1,
|
||||||
active: true,
|
active: true,
|
||||||
)
|
)
|
||||||
|
Scheduler.create_if_not_exists(
|
||||||
|
name: 'Process escalation tickets',
|
||||||
|
method: 'Ticket.process_escalation',
|
||||||
|
period: 60 * 5,
|
||||||
|
prio: 1,
|
||||||
|
active: true,
|
||||||
|
)
|
||||||
Scheduler.create_if_not_exists(
|
Scheduler.create_if_not_exists(
|
||||||
name: 'Import OTRS diff load',
|
name: 'Import OTRS diff load',
|
||||||
method: 'Import::OTRS.diff_worker',
|
method: 'Import::OTRS.diff_worker',
|
||||||
|
|
Loading…
Reference in a new issue