85 lines
2.7 KiB
Ruby
85 lines
2.7 KiB
Ruby
# encoding: UTF-8
|
|
# frozen_string_literal: true
|
|
|
|
module API
|
|
module V2
|
|
module Admin
|
|
class Operations < Grape::API
|
|
helpers ::API::V2::Admin::Helpers
|
|
helpers do
|
|
params :get_operations_params do
|
|
optional :reference_type,
|
|
desc: 'The reference type for which operation was created.'
|
|
optional :rid,
|
|
type: Integer,
|
|
desc: 'The unique id of operation\'s reference, for which operation was created.'
|
|
optional :code,
|
|
type: Integer,
|
|
desc: 'Opeartion\'s code.'
|
|
use :currency
|
|
use :date_picker
|
|
end
|
|
|
|
def ransack_params
|
|
Helpers::RansackBuilder.new(params)
|
|
.eq(:code, :reference_type)
|
|
.translate(currency: :currency_id, rid: :reference_id)
|
|
.with_daterange
|
|
.build
|
|
end
|
|
end
|
|
|
|
# GET: api/v2/admin/assets
|
|
# GET: api/v2/admin/expenses
|
|
# GET: api/v2/admin/revenues
|
|
::Operations::Account::PLATFORM_TYPES.each do |op_type|
|
|
op_type_plural = op_type.to_s.pluralize
|
|
|
|
desc "Returns #{op_type_plural} as a paginated collection." do
|
|
success API::V2::Admin::Entities::Operation
|
|
end
|
|
params do
|
|
use :get_operations_params
|
|
use :pagination
|
|
use :ordering
|
|
end
|
|
get op_type_plural do
|
|
klass = ::Operations.const_get(op_type.capitalize)
|
|
admin_authorize! :read, klass
|
|
|
|
search = klass.ransack(ransack_params)
|
|
search.sorts = "#{params[:order_by]} #{params[:ordering]}"
|
|
|
|
present paginate(search.result, false), with: API::V2::Admin::Entities::Operation
|
|
end
|
|
end
|
|
|
|
# Get: api/v2/admin/liabilities
|
|
::Operations::Account::MEMBER_TYPES.each do |op_type|
|
|
op_type_plural = op_type.to_s.pluralize
|
|
|
|
desc "Returns #{op_type_plural} as a paginated collection." do
|
|
success API::V2::Admin::Entities::Operation
|
|
end
|
|
params do
|
|
use :uid
|
|
use :get_operations_params
|
|
use :pagination
|
|
use :ordering
|
|
end
|
|
get op_type_plural do
|
|
klass = ::Operations.const_get(op_type.capitalize)
|
|
admin_authorize! :read, klass
|
|
|
|
member = Member.find_by(uid: params[:uid]) if params[:uid].present?
|
|
search = klass.ransack(ransack_params.merge(member_id_eq: member&.id))
|
|
search.sorts = "#{params[:order_by]} #{params[:ordering]}"
|
|
|
|
present paginate(search.result, false), with: API::V2::Admin::Entities::Operation
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|