Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions app/controllers/api/v1/tickets_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,10 @@ def create
render json: { message: I18n.t('tickets.error.create') }, status: :unprocessable_entity
end
end

def index
result = Tickets::V1::Index.new(params).call
render json: result
end
end
end
21 changes: 21 additions & 0 deletions app/models/ticket.rb
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,8 @@ class Ticket < ApplicationRecord
end
end

scope :of_status, ->(status) { where(status: status) }

def add_activity
Activity.create( assigned_from: "", assigned_to: "", current_ticket_status: status, ticket_id: id,
description: I18n.t("ticket.#{status}", ticket_type: ticket_type, resolver: resolver.name, requester: requester.name)
Expand All @@ -68,4 +70,23 @@ def send_notification
description = I18n.t("ticket.#{status}", ticket_type: ticket_type, resolver: resolver.name, requester: requester.name)
NotifyMailer.notify_status_change(resolver, requester, description, id).deliver_now
end

def listing_data_attributes
self.as_json(
only: [:id, :status, :title, :description, :ticket_number, :ticket_type, :priority, :created_at, :resolved_at],
methods: [:department_name, :category_name, :resolver_name]
)
end

def department_name
self&.department&.name
end

def category_name
self&.category&.name
end

def resolver_name
self&.resolver&.name
end
end
76 changes: 76 additions & 0 deletions app/services/tickets/v1/index.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
module Tickets::V1
class Index

def initialize(params)
@filter_hash = {}
@filter_hash[:department_id] = params[:department_id] if params[:department_id].present?
@filter_hash[:category_id] = params[:category_id] if params[:category_id].present?
@ticket_status = params[:status]
@for_mobile = params[:for_mobile]
end

def call
get_tickets && get_response
end

def get_tickets
@ticket_counts = {}
@tickets = []
if @ticket_status.present?
@tickets = case @ticket_status
when 'open'
get_open_tickets()
when 'closed'
get_closed_tickets()
else
status_tickets = Ticket.of_status(@ticket_status)
status_tickets
end
else
@tickets = @filter_hash.present? ? Ticket.where(@filter_hash) : Ticket.all
@tickets
end
true
end

def get_open_tickets
inprogress_tickets = Ticket.inprogress
assigned_tickets = Ticket.assigned
resolved_tickets = Ticket.resolved
@ticket_counts[:inprogress_tickets_count] = inprogress_tickets.count
@ticket_counts[:assigned_tickets_count] = assigned_tickets.count
@ticket_counts[:resolved_tickets_count] = resolved_tickets.count
total_tickets = inprogress_tickets + assigned_tickets + resolved_tickets
total_tickets
end

def get_closed_tickets
closed_tickets = Ticket.closed
@ticket_counts[:closed_tickets_count] = closed_tickets.count
total_tickets = closed_tickets
if @for_mobile.present?
rejected_tickets = Ticket.rejected
@ticket_counts[:rejected_tickets_count] = rejected_tickets.count
total_tickets += rejected_tickets
end
total_tickets
end

def get_response
if @tickets.present?
@ticket_counts[:total_ticket_counts] = @tickets.count
response_hash = {
data: {
tickets: @tickets.collect{ |x| x.listing_data_attributes }
},
ticket_counts: @ticket_counts
}.as_json
else
response_hash = {
data: {},
error_message: I18n.t('tickets.index.not_found')
}.as_json
end
end
end
end
2 changes: 2 additions & 0 deletions config/locales/en.yml
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,8 @@ en:
create: "Ticket created successfully"
error:
create: "Unable to create ticket"
index:
not_found: "No tickets found"
ticket:
assigned: "%{ticket_type} has been assigned to: %{resolver}"
inprogress: "The work has been started on the %{ticket_type}"
Expand Down
2 changes: 1 addition & 1 deletion config/routes.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
# For details on the DSL available within this file, see https://guides.rubyonrails.org/routing.html
api_version(:module => "Api::V1", :header => {
name: "Accept", :value => "application/vnd.providesk; version=1"}) do
resources :tickets, only: [:create]
resources :tickets, only: [:create, :index]
resources :sessions, only: :create
resources :categories, only: :create
resources :departments, only: :create
Expand Down