aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGuillaume2017-09-26 11:56:33 +0200
committerGuillaume2017-09-26 11:56:33 +0200
commit00aad1349ae72d80d034f84c3b4ec360e1033511 (patch)
tree3244df100f903966528560d05a329cc7b2143c28
parent733548a996d5e66c740f59d313eb031ddfcc9116 (diff)
downloadchouette-core-00aad1349ae72d80d034f84c3b4ec360e1033511.tar.bz2
add date filter to compliance_control_sets Refs #4466
-rw-r--r--app/controllers/compliance_control_sets_controller.rb31
-rw-r--r--app/models/compliance_control_set.rb4
-rw-r--r--app/views/compliance_control_sets/_filters.html.slim7
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'