adjust filters

This commit is contained in:
Pete Matsyburka
2024-11-23 01:45:10 +02:00
parent b86aac86d1
commit 9beaaa0851
28 changed files with 410 additions and 304 deletions
-17
View File
@@ -115,21 +115,4 @@ class ApplicationController < ActionController::Base
redirect_to request.url.gsub('.co/', '.com/'), allow_other_host: true, status: :moved_permanently
end
def date_range(key)
p = params.permit(key => %i[from to]).fetch(key, {})
timezone = ActiveSupport::TimeZone[current_account.timezone] || Time.zone
start_date = timezone.parse(p[:from]) if p[:from].present?
end_date = timezone.parse(p[:to]) if p[:to].present?
if start_date.present? && end_date.present? && start_date < end_date
start_date..end_date
elsif start_date.present? && end_date.present? && start_date == end_date
start_date.beginning_of_day..end_date.end_of_day
elsif start_date.present?
start_date..
elsif end_date.present?
..end_date
end
end
end
@@ -9,7 +9,14 @@ class SubmissionsArchivedController < ApplicationController
.or(@submissions.where.not(templates: { archived_at: nil }))
.preload(:created_by_user, template: :author)
@submissions = Submissions.search(@submissions, params[:q], search_template: true)
@submissions = Submissions::Filter.call(@submissions, current_user, params)
@pagy, @submissions = pagy(@submissions.preload(:submitters).order(id: :desc))
@submissions = if params[:completed_at_from].present? || params[:completed_at_to].present?
@submissions.order(Submitter.arel_table[:completed_at].maximum.desc)
else
@submissions.order(id: :desc)
end
@pagy, @submissions = pagy(@submissions.preload(submitters: :start_form_submission_events))
end
end
@@ -11,10 +11,17 @@ class SubmissionsDashboardController < ApplicationController
.preload(:created_by_user, template: :author)
@submissions = Submissions.search(@submissions, params[:q], search_template: true)
@submissions = Submissions::Filter.call(@submissions, current_user, params)
@submissions = @submissions.pending if params[:status] == 'pending'
@submissions = @submissions.completed if params[:status] == 'completed'
@pagy, @submissions = pagy(@submissions.preload(submitters: :start_form_submission_events).order(id: :desc))
@submissions = if params[:completed_at_from].present? || params[:completed_at_to].present?
@submissions.order(Submitter.arel_table[:completed_at].maximum.desc)
else
@submissions.order(id: :desc)
end
@pagy, @submissions = pagy(@submissions.preload(submitters: :start_form_submission_events))
end
end
@@ -0,0 +1,17 @@
# frozen_string_literal: true
class SubmissionsFiltersController < ApplicationController
ALLOWED_NAMES = %w[
author
completed_at
created_at
].freeze
skip_authorization_check
def show
return head :not_found unless ALLOWED_NAMES.include?(params[:name])
render params[:name]
end
end
@@ -7,8 +7,15 @@ class TemplatesArchivedSubmissionsController < ApplicationController
def index
@submissions = @submissions.where.not(archived_at: nil)
@submissions = Submissions.search(@submissions, params[:q], search_values: true)
@submissions = Submissions::Filter.call(@submissions, current_user, params)
@pagy, @submissions = pagy(@submissions.preload(:submitters).order(id: :desc))
@submissions = if params[:completed_at_from].present? || params[:completed_at_to].present?
@submissions.order(Submitter.arel_table[:completed_at].maximum.desc)
else
@submissions.order(id: :desc)
end
@pagy, @submissions = pagy(@submissions.preload(submitters: :start_form_submission_events))
rescue ActiveRecord::RecordNotFound
redirect_to root_path
end
+7 -37
View File
@@ -4,51 +4,29 @@ class TemplatesController < ApplicationController
load_and_authorize_resource :template
before_action :load_base_template, only: %i[new create]
helper_method :created_at_range, :completed_at_range
def show
submissions = @template.submissions.accessible_by(current_ability)
submissions = submissions.active if @template.archived_at.blank?
submissions = Submissions.search(submissions, params[:q], search_values: true)
submissions = Submissions::Filter.call(submissions, current_user, params)
@base_submissions = submissions
submissions = submissions.pending if params[:status] == 'pending'
submissions = submissions.completed if params[:status] == 'completed'
submissions = submissions.where(created_at: created_at_range) if created_at_range.present?
if completed_at_range.present?
submissions =
Submission.from(submissions.completed
.joins(:submitters)
.select('submissions.*, max(completed_at) AS last_completed_at')
.group('submissions.id'), :submissions)
.where(last_completed_at: completed_at_range)
end
submissions = if params[:completed_at_from].present? || params[:completed_at_to].present?
submissions.order(Submitter.arel_table[:completed_at].maximum.desc)
else
submissions.order(id: :desc)
end
if params[:author].present?
submissions =
submissions.joins(:created_by_user)
.where("concat_ws(' ', NULLIF(users.first_name, ''), NULLIF(last_name, '')) = ?", params[:author])
end
@pagy, @submissions = pagy(submissions.preload(submitters: :start_form_submission_events).order(id: :desc))
@pagy, @submissions = pagy(submissions.preload(submitters: :start_form_submission_events))
rescue ActiveRecord::RecordNotFound
redirect_to root_path
end
def filter
return unless params[:filter] == 'author'
submissions = @template.submissions.accessible_by(current_ability)
submissions = submissions.active if @template.archived_at.blank?
@creator_names = submissions.includes(:created_by_user)
.filter_map(&:created_by_user)
.map(&:full_name)
.uniq
.sort
end
def new
@template.name = "#{@base_template.name} (#{I18n.t('clone')})" if @base_template
end
@@ -176,12 +154,4 @@ class TemplatesController < ApplicationController
@base_template = Template.accessible_by(current_ability).find_by(id: params[:base_template_id])
end
def created_at_range
@created_at_range ||= date_range(:created_at)
end
def completed_at_range
@completed_at_range ||= date_range(:completed_at)
end
end