class Ticket include Mongoid::Document include Mongoid::Timestamps include OrbitTag::Taggable include OrbitCategory::Categorizable include Slug field :site_type field :ticket_creater_id field :ticket_creater_name field :subject field :urgent, type: Boolean, default: false field :reopened_count, type: Integer, :default => 0 field :status, :default => "open" field :taken_by, type: BSON::ObjectId scope :open, ->{ where(status: "open") } scope :closed, ->{ where(status: "closed") } scope :commenced, ->{ where(status: "commenced") } scope :not_urgent, ->{ where(:urgent.in => [false,nil]) } scope :all_urgent, ->{ where(urgent: true) } belongs_to :registered_site has_many :ticket_queries, :dependent => :destroy def can_be_reopened? self.reopened_count < 2 end def is_urgent? self.urgent end def reopened? self.reopened_count > 0 end def registered_site_title self.registered_site.title end 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? && tqr.ticket_query.ticket.status != "closed" 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