Fixes #1987 makes ticket create types configurable

This commit is contained in:
Mantas 2018-05-02 18:49:35 +03:00
parent e7ce4b9d68
commit 896e4f0492
7 changed files with 296 additions and 21 deletions

View file

@ -7,12 +7,33 @@ class App.TicketCreate extends App.Controller
'submit form': 'submit'
'click .js-cancel': 'cancel'
types: {
'phone-in': {
icon: 'received-calls',
label: 'Received Call'
},
'phone-out': {
icon: 'outbound-calls',
label: 'Outbound Call'
},
'email-out': {
icon: 'email',
label: 'Send Email'
}
}
constructor: (params) ->
super
@sidebarState = {}
# define default type
@default_type = 'phone-in'
# define default type and available types
@defaultType = @Config.get('ui_ticket_create_default_type')
@availableTypes = @Config.get('ui_ticket_create_available_types') || []
if !_.isArray(@availableTypes)
@availableTypes = [@availableTypes]
if !_.contains(@availableTypes, @defaultType)
@defaultType = @availableTypes[0]
@formId = App.ControllerForm.formId()
@ -50,7 +71,7 @@ class App.TicketCreate extends App.Controller
if !type
type = @$('.type-tabs .tab.active').data('type')
if !type
type = @default_type
type = @defaultType
type
changeFormType: (e) =>
@ -239,10 +260,12 @@ class App.TicketCreate extends App.Controller
@formId = params['form_id']
@html(App.view('agent_ticket_create')(
head: 'New Ticket'
agent: @permissionCheck('ticket.agent')
admin: @permissionCheck('admin')
form_id: @formId
head: 'New Ticket'
agent: @permissionCheck('ticket.agent')
admin: @permissionCheck('admin')
types: @types,
availableTypes: @availableTypes
form_id: @formId
))
App.Ticket.configure_attributes.push {

View file

@ -7,20 +7,16 @@
</div>
<div class="page-content">
<ul class="tabs type-tabs">
<li class="tab u-textTruncate" data-type="phone-in">
<%- @Icon('received-calls', 'tab-icon') %>
<%- @T('Received Call') %>
</li>
<li class="tab u-textTruncate" data-type="phone-out">
<%- @Icon('outbound-calls', 'tab-icon') %>
<%- @T('Outbound Call') %>
</li>
<li class="tab u-textTruncate" data-type="email-out">
<%- @Icon('email', 'tab-icon') %>
<%- @T('Send Email') %>
</li>
</ul>
<% if !_.isEmpty(@availableTypes) && @availableTypes.length > 1: %>
<ul class="tabs type-tabs">
<% for type in @availableTypes: %>
<li class="tab u-textTruncate" data-type="<%= type %>">
<%- @Icon(@types[type]['icon'], 'tab-icon') %>
<%- @T(@types[type]['label']) %>
</li>
<% end %>
</ul>
<% end %>
<% if !_.isEmpty(@C('ui_ticket_create_notes')): %>
<% for type, note of @C('ui_ticket_create_notes'): %>

View file

@ -0,0 +1,62 @@
class TicketCreateTypesSettingIssue1987 < ActiveRecord::Migration[5.1]
def up
# return if it's a new setup
return if !Setting.find_by(name: 'system_init_done')
Setting.create_if_not_exists(
title: 'Default type for a new ticket',
name: 'ui_ticket_create_default_type',
area: 'UI::TicketCreate',
description: 'Select default ticket type',
options: {
form: [
{
display: '',
null: false,
multiple: false,
name: 'ui_ticket_create_default_type',
tag: 'select',
options: {
'phone-in' => '1. Phone inbound',
'phone-out' => '2. Phone outbound',
'email-out' => '3. Email outbound',
},
},
],
},
state: 'phone-in',
preferences: {
permission: ['admin.ui']
},
frontend: true
)
Setting.create_if_not_exists(
title: 'Available types for a new ticket',
name: 'ui_ticket_create_available_types',
area: 'UI::TicketCreate',
description: 'Set available ticket types',
options: {
form: [
{
display: '',
null: false,
multiple: true,
name: 'ui_ticket_create_available_types',
tag: 'select',
options: {
'phone-in' => '1. Phone inbound',
'phone-out' => '2. Phone outbound',
'email-out' => '3. Email outbound',
},
},
],
},
state: %w[phone-in phone-out email-out],
preferences: {
permission: ['admin.ui']
},
frontend: true
)
end
end

View file

@ -795,6 +795,62 @@ Setting.create_if_not_exists(
frontend: true
)
Setting.create_if_not_exists(
title: 'Default type for a new ticket',
name: 'ui_ticket_create_default_type',
area: 'UI::TicketCreate',
description: 'Select default ticket type',
options: {
form: [
{
display: '',
null: false,
multiple: false,
name: 'ui_ticket_create_default_type',
tag: 'select',
options: {
'phone-in' => '1. Phone inbound',
'phone-out' => '2. Phone outbound',
'email-out' => '3. Email outbound',
},
},
],
},
state: 'phone-in',
preferences: {
permission: ['admin.ui']
},
frontend: true
)
Setting.create_if_not_exists(
title: 'Available types for a new ticket',
name: 'ui_ticket_create_available_types',
area: 'UI::TicketCreate',
description: 'Set available ticket types',
options: {
form: [
{
display: '',
null: false,
multiple: true,
name: 'ui_ticket_create_available_types',
tag: 'select',
options: {
'phone-in' => '1. Phone inbound',
'phone-out' => '2. Phone outbound',
'email-out' => '3. Email outbound',
},
},
],
},
state: %w[phone-in phone-out email-out],
preferences: {
permission: ['admin.ui']
},
frontend: true
)
Setting.create_if_not_exists(
title: 'Open ticket indicator',
name: 'ui_sidebar_open_ticket_indicator_colored',

View file

@ -24,7 +24,9 @@ if [ "$LEVEL" == '1' ]; then
# test/browser/agent_organization_profile_test.rb
rm test/browser/agent_ticket_attachment_test.rb
rm test/browser/agent_ticket_auto_assignment_test.rb
rm test/browser/agent_ticket_create_available_types_test.rb
rm test/browser/agent_ticket_create_cc_tokenizer_test.rb
rm test/browser/agent_ticket_create_default_type_test.rb
rm test/browser/agent_ticket_create_reset_customer_selection_test.rb
rm test/browser/agent_ticket_create_template_test.rb
rm test/browser/agent_ticket_email_reply_keep_body_test.rb
@ -92,7 +94,9 @@ elif [ "$LEVEL" == '2' ]; then
rm test/browser/agent_organization_profile_test.rb
rm test/browser/agent_ticket_attachment_test.rb
rm test/browser/agent_ticket_auto_assignment_test.rb
rm test/browser/agent_ticket_create_available_types_test.rb
rm test/browser/agent_ticket_create_cc_tokenizer_test.rb
rm test/browser/agent_ticket_create_default_type_test.rb
rm test/browser/agent_ticket_create_reset_customer_selection_test.rb
rm test/browser/agent_ticket_create_template_test.rb
rm test/browser/agent_ticket_email_reply_keep_body_test.rb
@ -160,7 +164,9 @@ elif [ "$LEVEL" == '3' ]; then
rm test/browser/agent_organization_profile_test.rb
# test/browser/agent_ticket_attachment_test.rb
# test/browser/agent_ticket_auto_assignment_test.rb
# rm test/browser/agent_ticket_create_available_types_test.rb
#rm test/browser/agent_ticket_create_cc_tokenizer_test.rb
# rm test/browser/agent_ticket_create_default_type_test.rb
# test/browser/agent_ticket_create_reset_customer_selection_test.rb
# test/browser/agent_ticket_create_template_test.rb
# test/browser/agent_ticket_email_reply_keep_body_test.rb
@ -228,7 +234,9 @@ elif [ "$LEVEL" == '4' ]; then
rm test/browser/agent_organization_profile_test.rb
rm test/browser/agent_ticket_attachment_test.rb
rm test/browser/agent_ticket_auto_assignment_test.rb
rm test/browser/agent_ticket_create_available_types_test.rb
rm test/browser/agent_ticket_create_cc_tokenizer_test.rb
rm test/browser/agent_ticket_create_default_type_test.rb
rm test/browser/agent_ticket_create_reset_customer_selection_test.rb
rm test/browser/agent_ticket_create_template_test.rb
rm test/browser/agent_ticket_email_reply_keep_body_test.rb
@ -295,7 +303,9 @@ elif [ "$LEVEL" == '5' ]; then
rm test/browser/agent_organization_profile_test.rb
rm test/browser/agent_ticket_attachment_test.rb
rm test/browser/agent_ticket_auto_assignment_test.rb
rm test/browser/agent_ticket_create_available_types_test.rb
rm test/browser/agent_ticket_create_cc_tokenizer_test.rb
rm test/browser/agent_ticket_create_default_type_test.rb
rm test/browser/agent_ticket_create_reset_customer_selection_test.rb
rm test/browser/agent_ticket_create_template_test.rb
rm test/browser/agent_ticket_email_reply_keep_body_test.rb
@ -365,7 +375,9 @@ elif [ "$LEVEL" == '6' ]; then
rm test/browser/agent_organization_profile_test.rb
rm test/browser/agent_ticket_attachment_test.rb
rm test/browser/agent_ticket_auto_assignment_test.rb
rm test/browser/agent_ticket_create_available_types_test.rb
rm test/browser/agent_ticket_create_cc_tokenizer_test.rb
rm test/browser/agent_ticket_create_default_type_test.rb
rm test/browser/agent_ticket_create_reset_customer_selection_test.rb
rm test/browser/agent_ticket_create_template_test.rb
rm test/browser/agent_ticket_email_reply_keep_body_test.rb

View file

@ -0,0 +1,45 @@
require 'browser_test_helper'
# Regression test for UI enhancement
# https://github.com/zammad/zammad/issues/1987
# Ensure that available ticket types are rendered correctly
class AgentTicketCreateAvailableTypesTest < TestCase
def test_ticket_create_type
@browser = browser_instance
login(
username: 'agent1@example.com',
password: 'test',
url: browser_url,
)
tasks_close_all()
click(
css: 'a[href="#ticket/create"]'
)
exists(
css: '.type-tabs li.active[data-type=phone-in]'
)
end
def test_ticket_create_solo_type
@browser = browser_instance
login(
username: 'agent1@example.com',
password: 'test',
url: browser_url,
)
tasks_close_all()
@browser.execute_script("App.Config.set('ui_ticket_create_default_type', 'email-out')")
click(
css: 'a[href="#ticket/create"]'
)
exists(
css: '.type-tabs li.active[data-type=email-out]'
)
end
end

View file

@ -0,0 +1,81 @@
require 'browser_test_helper'
# Regression test for UI enhancement
# https://github.com/zammad/zammad/issues/1987
# Ensure that available ticket types are rendered correctly
class AgentTicketCreateDefaultTypeTest < TestCase
def test_ticket_create_type
@browser = browser_instance
login(
username: 'agent1@example.com',
password: 'test',
url: browser_url,
)
tasks_close_all()
click(
css: 'a[href="#ticket/create"]'
)
exists(
css: '.type-tabs li[data-type=phone-in]'
)
exists(
css: '.type-tabs li[data-type=phone-out]'
)
exists(
css: '.type-tabs li[data-type=email-out]'
)
end
def test_ticket_create_disabled_type
@browser = browser_instance
login(
username: 'agent1@example.com',
password: 'test',
url: browser_url,
)
tasks_close_all()
@browser.execute_script("App.Config.set('ui_ticket_create_available_types', ['email-out', 'phone-out'])")
click(
css: 'a[href="#ticket/create"]'
)
exists_not(
css: '.type-tabs li[data-type=phone-in]'
)
exists(
css: '.type-tabs li[data-type=phone-out]'
)
exists(
css: '.type-tabs li[data-type=email-out]'
)
end
def test_ticket_create_solo_type
@browser = browser_instance
login(
username: 'agent1@example.com',
password: 'test',
url: browser_url,
)
tasks_close_all()
@browser.execute_script("App.Config.set('ui_ticket_create_available_types', ['email-out'])")
click(
css: 'a[href="#ticket/create"]'
)
exists_not(
css: '.type-tabs'
)
end
end