forked from Gitlink/forgeplus
36 lines
1.2 KiB
Ruby
36 lines
1.2 KiB
Ruby
class Admins::LaboratorySubjectQuery < ApplicationQuery
|
|
attr_reader :laboratory, :params
|
|
|
|
def initialize(laboratory, params)
|
|
@laboratory = laboratory
|
|
@params = params
|
|
end
|
|
|
|
def call
|
|
laboratory_subjects = laboratory.laboratory_subjects.joins(:subject)
|
|
|
|
keyword = params[:keyword].to_s.strip
|
|
if keyword.present?
|
|
like_sql = 'subjects.name LIKE :keyword OR CONCAT(users.lastname, users.firstname) LIKE :keyword OR users.nickname LIKE :keyword'
|
|
laboratory_subjects = laboratory_subjects.joins(subject: :user).where(like_sql, keyword: "%#{keyword}%")
|
|
end
|
|
|
|
# 状态
|
|
laboratory_subjects = laboratory_subjects.where(subjects: { status: params[:status] }) if params[:status].present?
|
|
|
|
# 创建者单位
|
|
if params[:school_id].present?
|
|
laboratory_subjects = laboratory_subjects.joins(subjects: { user: :user_extension })
|
|
.where(user_extensions: { school_id: params[:school_id] })
|
|
end
|
|
|
|
# 首页展示、单位自建
|
|
%i[homepage ownership].each do |column|
|
|
if params[column].present? && params[column].to_s == 'true'
|
|
laboratory_subjects = laboratory_subjects.where(column => true)
|
|
end
|
|
end
|
|
|
|
laboratory_subjects
|
|
end
|
|
end |