diff options
| -rw-r--r-- | app/controllers/compliance_control_sets_controller.rb | 31 | ||||
| -rw-r--r-- | app/models/compliance_control_set.rb | 4 | ||||
| -rw-r--r-- | app/views/compliance_control_sets/_filters.html.slim | 7 |
3 files changed, 41 insertions, 1 deletions
diff --git a/app/controllers/compliance_control_sets_controller.rb b/app/controllers/compliance_control_sets_controller.rb index c6f4288a9..20ddcbe97 100644 --- a/app/controllers/compliance_control_sets_controller.rb +++ b/app/controllers/compliance_control_sets_controller.rb @@ -1,10 +1,12 @@ class ComplianceControlSetsController < BreadcrumbController defaults resource_class: ComplianceControlSet + before_action :ransack_updated_at_params, only: [:index] respond_to :html def index index! do |format| - @q_for_form = @compliance_control_sets.ransack(params[:q]) + scope = ransack_period @compliance_control_sets + @q_for_form = scope.ransack(params[:q]) format.html { @compliance_control_sets = decorate_compliance_control_sets(@q_for_form.result) } @@ -32,6 +34,33 @@ class ComplianceControlSetsController < BreadcrumbController private + def ransack_updated_at_params + start_date = [] + end_date = [] + + if params[:q] && params[:q][:updated_at] && !params[:q][:updated_at].has_value?(nil) && !params[:q][:updated_at].has_value?("") + [1, 2, 3].each do |key| + start_date << params[:q][:updated_at]["begin(#{key}i)"].to_i + end_date << params[:q][:updated_at]["end(#{key}i)"].to_i + end + params[:q].delete([:updated_at]) + @begin_range = DateTime.new(*start_date,0,0,0) rescue nil + @end_range = DateTime.new(*end_date,23,59,59) rescue nil + end + end + + # Fake ransack filter + def ransack_period scope + return scope unless !!@begin_range && !!@end_range + + if @begin_range > @end_range + flash.now[:error] = t('imports.filters.error_period_filter') + else + scope = scope.where_updated_at_between(@begin_range, @end_range) + end + scope + end + def compliance_control_set_params params.require(:compliance_control_set).permit(:name, :id) end diff --git a/app/models/compliance_control_set.rb b/app/models/compliance_control_set.rb index cefdfbf1f..4dafd48c7 100644 --- a/app/models/compliance_control_set.rb +++ b/app/models/compliance_control_set.rb @@ -4,4 +4,8 @@ class ComplianceControlSet < ActiveRecord::Base validates :name, presence: true + scope :where_updated_at_between, ->(start_date, end_date) do + where('updated_at BETWEEN ? AND ?', start_date, end_date) + end + end diff --git a/app/views/compliance_control_sets/_filters.html.slim b/app/views/compliance_control_sets/_filters.html.slim index 587f74ce4..56cac8bd2 100644 --- a/app/views/compliance_control_sets/_filters.html.slim +++ b/app/views/compliance_control_sets/_filters.html.slim @@ -9,6 +9,13 @@ .form-group.togglable = f.label t('activerecord.models.organisation.one'), required: false, class: 'control-label' = f.input :organisation_name_eq_any, collection: organisations_filters_values, as: :check_boxes, label: false, label_method: lambda {|w| ("<span>#{w.name}</span>").html_safe}, required: false, wrapper_html: {class: 'checkbox_list'} + + .form-group.togglable + = f.label Import.human_attribute_name(:updated_at), required: false, class: 'control-label' + .filter_menu + = f.simple_fields_for :updated_at do |p| + = p.input :begin, as: :date, label: false, wrapper_html: {class: 'date smart_date filter_menu-item'}, default: @begin_range, include_blank: @begin_range ? false : true + = p.input :end, as: :date, label: false, wrapper_html: {class: 'date smart_date filter_menu-item'}, default: @end_range, include_blank: @end_range ? false : true .actions = link_to t('actions.erase'), @compliance_control_set, class: 'btn btn-link' |
