diff --git a/app/controllers/dashboard/current_tasks_controller.rb b/app/controllers/dashboard/current_tasks_controller.rb index deb7843c3..f1b9eb6c7 100644 --- a/app/controllers/dashboard/current_tasks_controller.rb +++ b/app/controllers/dashboard/current_tasks_controller.rb @@ -44,10 +44,13 @@ module Dashboard end page = (params[:page] || 1).to_i - tasks = tasks.search_by_name(current_user, current_team, task_filters[:query]) - .joins(:my_module_status) - .select('my_modules.*', 'my_module_statuses.name as status_name', 'my_module_statuses.color as status_color') - .preload(experiment: :project).page(page).per(Constants::INFINITE_SCROLL_LIMIT) + tasks = tasks.search_by_name(current_user, current_team, task_filters[:query]) if task_filters[:query].present? + tasks = tasks.joins(:my_module_status) + .select( + 'my_modules.*', + 'my_module_statuses.name AS status_name', + 'my_module_statuses.color AS status_color' + ).preload(experiment: :project).page(page).per(Constants::INFINITE_SCROLL_LIMIT) tasks_list = tasks.map do |task| render_to_string(partial: 'dashboards/current_tasks/task', locals: { task: task }) diff --git a/app/services/dashboard/recent_work_service.rb b/app/services/dashboard/recent_work_service.rb index 59ec4fda3..47af41568 100644 --- a/app/services/dashboard/recent_work_service.rb +++ b/app/services/dashboard/recent_work_service.rb @@ -23,29 +23,14 @@ module Dashboard all_activities = join_step_user_roles(all_activities) team_activities = all_activities.where(subject_type: %w(Team RepositoryBase ProjectFolder)) - project_activities = all_activities.where(project_user_assignments: { user_id: @user.id }) - .where('project_user_roles.permissions @> ARRAY[?]::varchar[]', - [ProjectPermissions::ACTIVITIES_READ]) - report_activities = all_activities.where(report_project_user_assignments: { user_id: @user.id }) - .where('report_project_user_roles.permissions @> ARRAY[?]::varchar[]', - [ProjectPermissions::ACTIVITIES_READ]) - experiment_activities = all_activities.where(experiment_user_assignments: { user_id: @user.id }) - .where('experiment_user_roles.permissions @> ARRAY[?]::varchar[]', - [ExperimentPermissions::ACTIVITIES_READ]) - my_module_activities = all_activities.where(my_module_user_assignments: { user_id: @user.id }) - .where('my_module_user_roles.permissions @> ARRAY[?]::varchar[]', - [MyModulePermissions::ACTIVITIES_READ]) - result_activities = all_activities.where(result_my_module_user_assignments: { user_id: @user.id }) - .where('result_my_module_user_roles.permissions @> ARRAY[?]::varchar[]', - [MyModulePermissions::ACTIVITIES_READ]) - protocol_activities = all_activities.where(protocol_my_module_user_assignments: { user_id: @user.id }) - .where('protocol_my_module_user_roles.permissions @> ARRAY[?]::varchar[]', - [MyModulePermissions::ACTIVITIES_READ]) + project_activities = all_activities.where.not(project_user_roles: { id: nil }) + report_activities = all_activities.where.not(report_project_user_roles: { id: nil }) + experiment_activities = all_activities.where.not(experiment_user_roles: { id: nil }) + my_module_activities = all_activities.where.not(my_module_user_roles: { id: nil }) + result_activities = all_activities.where.not(result_my_module_user_roles: { id: nil }) + protocol_activities = all_activities.where.not(protocol_my_module_user_roles: { id: nil }) protocol_repository_activities = all_activities.where(project_id: nil, subject_type: 'Protocol') - - step_activities = all_activities.where(step_my_module_user_assignments: { user_id: @user.id }) - .where('step_my_module_user_roles.permissions @> ARRAY[?]::varchar[]', - [MyModulePermissions::ACTIVITIES_READ]) + step_activities = all_activities.where.not(step_my_module_user_roles: { id: nil }) activities = team_activities.or(project_activities) .or(report_activities) @@ -140,81 +125,109 @@ module Dashboard private def join_project_user_roles(activities) - activities.joins("LEFT OUTER JOIN projects project_subjects - ON project_subjects.id = activities.subject_id AND activities.subject_type='Project'") - .joins("LEFT OUTER JOIN user_assignments project_user_assignments - ON project_user_assignments.assignable_type = 'Project' - AND project_user_assignments.assignable_id = project_subjects.id - LEFT OUTER JOIN user_roles project_user_roles - ON project_user_roles.id = project_user_assignments.user_role_id") + activities.joins( + "LEFT OUTER JOIN projects project_subjects + ON project_subjects.id = activities.subject_id AND activities.subject_type='Project' + LEFT OUTER JOIN user_assignments project_user_assignments + ON project_user_assignments.assignable_type = 'Project' + AND project_user_assignments.assignable_id = project_subjects.id + AND project_user_assignments.user_id = #{@user.id} + LEFT OUTER JOIN user_roles project_user_roles + ON project_user_roles.id = project_user_assignments.user_role_id + AND project_user_roles.permissions @> ARRAY['#{ProjectPermissions::ACTIVITIES_READ}']::varchar[]" + ) end def join_report_project_user_roles(activities) - activities.joins("LEFT OUTER JOIN projects report_project_subjects - ON report_project_subjects.id = activities.project_id AND activities.subject_type='Report'") - .joins("LEFT OUTER JOIN user_assignments report_project_user_assignments - ON report_project_user_assignments.assignable_type = 'Project' - AND report_project_user_assignments.assignable_id = report_project_subjects.id - LEFT OUTER JOIN user_roles report_project_user_roles - ON report_project_user_roles.id = report_project_user_assignments.user_role_id") + activities.joins( + "LEFT OUTER JOIN projects report_project_subjects + ON report_project_subjects.id = activities.project_id AND activities.subject_type='Report' + LEFT OUTER JOIN user_assignments report_project_user_assignments + ON report_project_user_assignments.assignable_type = 'Project' + AND report_project_user_assignments.assignable_id = report_project_subjects.id + AND report_project_user_assignments.user_id = #{@user.id} + LEFT OUTER JOIN user_roles report_project_user_roles + ON report_project_user_roles.id = report_project_user_assignments.user_role_id + AND report_project_user_roles.permissions @> ARRAY['#{ProjectPermissions::ACTIVITIES_READ}']::varchar[]" + ) end def join_experiment_user_roles(activities) - activities.joins("LEFT OUTER JOIN experiments experiment_subjects - ON experiment_subjects.id = activities.subject_id AND activities.subject_type='Experiment'") - .joins("LEFT OUTER JOIN user_assignments experiment_user_assignments - ON experiment_user_assignments.assignable_type = 'Experiment' - AND experiment_user_assignments.assignable_id = experiment_subjects.id - LEFT OUTER JOIN user_roles experiment_user_roles - ON experiment_user_roles.id = experiment_user_assignments.user_role_id") + activities.joins( + "LEFT OUTER JOIN experiments experiment_subjects + ON experiment_subjects.id = activities.subject_id AND activities.subject_type='Experiment' + LEFT OUTER JOIN user_assignments experiment_user_assignments + ON experiment_user_assignments.assignable_type = 'Experiment' + AND experiment_user_assignments.assignable_id = experiment_subjects.id + AND experiment_user_assignments.user_id = #{@user.id} + LEFT OUTER JOIN user_roles experiment_user_roles + ON experiment_user_roles.id = experiment_user_assignments.user_role_id + AND experiment_user_roles.permissions @> ARRAY['#{ExperimentPermissions::ACTIVITIES_READ}']::varchar[]" + ) end def join_my_module_user_roles(activities) - activities.joins("LEFT OUTER JOIN my_modules my_module_subjects - ON my_module_subjects.id = activities.subject_id AND activities.subject_type='MyModule'") - .joins("LEFT OUTER JOIN user_assignments my_module_user_assignments - ON my_module_user_assignments.assignable_type = 'MyModule' - AND my_module_user_assignments.assignable_id = my_module_subjects.id - LEFT OUTER JOIN user_roles my_module_user_roles - ON my_module_user_roles.id = my_module_user_assignments.user_role_id") + activities.joins( + "LEFT OUTER JOIN my_modules my_module_subjects + ON my_module_subjects.id = activities.subject_id AND activities.subject_type='MyModule' + LEFT OUTER JOIN user_assignments my_module_user_assignments + ON my_module_user_assignments.assignable_type = 'MyModule' + AND my_module_user_assignments.assignable_id = my_module_subjects.id + AND my_module_user_assignments.user_id = #{@user.id} + LEFT OUTER JOIN user_roles my_module_user_roles + ON my_module_user_roles.id = my_module_user_assignments.user_role_id + AND my_module_user_roles.permissions @> ARRAY['#{MyModulePermissions::ACTIVITIES_READ}']::varchar[]" + ) end def join_result_user_roles(activities) - activities.joins("LEFT OUTER JOIN results result_subjects - ON result_subjects.id = activities.subject_id AND activities.subject_type='Result' - LEFT OUTER JOIN my_modules result_my_modules - ON result_subjects.my_module_id = result_my_modules.id") - .joins("LEFT OUTER JOIN user_assignments result_my_module_user_assignments - ON result_my_module_user_assignments.assignable_type = 'MyModule' - AND result_my_module_user_assignments.assignable_id = result_my_modules.id - LEFT OUTER JOIN user_roles result_my_module_user_roles - ON result_my_module_user_roles.id = result_my_module_user_assignments.user_role_id") + activities.joins( + "LEFT OUTER JOIN results result_subjects + ON result_subjects.id = activities.subject_id AND activities.subject_type='Result' + LEFT OUTER JOIN my_modules result_my_modules + ON result_subjects.my_module_id = result_my_modules.id + LEFT OUTER JOIN user_assignments result_my_module_user_assignments + ON result_my_module_user_assignments.assignable_type = 'MyModule' + AND result_my_module_user_assignments.assignable_id = result_my_modules.id + AND result_my_module_user_assignments.user_id = #{@user.id} + LEFT OUTER JOIN user_roles result_my_module_user_roles + ON result_my_module_user_roles.id = result_my_module_user_assignments.user_role_id + AND result_my_module_user_roles.permissions @> ARRAY['#{MyModulePermissions::ACTIVITIES_READ}']::varchar[]" + ) end def join_protocol_user_roles(activities) - activities.joins("LEFT OUTER JOIN protocols protocol_subjects - ON protocol_subjects.id = activities.subject_id AND activities.subject_type='Protocol' - LEFT OUTER JOIN my_modules protocol_my_modules - ON protocol_subjects.my_module_id = protocol_my_modules.id") - .joins("LEFT OUTER JOIN user_assignments protocol_my_module_user_assignments - ON protocol_my_module_user_assignments.assignable_type = 'MyModule' - AND protocol_my_module_user_assignments.assignable_id = protocol_my_modules.id - LEFT OUTER JOIN user_roles protocol_my_module_user_roles - ON protocol_my_module_user_roles.id = protocol_my_module_user_assignments.user_role_id") + activities.joins( + "LEFT OUTER JOIN protocols protocol_subjects + ON protocol_subjects.id = activities.subject_id AND activities.subject_type='Protocol' + LEFT OUTER JOIN my_modules protocol_my_modules + ON protocol_subjects.my_module_id = protocol_my_modules.id + LEFT OUTER JOIN user_assignments protocol_my_module_user_assignments + ON protocol_my_module_user_assignments.assignable_type = 'MyModule' + AND protocol_my_module_user_assignments.assignable_id = protocol_my_modules.id + AND protocol_my_module_user_assignments.user_id = #{@user.id} + LEFT OUTER JOIN user_roles protocol_my_module_user_roles + ON protocol_my_module_user_roles.id = protocol_my_module_user_assignments.user_role_id + AND protocol_my_module_user_roles.permissions @> ARRAY['#{MyModulePermissions::ACTIVITIES_READ}']::varchar[]" + ) end def join_step_user_roles(activities) - activities.joins("LEFT OUTER JOIN steps step_subjects - ON step_subjects.id = activities.subject_id AND activities.subject_type='Step' - LEFT OUTER JOIN protocols step_protocols - ON step_subjects.protocol_id = step_protocols.id - LEFT OUTER JOIN my_modules step_my_modules - ON step_protocols.my_module_id = step_my_modules.id") - .joins("LEFT OUTER JOIN user_assignments step_my_module_user_assignments - ON step_my_module_user_assignments.assignable_type = 'MyModule' - AND step_my_module_user_assignments.assignable_id = step_my_modules.id - LEFT OUTER JOIN user_roles step_my_module_user_roles - ON step_my_module_user_roles.id = step_my_module_user_assignments.user_role_id") + activities.joins( + "LEFT OUTER JOIN steps step_subjects + ON step_subjects.id = activities.subject_id AND activities.subject_type='Step' + LEFT OUTER JOIN protocols step_protocols + ON step_subjects.protocol_id = step_protocols.id + LEFT OUTER JOIN my_modules step_my_modules + ON step_protocols.my_module_id = step_my_modules.id + LEFT OUTER JOIN user_assignments step_my_module_user_assignments + ON step_my_module_user_assignments.assignable_type = 'MyModule' + AND step_my_module_user_assignments.assignable_id = step_my_modules.id + AND step_my_module_user_assignments.user_id = #{@user.id} + LEFT OUTER JOIN user_roles step_my_module_user_roles + ON step_my_module_user_roles.id = step_my_module_user_assignments.user_role_id + AND step_my_module_user_roles.permissions @> ARRAY['#{MyModulePermissions::ACTIVITIES_READ}']::varchar[]" + ) end def generate_url(recent_object)