From ef739b138ff4972ce635f10eaa0e40372d855fef Mon Sep 17 00:00:00 2001 From: Martin Edenhofer Date: Sun, 21 Apr 2013 18:25:06 +0200 Subject: [PATCH] Added task support for ticket creation. Improvement for issue #57. --- .../_application_controller.js.coffee | 2 +- .../_application_controller_form.js.coffee | 5 +- .../controllers/agent_ticket_create.js.coffee | 51 +++++++++++++++---- .../controllers/agent_ticket_zoom.js.coffee | 13 ++++- .../app/controllers/tag_widget.js.coffee | 10 ++-- .../app/controllers/task_widget.js.coffee | 13 ++++- .../app/lib/app_post/i18n.js.coffee | 5 ++ .../app/lib/app_post/task_manager.js.coffee | 1 + .../app/views/agent_ticket_create.jst.eco | 8 +-- .../javascripts/app/views/task_widget.jst.eco | 2 +- db/seeds.rb | 2 + 11 files changed, 90 insertions(+), 22 deletions(-) diff --git a/app/assets/javascripts/app/controllers/_application_controller.js.coffee b/app/assets/javascripts/app/controllers/_application_controller.js.coffee index 48258cd0a..e8a824184 100644 --- a/app/assets/javascripts/app/controllers/_application_controller.js.coffee +++ b/app/assets/javascripts/app/controllers/_application_controller.js.coffee @@ -164,7 +164,7 @@ class App.Controller extends Spine.Controller return string userInfo: (data) => - el = data.el || $('#customer_info') + el = data.el || $('[data-id="customer_info"]') el.unbind() # start customer info controller diff --git a/app/assets/javascripts/app/controllers/_application_controller_form.js.coffee b/app/assets/javascripts/app/controllers/_application_controller_form.js.coffee index ac52e0f0f..9625d714c 100644 --- a/app/assets/javascripts/app/controllers/_application_controller_form.js.coffee +++ b/app/assets/javascripts/app/controllers/_application_controller_form.js.coffee @@ -373,10 +373,13 @@ class App.ControllerForm extends App.Controller onRemoveTag: onRemoveTag ) siteUpdate(true) + + # update box size + App.Event.bind 'ui:rerender:content', => + siteUpdate(true) @delay( a, 80 ) - # autocompletion else if attribute.tag is 'autocompletion' item = $( App.view('generic/autocompletion')( attribute: attribute ) ) diff --git a/app/assets/javascripts/app/controllers/agent_ticket_create.js.coffee b/app/assets/javascripts/app/controllers/agent_ticket_create.js.coffee index 996511de4..32f48a5cc 100644 --- a/app/assets/javascripts/app/controllers/agent_ticket_create.js.coffee +++ b/app/assets/javascripts/app/controllers/agent_ticket_create.js.coffee @@ -1,4 +1,4 @@ -class Index extends App.ControllerContent +class App.TicketCreate extends App.Controller events: 'click .customer_new': 'userNew' 'submit form': 'submit' @@ -50,6 +50,24 @@ class Index extends App.ControllerContent @log 'AgentTicketPhone', 'error', defaults @render(defaults) + meta: => + meta = + url: @url() + head: App.i18n.translateInline( @article_attributes['title'] ) + title: App.i18n.translateInline( @article_attributes['title'] ) + id: @type + + url: => + '#ticket_create/' + @type + + activate: => + @navupdate '#' +# @title 'Ticket Create ' + @ticket.number + + release: => +# @clearInterval( @key, 'ticket_zoom' ) + @el.remove() + # get data / in case also ticket data for split fetch: (params) -> @@ -141,11 +159,11 @@ class Index extends App.ControllerContent ) new App.ControllerForm( - el: @el.find('#form_create') + el: @el.find('.ticket_create') form_id: @form_id model: configure_attributes: configure_attributes - className: 'create' + className: 'create_' + @type autofocus: true form_data: @edit_form ) @@ -164,13 +182,13 @@ class Index extends App.ControllerContent # show template UI new App.TemplateUI( - el: @el.find('#ticket_template'), + el: @el.find('[data-id="ticket_template"]'), template_id: template['id'], ) # show text module UI new App.TextModuleUI( - el: @el.find('#text_module'), + el: @el.find('[data-id="text_module"]'), ) localUserInfo: (params) => @@ -252,11 +270,14 @@ class Index extends App.ControllerContent timeout: 12000, # create new create screen - ui.render() +# ui.render() + App.TaskManager.remove( ui.task_key ) # scroll to top ui.scrollTo() + ui.navigate "#ticket/zoom/#{@id}" + error: -> ui.log 'save failed!' ui.formEnable(e) @@ -324,9 +345,21 @@ class UserNew extends App.ControllerModal ui.modalHide() ) -App.Config.set( 'ticket_create', Index, 'Routes' ) -App.Config.set( 'ticket_create/:ticket_id/:article_id', Index, 'Routes' ) -App.Config.set( 'ticket_create/:type', Index, 'Routes' ) +class TicketCreateRouter extends App.ControllerPermanent + constructor: (params) -> + super + @log 'create router', params + # cleanup params + clean_params = + ticket_id: params.ticket_id + article_id: params.article_id + type: params.type + + App.TaskManager.add( 'TicketCreateScreen', params['type'], 'TicketCreate', clean_params ) + +App.Config.set( 'ticket_create', TicketCreateRouter, 'Routes' ) +App.Config.set( 'ticket_create/:ticket_id/:article_id', TicketCreateRouter, 'Routes' ) +App.Config.set( 'ticket_create/:type', TicketCreateRouter, 'Routes' ) App.Config.set( 'New', { prio: 8000, parent: '', name: 'New', target: '#new', role: ['Agent'] }, 'NavBarRight' ) App.Config.set( 'TicketNewCallOutbound', { prio: 8001, parent: '#new', name: 'Call Outbound', target: '#ticket_create/call_outbound', role: ['Agent'] }, 'NavBarRight' ) diff --git a/app/assets/javascripts/app/controllers/agent_ticket_zoom.js.coffee b/app/assets/javascripts/app/controllers/agent_ticket_zoom.js.coffee index e1cf00ea3..179a94e5b 100644 --- a/app/assets/javascripts/app/controllers/agent_ticket_zoom.js.coffee +++ b/app/assets/javascripts/app/controllers/agent_ticket_zoom.js.coffee @@ -34,6 +34,14 @@ class App.TicketZoom extends App.Controller @fetch( @ticket_id, false) @interval( update, 30000, @key, 'ticket_zoom' ) + meta: => + return if !@ticket + meta = + url: @url() + head: @ticket.title + title: @ticket.number + ' ' + @ticket.title + id: @ticket.id + url: => '#ticket/zoom/' + @ticket.id @@ -115,6 +123,8 @@ class App.TicketZoom extends App.Controller article = App.Collection.find( 'TicketArticle', article_id ) @articles.push article + App.Event.trigger 'ui:rerender' + # rework articles for article in @articles new Article( article: article ) @@ -163,7 +173,7 @@ class App.TicketZoom extends App.Controller form_id: @form_id model: configure_attributes: @configure_attributes_ticket - className: 'create' + className: 'update_ticket_' + @ticket.id params: @ticket form_data: @edit_form ) @@ -173,6 +183,7 @@ class App.TicketZoom extends App.Controller form_id: @form_id model: configure_attributes: @configure_attributes_article + className: 'update_ticket_' + @ticket.id form_data: @edit_form ) diff --git a/app/assets/javascripts/app/controllers/tag_widget.js.coffee b/app/assets/javascripts/app/controllers/tag_widget.js.coffee index e82efaaa5..fb1c0ba7f 100644 --- a/app/assets/javascripts/app/controllers/tag_widget.js.coffee +++ b/app/assets/javascripts/app/controllers/tag_widget.js.coffee @@ -1,10 +1,12 @@ -$ = jQuery.sub() - class App.TagWidget extends App.Controller constructor: -> super @load() + # update box size + App.Event.bind 'ui:rerender:content', => + @siteUpdate() + load: => @attribute_id = 'tags_' + @object.id + '_' + @object_type App.Com.ajax( @@ -33,7 +35,7 @@ class App.TagWidget extends App.Controller onRemoveTag: @onRemoveTag # height: '65px' ) - @delay @siteUpdate, 200 + @delay @siteUpdate, 250 # @el.find('#tags').elastic() @@ -64,7 +66,7 @@ class App.TagWidget extends App.Controller ) siteUpdate: (reorder) => - container = document.getElementById(@attribute_id + '_tagsinput') + container = document.getElementById( @attribute_id + '_tagsinput' ) if reorder $('#' + @attribute_id + '_tagsinput').height( 20 ) height = container.scrollHeight diff --git a/app/assets/javascripts/app/controllers/task_widget.js.coffee b/app/assets/javascripts/app/controllers/task_widget.js.coffee index a82e8f5b9..10bbb0bee 100644 --- a/app/assets/javascripts/app/controllers/task_widget.js.coffee +++ b/app/assets/javascripts/app/controllers/task_widget.js.coffee @@ -30,10 +30,21 @@ class App.TaskWidget extends App.Controller tasks = App.TaskManager.all() item_list = [] for key, task of tasks + data = + url: '#' + id: false + title: '?' + head: '?' + if task.worker + meta = task.worker.meta() + if meta + data = meta + data.title = App.i18n.escape( data.title ) + data.head = App.i18n.escape( data.head ) item = {} item.key = key item.task = task - item.data = App[task.type].find( task.type_id ) + item.data = data item_list.push item @html App.view('task_widget')( diff --git a/app/assets/javascripts/app/lib/app_post/i18n.js.coffee b/app/assets/javascripts/app/lib/app_post/i18n.js.coffee index 8779f32e6..56d1d0be9 100644 --- a/app/assets/javascripts/app/lib/app_post/i18n.js.coffee +++ b/app/assets/javascripts/app/lib/app_post/i18n.js.coffee @@ -29,6 +29,11 @@ class App.i18n _instance ?= new _Singleton( args ) _instance.set( args ) + @escape: ( args ) -> + if _instance == undefined + _instance ?= new _Singleton( args ) + _instance.escape( args ) + class _Singleton extends Spine.Module @include App.Log diff --git a/app/assets/javascripts/app/lib/app_post/task_manager.js.coffee b/app/assets/javascripts/app/lib/app_post/task_manager.js.coffee index c71dd9540..65e993e22 100644 --- a/app/assets/javascripts/app/lib/app_post/task_manager.js.coffee +++ b/app/assets/javascripts/app/lib/app_post/task_manager.js.coffee @@ -58,6 +58,7 @@ class _Singleton extends App.Controller else task.active = true App.Event.trigger 'ui:rerender' + App.Event.trigger 'ui:rerender:content' return key @task_count++ diff --git a/app/assets/javascripts/app/views/agent_ticket_create.jst.eco b/app/assets/javascripts/app/views/agent_ticket_create.jst.eco index c1f83658d..84f034e91 100644 --- a/app/assets/javascripts/app/views/agent_ticket_create.jst.eco +++ b/app/assets/javascripts/app/views/agent_ticket_create.jst.eco @@ -8,11 +8,11 @@
-
+
-
-
-
+
+
+
diff --git a/app/assets/javascripts/app/views/task_widget.jst.eco b/app/assets/javascripts/app/views/task_widget.jst.eco index e425f6177..2ef25e2d1 100644 --- a/app/assets/javascripts/app/views/task_widget.jst.eco +++ b/app/assets/javascripts/app/views/task_widget.jst.eco @@ -1,5 +1,5 @@
<% for item in @item_list: %> - <%= item.data.title %> + <%- item.data.head %> <% end %>
diff --git a/db/seeds.rb b/db/seeds.rb index f578f26b5..13a11086d 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -1789,6 +1789,8 @@ Translation.create_if_not_exists( :locale => 'de', :source => "Change your langu Translation.create_if_not_exists( :locale => 'de', :source => "Successfully!", :target => "Erfolgreich!" ) Translation.create_if_not_exists( :locale => 'de', :source => "Remove", :target => "Entfernen" ) Translation.create_if_not_exists( :locale => 'de', :source => "Add", :target => "Hinzufügen" ) +Translation.create_if_not_exists( :locale => 'de', :source => "Call Outbound", :target => "Anruf ausgehend" ) +Translation.create_if_not_exists( :locale => 'de', :source => "Call Inbound", :target => "Anruf eingehend" ) #Translation.create_if_not_exists( :locale => 'de', :source => "", :target => "" )