Fixed issue #206 - Wrong recipient on reply to Received call.
This commit is contained in:
parent
06c009255f
commit
87ec273b57
7 changed files with 83 additions and 1 deletions
|
@ -157,7 +157,7 @@ class ArticleViewItem extends App.ObserverController
|
|||
|
||||
new App.WidgetAvatar(
|
||||
el: @$('.js-avatar')
|
||||
object_id: article.created_by_id
|
||||
object_id: article.origin_by_id || article.created_by_id
|
||||
size: 40
|
||||
)
|
||||
|
||||
|
|
|
@ -34,6 +34,7 @@ module CreatesTicketArticles
|
|||
if !current_user.permissions?('ticket.agent')
|
||||
clean_params[:sender_id] = Ticket::Article::Sender.lookup(name: 'Customer').id
|
||||
clean_params.delete(:sender)
|
||||
clean_params.delete(:origin_by_id)
|
||||
type = Ticket::Article::Type.lookup(id: clean_params[:type_id])
|
||||
if type.name !~ /^(note|web)$/
|
||||
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::_fillup_from_general',
|
||||
'observer::_ticket::_article::_fillup_from_email',
|
||||
'observer::_ticket::_article::_fillup_from_origin_by_id',
|
||||
'observer::_ticket::_article::_communicate_email',
|
||||
'observer::_ticket::_article::_communicate_facebook',
|
||||
'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 :updated_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
|
||||
end
|
||||
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
|
||||
|
||||
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
|
||||
|
|
Loading…
Reference in a new issue