86 lines
2.2 KiB
Ruby
86 lines
2.2 KiB
Ruby
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 :ticket_creater_cpanel_id
|
|
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, :autosave => true, :dependent => :destroy
|
|
accepts_nested_attributes_for :ticket_queries, :allow_destroy => true
|
|
|
|
def can_be_reopened?
|
|
self.reopened_count < 2
|
|
end
|
|
|
|
def author
|
|
!self.ticket_creater_name.nil? ? self.ticket_creater_name : self.ticket_creater_cpanel_id
|
|
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)
|
|
if user.instance_of?(User)
|
|
tqrs = TicketQueryResponse.where(:user_tags.in => [user.id.to_s], :read_by.nin => [user.id.to_s])
|
|
elsif user.instance_of?(String)
|
|
tqrs = TicketQueryResponse.where(:user_tags.in => [user], :read_by.nin => [user])
|
|
end
|
|
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 |