diff --git a/app/assets/stylesheets/tickets/ticket_index.scss b/app/assets/stylesheets/tickets/ticket_index.scss index 41a8f19..5179e98 100644 --- a/app/assets/stylesheets/tickets/ticket_index.scss +++ b/app/assets/stylesheets/tickets/ticket_index.scss @@ -18,6 +18,10 @@ body { } } +#main-wrap .wrap-inner{ + padding : 20px; +} + .ticket-search-wrap { font-family: $main-font; diff --git a/app/controllers/admin/tickets_controller.rb b/app/controllers/admin/tickets_controller.rb index bf42212..0c524fd 100644 --- a/app/controllers/admin/tickets_controller.rb +++ b/app/controllers/admin/tickets_controller.rb @@ -32,13 +32,47 @@ class Admin::TicketsController < OrbitAdminController def my_tickets if params[:type] == "history" - @tickets = Ticket.where(:taken_by => current_user.id).closed.group_by(&:category) + if params[:keywords].present? + @tickets = search_tickets + @tickets = @tickets.where(:taken_by => current_user.id).closed.group_by(&:category) + else + @tickets = Ticket.where(:taken_by => current_user.id).closed.group_by(&:category) + end else - @tickets = Ticket.where(:taken_by => current_user.id).commenced.desc(:urgent).group_by(&:category) + if params[:keywords].present? + @tickets = search_tickets + @tickets = @tickets.where(:taken_by => current_user.id).commenced.desc(:urgent).group_by(&:category) + else + @tickets = Ticket.where(:taken_by => current_user.id).commenced.desc(:urgent).group_by(&:category) + end end @categories = @tickets.keys end + def tagged_tickets + tqrs = TicketQueryResponse.where(:user_tags.in => [current_user.id.to_s], :read_by.nin => [current_user.id.to_s]) + @unread_tickets = [] + @read_tickets = [] + tqrs.each do |tqr| + @unread_tickets << tqr.ticket_query.ticket if !tqr.ticket_query.nil? && !tqr.ticket_query.ticket.nil? + end + tqrs = TicketQueryResponse.where(:user_tags.in => [current_user.id.to_s], :read_by.in => [current_user.id.to_s]) + tqrs.each do |tqr| + @read_tickets << tqr.ticket_query.ticket if !tqr.ticket_query.nil? && !tqr.ticket_query.ticket.nil? + end + @read_tickets.uniq! + @unread_tickets.uniq! + if params[:keywords].present? + tickets = search_tickets + @read_tickets = @read_tickets & tickets + @unread_tickets = @unread_tickets & tickets + end + @unread_tickets = @unread_tickets.group_by(&:category) + @read_tickets = @read_tickets.group_by(&:category) + @unread_tickets_categories = @unread_tickets.keys + @read_tickets_categories = @read_tickets.keys + end + def show @ticket = Ticket.find(params[:id]) rescue nil @categories = ModuleApp.find_by_key("ticket").categories @@ -138,36 +172,7 @@ class Admin::TicketsController < OrbitAdminController end def search - statuses = ["open","commenced","closed"] - if params[:keywords].present? - keywords = params[:keywords] - type = (keywords.is_i? ? (keywords.length == 8 ? "number" : "text") : "text") - if type == "text" - regex = Regexp.new(/[a-z]+:/) - matches = keywords.scan(regex) - if !matches.blank? - smart_field = matches.first - if @smart_search_fields.include?(smart_field) - type = "smart" - keywords = keywords.sub(smart_field,"") - end - end - end - end - case type - when "number" - @tickets = Ticket.where(:status.in => statuses, :uid => keywords) - when "text" - @tickets = Ticket.where(:status.in => statuses) - @tickets = search_data(@tickets,[:subject, :uid, :status, :site_type, :ticket_creater_id, :ticket_creater_name]) - regex = Regexp.new(".*"+keywords+".*", "i") - sites = RegisteredSite.any_of({:title => regex},{:site_domain => regex}) - sites.each do |site| - @tickets = (@tickets | site.tickets.where(:status.in => statuses)) - end - when "smart" - @tickets = smart_search(statuses,nil,smart_field,keywords) - end + @tickets = search_tickets if !@tickets.nil? @tickets = @tickets.group_by(&:category) @categories = @tickets.keys @@ -220,7 +225,7 @@ class Admin::TicketsController < OrbitAdminController end def tickets_by_category - @table_fields = [:ticket_number, :site_name, :subject, :created_at, :tags, :status, :taken_by, :urgent] + @table_fields = [:tagged, :ticket_number, :site_name, :subject, :created_at, :tags, :status, :taken_by, :urgent] statuses = params["type"] == "history" ? ["closed"] : ["open","commenced"] @category = Category.find(params[:category_id]) rescue nil if params[:keywords].present? @@ -239,11 +244,11 @@ class Admin::TicketsController < OrbitAdminController end end if type.nil? - @tickets = Ticket.where(:category_id => @category.id, :status.in => statuses).order_by(sort).page(params[:page]).per(15) + @tickets = Ticket.where(:category_id => @category.id, :status.in => statuses).order_by(sort) else case type when "number" - @tickets = Ticket.where(:category_id => @category.id, :status.in => statuses, :uid => keywords).order_by(sort).page(params[:page]).per(15) + @tickets = Ticket.where(:category_id => @category.id, :status.in => statuses, :uid => keywords).order_by(sort) when "text" @tickets = Ticket.where(:category_id => @category.id, :status.in => statuses).order_by(sort) @tickets = search_data(@tickets,[:subject, :uid, :status, :site_type, :ticket_creater_id, :ticket_creater_name]) @@ -252,17 +257,51 @@ class Admin::TicketsController < OrbitAdminController sites.each do |site| @tickets = (@tickets | site.tickets.where(:category_id => @category.id, :status.in => statuses)) end - @tickets = Kaminari.paginate_array(@tickets).page(params[:page]).per(15) when "smart" @tickets = smart_search(statuses,@category,smart_field,keywords) @tickets = @tickets.order_by(sort) rescue @tickets - @tickets = Kaminari.paginate_array(@tickets).page(params[:page]).per(15) end end if !@category.nil? + @tickets = @tickets.where(:taken_by => current_user.id) if params[:takenby].present? + @tickets = Kaminari.paginate_array(@tickets).page(params[:page]).per(15) if !@tickets.nil? end private + def search_tickets + statuses = ["open","commenced","closed"] + if params[:keywords].present? + keywords = params[:keywords] + type = (keywords.is_i? ? (keywords.length == 8 ? "number" : "text") : "text") + if type == "text" + regex = Regexp.new(/[a-z]+:/) + matches = keywords.scan(regex) + if !matches.blank? + smart_field = matches.first + if @smart_search_fields.include?(smart_field) + type = "smart" + keywords = keywords.sub(smart_field,"") + end + end + end + end + case type + when "number" + tickets = Ticket.where(:status.in => statuses, :uid => keywords) + when "text" + tickets = Ticket.where(:status.in => statuses) + tickets = search_data(tickets,[:subject, :uid, :status, :site_type, :ticket_creater_id, :ticket_creater_name]) + regex = Regexp.new(".*"+keywords+".*", "i") + sites = RegisteredSite.any_of({:title => regex},{:site_domain => regex}) + sites.each do |site| + tickets = (tickets | site.tickets.where(:status.in => statuses)) + end + when "smart" + tickets = smart_search(statuses,nil,smart_field,keywords) + end + tickets + end + def can_mark_urgent?(ticket) tickets = Ticket.where(:category_id => ticket.category_id, :urgent => true).count return tickets < 5 diff --git a/app/models/ticket.rb b/app/models/ticket.rb index 2609e18..7543fad 100644 --- a/app/models/ticket.rb +++ b/app/models/ticket.rb @@ -45,4 +45,33 @@ class Ticket def registered_site_domain self.registered_site.site_domain end + + def self.get_ticket_unread_count_for_user(user) + tqrs = TicketQueryResponse.where(:user_tags.in => [user.id.to_s], :read_by.nin => [user.id.to_s]) + unread_tickets = [] + tqrs.each do |tqr| + unread_tickets << tqr.ticket_query.ticket if !tqr.ticket_query.nil? && !tqr.ticket_query.ticket.nil? + end + unread_tickets.uniq! + unread_tickets.count + end + + def tagged_status(user) + queries = self.ticket_queries + status = "not_tagged" + queries.each do |query| + tqrs = query.ticket_query_responses.where(:user_tags.in => [user.id.to_s]) + if tqrs.count > 0 + tqrs = query.ticket_query_responses.where(:user_tags.in => [user.id.to_s], :read_by.in => [user.id.to_s]) + if tqrs.count > 0 + status = "read" + else + status = "tagged" + end + else + status = "not_tagged" + end + end + status + end end \ No newline at end of file diff --git a/app/views/admin/tickets/_search_form.html.erb b/app/views/admin/tickets/_search_form.html.erb index 5b96088..2af463d 100644 --- a/app/views/admin/tickets/_search_form.html.erb +++ b/app/views/admin/tickets/_search_form.html.erb @@ -4,7 +4,7 @@ Search tickets - <% if params[:keywords].present? %>