Fixed issue #206 - Wrong recipient on reply to Received call.
This commit is contained in:
parent
3cf0af10d9
commit
bcd8edc286
7 changed files with 83 additions and 1 deletions
|
@ -157,7 +157,7 @@ class ArticleViewItem extends App.ObserverController
|
||||||
|
|
||||||
new App.WidgetAvatar(
|
new App.WidgetAvatar(
|
||||||
el: @$('.js-avatar')
|
el: @$('.js-avatar')
|
||||||
object_id: article.created_by_id
|
object_id: article.origin_by_id || article.created_by_id
|
||||||
size: 40
|
size: 40
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -34,6 +34,7 @@ module CreatesTicketArticles
|
||||||
if !current_user.permissions?('ticket.agent')
|
if !current_user.permissions?('ticket.agent')
|
||||||
clean_params[:sender_id] = Ticket::Article::Sender.lookup(name: 'Customer').id
|
clean_params[:sender_id] = Ticket::Article::Sender.lookup(name: 'Customer').id
|
||||||
clean_params.delete(:sender)
|
clean_params.delete(:sender)
|
||||||
|
clean_params.delete(:origin_by_id)
|
||||||
type = Ticket::Article::Type.lookup(id: clean_params[:type_id])
|
type = Ticket::Article::Type.lookup(id: clean_params[:type_id])
|
||||||
if type.name !~ /^(note|web)$/
|
if type.name !~ /^(note|web)$/
|
||||||
clean_params[:type_id] = Ticket::Article::Type.lookup(name: 'note').id
|
clean_params[:type_id] = Ticket::Article::Type.lookup(name: 'note').id
|
||||||
|
|
|
@ -0,0 +1,25 @@
|
||||||
|
# Copyright (C) 2012-2016 Zammad Foundation, http://zammad-foundation.org/
|
||||||
|
|
||||||
|
class Observer::Ticket::Article::FillupFromOriginById < ActiveRecord::Observer
|
||||||
|
observe 'ticket::_article'
|
||||||
|
|
||||||
|
def before_create(record)
|
||||||
|
|
||||||
|
# return if we run import mode
|
||||||
|
return if Setting.get('import_mode')
|
||||||
|
|
||||||
|
# only do fill of from if article got created via application_server (e. g. not
|
||||||
|
# if article and sender type is set via *.postmaster)
|
||||||
|
return if ApplicationHandleInfo.current.split('.')[1] == 'postmaster'
|
||||||
|
|
||||||
|
# check if origin_by_id exists
|
||||||
|
return if record.origin_by_id.present?
|
||||||
|
return if !record.ticket.customer_id
|
||||||
|
return if record.sender.name != 'Customer'
|
||||||
|
return if record.type.name != 'phone'
|
||||||
|
|
||||||
|
record.origin_by_id = record.ticket.customer_id
|
||||||
|
user = User.find(record.origin_by_id)
|
||||||
|
record.from = "#{user.firstname} #{user.lastname} <#{user.email}>"
|
||||||
|
end
|
||||||
|
end
|
|
@ -27,6 +27,7 @@ module Zammad
|
||||||
'observer::_ticket::_article_changes',
|
'observer::_ticket::_article_changes',
|
||||||
'observer::_ticket::_article::_fillup_from_general',
|
'observer::_ticket::_article::_fillup_from_general',
|
||||||
'observer::_ticket::_article::_fillup_from_email',
|
'observer::_ticket::_article::_fillup_from_email',
|
||||||
|
'observer::_ticket::_article::_fillup_from_origin_by_id',
|
||||||
'observer::_ticket::_article::_communicate_email',
|
'observer::_ticket::_article::_communicate_email',
|
||||||
'observer::_ticket::_article::_communicate_facebook',
|
'observer::_ticket::_article::_communicate_facebook',
|
||||||
'observer::_ticket::_article::_communicate_twitter',
|
'observer::_ticket::_article::_communicate_twitter',
|
||||||
|
|
|
@ -166,6 +166,7 @@ class CreateTicket < ActiveRecord::Migration
|
||||||
t.column :preferences, :text, limit: 500.kilobytes + 1, null: true
|
t.column :preferences, :text, limit: 500.kilobytes + 1, null: true
|
||||||
t.column :updated_by_id, :integer, null: false
|
t.column :updated_by_id, :integer, null: false
|
||||||
t.column :created_by_id, :integer, null: false
|
t.column :created_by_id, :integer, null: false
|
||||||
|
t.column :origin_by_id, :integer
|
||||||
t.timestamps limit: 3, null: false
|
t.timestamps limit: 3, null: false
|
||||||
end
|
end
|
||||||
add_index :ticket_articles, [:ticket_id]
|
add_index :ticket_articles, [:ticket_id]
|
||||||
|
|
9
db/migrate/20170421110000_add_origin_by_id.rb
Normal file
9
db/migrate/20170421110000_add_origin_by_id.rb
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
class AddOriginById < ActiveRecord::Migration
|
||||||
|
def up
|
||||||
|
|
||||||
|
# return if it's a new setup
|
||||||
|
return if !Setting.find_by(name: 'system_init_done')
|
||||||
|
|
||||||
|
add_column :ticket_articles, :origin_by_id, :integer
|
||||||
|
end
|
||||||
|
end
|
|
@ -280,4 +280,49 @@ AAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test '03.01 create phone ticket for customer and expected origin_by_id' do
|
||||||
|
credentials = ActionController::HttpAuthentication::Basic.encode_credentials('tickets-agent@example.com', 'agentpw')
|
||||||
|
|
||||||
|
params = {
|
||||||
|
title: 'a new ticket #1',
|
||||||
|
group: 'Users',
|
||||||
|
customer_id: @customer_without_org.id,
|
||||||
|
article: {
|
||||||
|
body: 'some body',
|
||||||
|
sender: 'Customer',
|
||||||
|
type: 'phone',
|
||||||
|
}
|
||||||
|
}
|
||||||
|
post '/api/v1/tickets', params.to_json, @headers.merge('Authorization' => credentials)
|
||||||
|
assert_response(201)
|
||||||
|
result = JSON.parse(@response.body)
|
||||||
|
assert_equal(Hash, result.class)
|
||||||
|
|
||||||
|
article = Ticket::Article.find_by( ticket_id: result['id'] )
|
||||||
|
assert_equal(@customer_without_org.id, article.origin_by_id)
|
||||||
|
assert_equal('Tickets Customer1 <tickets-customer1@example.com>', article.from)
|
||||||
|
end
|
||||||
|
|
||||||
|
test '03.02 create phone ticket by customer and manipulate origin_by_id' do
|
||||||
|
credentials = ActionController::HttpAuthentication::Basic.encode_credentials('tickets-customer1@example.com', 'customer1pw')
|
||||||
|
|
||||||
|
params = {
|
||||||
|
title: 'a new ticket #1',
|
||||||
|
group: 'Users',
|
||||||
|
customer_id: @customer_without_org.id,
|
||||||
|
article: {
|
||||||
|
body: 'some body',
|
||||||
|
sender: 'Customer',
|
||||||
|
type: 'phone',
|
||||||
|
origin_by_id: 1,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
post '/api/v1/tickets', params.to_json, @headers.merge('Authorization' => credentials)
|
||||||
|
assert_response(201)
|
||||||
|
result = JSON.parse(@response.body)
|
||||||
|
assert_equal(Hash, result.class)
|
||||||
|
|
||||||
|
article = Ticket::Article.find_by( ticket_id: result['id'] )
|
||||||
|
assert_nil(article.origin_by_id)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue