From 3b3ecd279dcc0095bcf197e0e7568af5f6d2ebb7 Mon Sep 17 00:00:00 2001 From: Martin Edenhofer Date: Sat, 7 Jul 2012 11:09:09 +0200 Subject: [PATCH] Added split ticket feature. --- .../controllers/agent_ticket_create.js.coffee | 55 ++++++++++++++----- .../controllers/agent_ticket_zoom.js.coffee | 7 +++ .../app/views/agent_ticket_zoom.jst.eco | 3 +- .../ticket_overviews_controller.rb | 44 ++++++++++++++- db/seeds.rb | 20 +++++-- 5 files changed, 108 insertions(+), 21 deletions(-) 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 b0153fb53..bb84f4029 100644 --- a/app/assets/javascripts/app/controllers/agent_ticket_create.js.coffee +++ b/app/assets/javascripts/app/controllers/agent_ticket_create.js.coffee @@ -7,7 +7,7 @@ class Index extends App.Controller 'click .submit': 'submit', 'click .cancel': 'cancel', - constructor: -> + constructor: (params) -> super # check authentication @@ -15,8 +15,7 @@ class Index extends App.Controller # set title @title 'New Ticket' -# @render() - @fetch() + @fetch(params) @navupdate '#ticket_create' @edit_form = undefined @@ -25,18 +24,19 @@ class Index extends App.Controller Spine.bind 'ticket_create_rerender', (defaults) => @log 'rerender', defaults @render(defaults) - - fetch: () -> - # get data - @ajax = new App.Ajax + + # get data / in case also ticket data for split + fetch: (params) -> if @req @req.abort() + @ajax = new App.Ajax @req = @ajax.ajax( type: 'GET', url: '/ticket_create', data: { -# view: @view - } + ticket_id: params.ticket_id, + article_id: params.article_id, + }, processData: true, success: (data, status, xhr) => @@ -47,7 +47,30 @@ class Index extends App.Controller @loadCollection( type: 'User', data: data.users ) # render page - @render() + if !params.ticket_id && !params.article_id + @render() + else + + # load user collection + @loadCollection( type: 'User', data: data.users ) + + # load ticket collection + @loadCollection( type: 'Ticket', data: [data.ticket] ) + + # load article collections + @loadCollection( type: 'TicketArticle', data: data.articles || [] ) + + # render page + t = App.Ticket.find(params.ticket_id).attributes() + a = App.TicketArticle.find(params.article_id) + + # reset owner + t.owner_id = 0 + t.customer_id_autocompletion = a.from + t.subject = a.subject || t.title + t.body = a.body + @log '11111', t + @render( options: t ) ) render: (template = {}) -> @@ -60,8 +83,12 @@ class Index extends App.Controller defaults['ticket_priority_id'] = App.TicketPriority.findByAttribute( 'name', '2 normal' ) # remember customers - defaults['customer_id'] = $('#create_customer_id').val() - defaults['customer_id_autocompletion'] = $('#create_customer_id_autocompletion').val() + if $('#create_customer_id').val() + defaults['customer_id'] = $('#create_customer_id').val() + defaults['customer_id_autocompletion'] = $('#create_customer_id_autocompletion').val() + else +# defaults['customer_id'] = '2' +# defaults['customer_id_autocompletion'] = '12312313' # generate form configure_attributes = [ @@ -213,7 +240,6 @@ class UserNew extends App.ControllerModal ui = @ user.save( success: -> - console.log('-------', @, ui) ui.modalHide() realname = @.firstname + ' ' + @.lastname $('#create_customer_id').val(@.id) @@ -225,4 +251,5 @@ class UserNew extends App.ControllerModal ui.modalHide() ) -Config.Routes['ticket_create'] = Index \ No newline at end of file +Config.Routes['ticket_create'] = Index +Config.Routes['ticket_create/:ticket_id/:article_id'] = Index 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 b18a00c52..5ffb4573b 100644 --- a/app/assets/javascripts/app/controllers/agent_ticket_zoom.js.coffee +++ b/app/assets/javascripts/app/controllers/agent_ticket_zoom.js.coffee @@ -141,11 +141,18 @@ class Index extends App.Controller actions.push { name: 'reply', type: 'reply', + href: '#', } actions.push { name: 'reply all', type: 'reply-all', + href: '#', } + actions.push { + name: 'split', + type: 'split', + href: '#ticket_create/' + article.ticket_id + '/' + article.id, + } article.actions = actions # set title diff --git a/app/assets/javascripts/app/views/agent_ticket_zoom.jst.eco b/app/assets/javascripts/app/views/agent_ticket_zoom.jst.eco index 96e0de04c..ee89eb8f3 100644 --- a/app/assets/javascripts/app/views/agent_ticket_zoom.jst.eco +++ b/app/assets/javascripts/app/views/agent_ticket_zoom.jst.eco @@ -23,6 +23,7 @@
@@ -32,7 +33,7 @@ <% if article.actions: %> <% for action in article.actions: %> - - <%= action.name %> + <%= action.name %> <% end %> <% end %> - <%- article.humanTime %> <%- T('ago') %> diff --git a/app/controllers/ticket_overviews_controller.rb b/app/controllers/ticket_overviews_controller.rb index f1ddf0344..cbf6dc456 100644 --- a/app/controllers/ticket_overviews_controller.rb +++ b/app/controllers/ticket_overviews_controller.rb @@ -158,10 +158,50 @@ class TicketOverviewsController < ApplicationController ticket_priority_ids.push priority.id } + # split data + ticket = nil + articles = nil + if params[:ticket_id] && params[:article_id] + ticket = Ticket.find( params[:ticket_id] ) + + # get related users + users = {} + if !users[ticket.owner_id] + users[ticket.owner_id] = user_data_full(ticket.owner_id) + end + if !users[ticket.customer_id] + users[ticket.customer_id] = user_data_full(ticket.customer_id) + end + if !users[ticket.created_by_id] + users[ticket.created_by_id] = user_data_full(ticket.created_by_id) + end + + owner_ids = [] + ticket.agent_of_group.each { |user| + owner_ids.push user.id + if !users[user.id] + users[user.id] = user_data_full(user.id) + end + } + + # get related articles + ticket[:article_ids] = [ params[:article_id] ] + + article = Ticket::Article.find( params[:article_id] ) + + # add attachment list to article + article['attachments'] = Store.list( :object => 'Ticket::Article', :o_id => article.id ) + + # load users + if !users[article.created_by_id] + users[article.created_by_id] = user_data_full(article.created_by_id) + end + end + # return result render :json => { -# :ticket => ticket, -# :articles => articles, + :ticket => ticket, + :articles => [ article ], :users => users, :edit_form => { :owner_id => { diff --git a/db/seeds.rb b/db/seeds.rb index e6ef59471..365bdc6ca 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -1101,6 +1101,18 @@ user = User.create( :organizations => organizations, :created_by_id => 1 ) +user_community = User.create( + :login => 'nicol.braun@zammad.org', + :firstname => 'Nicol', + :lastname => 'Braun', + :email => 'nicol.braun@zammad.org', + :password => '', + :active => true, + :roles => roles, +# :groups => groups, + :organizations => organizations, + :created_by_id => 1 +) Link::Type.create( :name => 'normal' ) Link::Object.create( :name => 'Ticket' ) @@ -1144,17 +1156,17 @@ Ticket::Article::Sender.create( :name => 'System' ) ticket = Ticket.create( :group_id => Group.where( :name => 'Users' ).first.id, - :customer_id => User.where( :login => '-' ).first.id, + :customer_id => User.where( :login => 'nicol.braun@zammad.org' ).first.id, :owner_id => User.where( :login => '-' ).first.id, :title => 'Welcome to Zammad!', :ticket_state_id => Ticket::State.where( :name => 'new' ).first.id, :ticket_priority_id => Ticket::Priority.where( :name => '2 normal' ).first.id, - :created_by_id => User.where( :login => '-' ).first.id + :created_by_id => User.where( :login => 'nicol.braun@zammad.org' ).first.id ) Ticket::Article.create( - :created_by_id => User.where(:login => '-').first.id, + :created_by_id => User.where( :login => 'nicol.braun@zammad.org' ).first.id, :ticket_id => ticket.id, - :ticket_article_type_id => Ticket::Article::Type.where(:name => 'email' ).first.id, + :ticket_article_type_id => Ticket::Article::Type.where(:name => 'phone' ).first.id, :ticket_article_sender_id => Ticket::Article::Sender.where(:name => 'Customer' ).first.id, :from => 'Zammad Feedback ', :body => 'Welcome!