Implemented issue#427 - Improved ticket number generator settings (just show necessary settings based on generator selection).
This commit is contained in:
parent
7ddc6da7b8
commit
9cccb57cfc
12 changed files with 209 additions and 19 deletions
|
@ -435,7 +435,7 @@ class App.ControllerForm extends App.Controller
|
|||
else
|
||||
value = parseInt(value)
|
||||
if param[item.name] isnt undefined
|
||||
if typeof param[item.name] is 'string'
|
||||
if typeof param[item.name] is 'string' || typeof param[item.name] is 'boolean' || typeof param[item.name] is 'number'
|
||||
param[item.name] = [param[item.name], value]
|
||||
else
|
||||
param[item.name].push value
|
||||
|
|
|
@ -35,10 +35,11 @@ class App.SettingsArea extends App.Controller
|
|||
|
||||
elements = []
|
||||
for setting in settings
|
||||
if setting.preferences.controller && App[setting.preferences.controller]
|
||||
item = new App[setting.preferences.controller](setting: setting)
|
||||
else
|
||||
item = new App.SettingsAreaItem(setting: setting)
|
||||
elements.push item.el
|
||||
if setting.preferences.hidden isnt true
|
||||
if setting.preferences.controller && App[setting.preferences.controller]
|
||||
item = new App[setting.preferences.controller](setting: setting)
|
||||
else
|
||||
item = new App.SettingsAreaItem(setting: setting)
|
||||
elements.push item.el
|
||||
|
||||
@html elements
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
class App.SettingsAreaItem extends App.Controller
|
||||
template: 'settings/item'
|
||||
events:
|
||||
'submit form': 'update'
|
||||
|
||||
|
@ -21,8 +22,12 @@ class App.SettingsAreaItem extends App.Controller
|
|||
# form
|
||||
@configure_attributes = @setting.options['form']
|
||||
|
||||
for attribute in @configure_attributes
|
||||
if attribute.tag is 'boolean'
|
||||
attribute.translate = true
|
||||
|
||||
# item
|
||||
@html App.view('settings/item')(
|
||||
@html App.view(@template)(
|
||||
setting: @setting
|
||||
)
|
||||
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
class App.SettingsAreaTicketHookPosition extends App.SettingsAreaItem
|
||||
template: 'settings/ticket_hook_position'
|
|
@ -0,0 +1,132 @@
|
|||
class App.SettingsAreaTicketNumber extends App.Controller
|
||||
events:
|
||||
'submit form': 'update'
|
||||
|
||||
constructor: ->
|
||||
super
|
||||
@render()
|
||||
|
||||
render: =>
|
||||
|
||||
# defaults
|
||||
directValue = 0
|
||||
for item in @setting.options['form']
|
||||
directValue += 1
|
||||
if directValue > 1
|
||||
for item in @setting.options['form']
|
||||
item['default'] = @setting.state_current.value[item.name]
|
||||
else
|
||||
item['default'] = @setting.state_current.value
|
||||
|
||||
@map =
|
||||
'Ticket::Number::Increment': 'ticket_number_increment'
|
||||
'Ticket::Number::Date': 'ticket_number_date'
|
||||
|
||||
# form
|
||||
@configure_attributes = @setting.options['form']
|
||||
|
||||
# item
|
||||
@html App.view('settings/ticket_number')(
|
||||
setting: @setting
|
||||
)
|
||||
|
||||
togglePreferences = (params, attribute, @attributes, classname, form) =>
|
||||
return if attribute.name isnt 'ticket_number'
|
||||
@showPreferences(params.ticket_number)
|
||||
|
||||
updatePreview = (params, attribute) =>
|
||||
paramsParent = @formParam(@$('.js-form'))
|
||||
number = "#{App.Config.get('ticket_hook')}???"
|
||||
if paramsParent.ticket_number is 'Ticket::Number::Increment'
|
||||
paramsItem = @paramsPreferences('Ticket::Number::Increment')
|
||||
number = "#{App.Config.get('ticket_hook')}#{App.Config.get('system_id')}"
|
||||
counter = '1'
|
||||
if paramsItem.min_size
|
||||
minSize = parseInt(paramsItem.min_size)
|
||||
if paramsItem.checksum
|
||||
minSize -= 1
|
||||
if minSize > 1
|
||||
for itemCounter in [2 .. minSize]
|
||||
counter = "0#{counter}"
|
||||
number += counter
|
||||
if paramsItem.checksum
|
||||
number += '9'
|
||||
else if paramsParent.ticket_number is 'Ticket::Number::Date'
|
||||
paramsItem = @paramsPreferences('Ticket::Number::Date')
|
||||
current = new Date()
|
||||
currentDay = current.getDate()
|
||||
currentMonth = current.getMonth() + 1
|
||||
currentYear = current.getFullYear()
|
||||
|
||||
number = "#{App.Config.get('ticket_hook')}#{currentYear}#{currentMonth}#{currentDay}#{App.Config.get('system_id')}001"
|
||||
if paramsItem.checksum
|
||||
number += '9'
|
||||
|
||||
@$('.js-preview').text(number)
|
||||
|
||||
new App.ControllerForm(
|
||||
el: @el.find('.js-form'),
|
||||
model: { configure_attributes: @configure_attributes, className: '' }
|
||||
autofocus: false
|
||||
handlers: [togglePreferences, updatePreview]
|
||||
)
|
||||
|
||||
# preferences
|
||||
preferences_settings = @setting.preferences.settings_included || ['ticket_number_increment', 'ticket_number_date']
|
||||
for preferences_setting in preferences_settings
|
||||
setting = App.Setting.findByAttribute('name', preferences_setting)
|
||||
value = App.Setting.get(preferences_setting)
|
||||
el = $(App.view("settings/#{preferences_setting}")(
|
||||
setting: setting
|
||||
))
|
||||
new App.ControllerForm(
|
||||
el: el.find('.js-formItem'),
|
||||
model: { configure_attributes: setting.options['form'], className: '' }
|
||||
autofocus: false
|
||||
params: value
|
||||
handlers: [updatePreview]
|
||||
)
|
||||
@$('.js-formPreferences').append(el)
|
||||
|
||||
# show current preferences
|
||||
@showPreferences(item['default'])
|
||||
|
||||
showPreferences: (name) =>
|
||||
@$('.js-formPreferencesItem').addClass('hidden')
|
||||
@$(".js-formPreferencesItem[data-backend=\"#{name}\"]").removeClass('hidden')
|
||||
|
||||
paramsPreferences: (name) =>
|
||||
@formParam(@$(".js-formPreferencesItem[data-backend=\"#{name}\"] form"))
|
||||
|
||||
update: (e) =>
|
||||
e.preventDefault()
|
||||
@formDisable(@$('.js-form'))
|
||||
params = @formParam(@$('.js-form'))
|
||||
if params.ticket_number
|
||||
paramsItem = @paramsPreferences(params.ticket_number)
|
||||
setting_name = @map[params.ticket_number]
|
||||
if setting_name && paramsItem
|
||||
App.Setting.set(setting_name, paramsItem)
|
||||
|
||||
@setting['state_current'] = {value: params.ticket_number}
|
||||
ui = @
|
||||
@setting.save(
|
||||
done: =>
|
||||
ui.formEnable(e)
|
||||
App.Event.trigger 'notify', {
|
||||
type: 'success'
|
||||
msg: App.i18n.translateContent('Update successful!')
|
||||
timeout: 2000
|
||||
}
|
||||
|
||||
# rerender ui || get new collections and session data
|
||||
App.Setting.preferencesPost(@setting)
|
||||
|
||||
fail: (settings, details) ->
|
||||
ui.formEnable(e)
|
||||
App.Event.trigger 'notify', {
|
||||
type: 'error'
|
||||
msg: App.i18n.translateContent(details.error_human || details.error || 'Unable to update object!')
|
||||
timeout: 2000
|
||||
}
|
||||
)
|
|
@ -1,6 +1,6 @@
|
|||
<form class="settings-entry" id="<%= @setting.name %>">
|
||||
<h2><%- @T(@setting.title) %></h2>
|
||||
<p class="help-text"><%- @RichText(@setting.description) %></p>
|
||||
<p class="help-text"><%- @T(@setting.description) %></p>
|
||||
<div class="horizontal end">
|
||||
<div class="form-item flex"></div>
|
||||
<button type="submit" class="btn btn--primary"><%- @T('Submit') %></button>
|
||||
|
|
|
@ -0,0 +1,14 @@
|
|||
<form class="settings-entry" id="<%= @setting.name %>">
|
||||
<h2><%- @T(@setting.title) %></h2>
|
||||
<p class="help-text">
|
||||
<%- @T('The format of the subject.') %>
|
||||
<ul>
|
||||
<li><%- @T('|Right| means |Some Subject [Ticket#12345]|') %>
|
||||
<li><%- @T('|Left| means |[Ticket#12345] Some Subject|') %>
|
||||
<li><%- @T('|None| means |Some Subject| (without ticket number). In the last case you should enable "postmaster___follow___up___search___in" to recognize followups based on email headers and/or body.') %>
|
||||
</ul>
|
||||
<div class="horizontal end">
|
||||
<div class="js-form form-item flex"></div>
|
||||
<button type="submit" class="btn btn--primary"><%- @T('Submit') %></button>
|
||||
</div>
|
||||
</form>
|
|
@ -0,0 +1,19 @@
|
|||
<div class="settings-entry" id="<%= @setting.name %>">
|
||||
<h2><%- @T(@setting.title) %></h2>
|
||||
<p class="help-text">
|
||||
<%- @T('Selects the ticket number generator module.') %>
|
||||
<ul>
|
||||
<li><%- @T('|Increment| increments the ticket number, the SystemID and the counter are used with "SystemID.Counter" format (e.g. 1010138, 1010139).') %>
|
||||
<li><%- @T('With |Date| the ticket numbers will be generated by the current date, the SystemID and the counter. The format looks like "Year.Month.Day.SystemID.Counter" (e.g. 201206231010138, 201206231010139).') %>
|
||||
</ul>
|
||||
<form class="js-form"></form>
|
||||
<br>
|
||||
<div class="js-formPreferences"></div>
|
||||
<br>
|
||||
<label class="formGroup-label"><%- @T('Preview') %></label>
|
||||
<div class="js-preview"></div>
|
||||
<br>
|
||||
<form class="horizontal end">
|
||||
<button type="submit" class="btn btn--primary"><%- @T('Submit') %></button>
|
||||
</form>
|
||||
</div>
|
|
@ -0,0 +1,6 @@
|
|||
<div class="js-date js-formPreferencesItem hidden" data-backend="Ticket::Number::Date">
|
||||
<label class="formGroup-label"><%- @T('Options') %></label>
|
||||
<div><%- @T('With Checksum the counter will be appended with a checksum at the end. The format looks like "%s" (e. g. %s).', 'Year.Month.Day.SystemID.Counter.CheckSum', '2012070110101520, 2012070110101535') %></div>
|
||||
<br>
|
||||
<form class="js-formItem"></form>
|
||||
</div>
|
|
@ -0,0 +1,6 @@
|
|||
<div class="js-increment js-formPreferencesItem hidden" data-backend="Ticket::Number::Increment">
|
||||
<label class="formGroup-label"><%- @T('Options') %></label>
|
||||
<div><%- @T('With Checksum the counter will be appended with a checksum at the end. The format looks like "%s" (e. g. %s).', 'SystemID.Counter.CheckSum', '10101384, 10101392') %></div>
|
||||
<br>
|
||||
<form class="js-formItem"></form>
|
||||
</div>
|
|
@ -20,7 +20,7 @@ returns
|
|||
# generate number
|
||||
49_999.times {
|
||||
number = adapter.generate
|
||||
ticket = Ticket.find_by( number: number )
|
||||
ticket = Ticket.find_by(number: number)
|
||||
return number if !ticket
|
||||
}
|
||||
raise "Can't generate new ticket number!"
|
||||
|
|
25
db/seeds.rb
25
db/seeds.rb
|
@ -1137,10 +1137,10 @@ Setting.create_if_not_exists(
|
|||
title: 'Ticket Hook Position',
|
||||
name: 'ticket_hook_position',
|
||||
area: 'Ticket::Base',
|
||||
description: "@T('The format of the subject.')
|
||||
* @T('**Right** means **Some Subject [Ticket#12345]**')
|
||||
* @T('**Left** means **[Ticket#12345] Some Subject**')
|
||||
* @T('**None** means **Some Subject** (without ticket number). In the last case you should enable *postmaster_follow_up_search_in* to recognize followups based on email headers and/or body.')",
|
||||
description: "The format of the subject.
|
||||
* **Right** means **Some Subject [Ticket#12345]**
|
||||
* **Left** means **[Ticket#12345] Some Subject**
|
||||
* **None** means **Some Subject** (without ticket number). In the last case you should enable *postmaster_follow_up_search_in* to recognize followups based on email headers and/or body.",
|
||||
options: {
|
||||
form: [
|
||||
{
|
||||
|
@ -1148,6 +1148,7 @@ Setting.create_if_not_exists(
|
|||
null: true,
|
||||
name: 'ticket_hook_position',
|
||||
tag: 'select',
|
||||
translate: true,
|
||||
options: {
|
||||
'left' => 'left',
|
||||
'right' => 'right',
|
||||
|
@ -1158,6 +1159,7 @@ Setting.create_if_not_exists(
|
|||
},
|
||||
state: 'right',
|
||||
preferences: {
|
||||
controller: 'SettingsAreaTicketHookPosition',
|
||||
permission: ['admin.ticket'],
|
||||
},
|
||||
frontend: false
|
||||
|
@ -1166,11 +1168,9 @@ Setting.create_if_not_exists(
|
|||
title: 'Ticket Number Format',
|
||||
name: 'ticket_number',
|
||||
area: 'Ticket::Number',
|
||||
description: "@T('Selects the ticket number generator module.')
|
||||
* @T('**Increment** increments the ticket number, the SystemID and the counter are used with SystemID.Counter format (e.g. 1010138, 1010139).')
|
||||
* @T('With **Date** the ticket numbers will be generated by the current date, the SystemID and the counter. The format looks like Year.Month.Day.SystemID.counter (e.g. 201206231010138, 201206231010139).')
|
||||
|
||||
@T('With param 'Checksum => true' the counter will be appended as checksum to the string. The format looks like SystemID.Counter.CheckSum (e. g. 10101384, 10101392) or Year.Month.Day.SystemID.Counter.CheckSum (e.g. 2012070110101520, 2012070110101535).')",
|
||||
description: "Selects the ticket number generator module.
|
||||
* **Increment** increments the ticket number, the SystemID and the counter are used with SystemID.Counter format (e.g. 1010138, 1010139).
|
||||
* With **Date** the ticket numbers will be generated by the current date, the SystemID and the counter. The format looks like Year.Month.Day.SystemID.counter (e.g. 201206231010138, 201206231010139).",
|
||||
options: {
|
||||
form: [
|
||||
{
|
||||
|
@ -1178,6 +1178,7 @@ Setting.create_if_not_exists(
|
|||
null: true,
|
||||
name: 'ticket_number',
|
||||
tag: 'select',
|
||||
translate: true,
|
||||
options: {
|
||||
'Ticket::Number::Increment' => 'Increment (SystemID.Counter)',
|
||||
'Ticket::Number::Date' => 'Date (Year.Month.Day.SystemID.Counter)',
|
||||
|
@ -1187,6 +1188,8 @@ Setting.create_if_not_exists(
|
|||
},
|
||||
state: 'Ticket::Number::Increment',
|
||||
preferences: {
|
||||
settings_included: %w(ticket_number_increment ticket_number_date),
|
||||
controller: 'SettingsAreaTicketNumber',
|
||||
permission: ['admin.ticket'],
|
||||
},
|
||||
frontend: false
|
||||
|
@ -1244,6 +1247,7 @@ Setting.create_if_not_exists(
|
|||
},
|
||||
preferences: {
|
||||
permission: ['admin.ticket'],
|
||||
hidden: true,
|
||||
},
|
||||
frontend: false
|
||||
)
|
||||
|
@ -1267,10 +1271,11 @@ Setting.create_if_not_exists(
|
|||
],
|
||||
},
|
||||
state: {
|
||||
checksum: false,
|
||||
checksum: false
|
||||
},
|
||||
preferences: {
|
||||
permission: ['admin.ticket'],
|
||||
hidden: true,
|
||||
},
|
||||
frontend: false
|
||||
)
|
||||
|
|
Loading…
Reference in a new issue