diff options
| author | cedricnjanga | 2017-09-12 14:04:29 +0200 | 
|---|---|---|
| committer | cedricnjanga | 2017-09-12 14:04:29 +0200 | 
| commit | 54a6da367724eeb303f527103ddfed6e32f56bed (patch) | |
| tree | 726f32fb7f96cb09859624b58739372e54962c8b | |
| parent | 42f80e0aaca740b57f69847c36fd4c4463af6169 (diff) | |
| download | chouette-core-54a6da367724eeb303f527103ddfed6e32f56bed.tar.bz2 | |
Change the import filter to include two inputs and tweak ransack filter to convert date object to dateTime object
| -rw-r--r-- | app/assets/javascripts/filters/import.js | 2 | ||||
| -rw-r--r-- | app/controllers/imports_controller.rb | 38 | ||||
| -rw-r--r-- | app/models/import.rb | 8 | ||||
| -rw-r--r-- | app/views/imports/_filters.html.slim | 4 | ||||
| -rw-r--r-- | config/locales/imports.en.yml | 1 | ||||
| -rw-r--r-- | config/locales/imports.fr.yml | 1 | 
6 files changed, 38 insertions, 16 deletions
| diff --git a/app/assets/javascripts/filters/import.js b/app/assets/javascripts/filters/import.js index d0b96da10..bb665d5ad 100644 --- a/app/assets/javascripts/filters/import.js +++ b/app/assets/javascripts/filters/import.js @@ -1,6 +1,6 @@  const DateFilter = require('../helpers/date_filters')  $(document).ready(function(){ -  const importDF = new DateFilter("#import_filter_btn", "Tous les champs du filtre de date doivent être remplis", "#q_started_on_date_NUMi") +  const importDF = new DateFilter("#import_filter_btn", "Tous les champs du filtre de date doivent être remplis", "#q_started_at_begin_NUMi", "#q_started_at_end_NUMi")    importDF()  }) diff --git a/app/controllers/imports_controller.rb b/app/controllers/imports_controller.rb index 97a8f91aa..2bd8cc6f4 100644 --- a/app/controllers/imports_controller.rb +++ b/app/controllers/imports_controller.rb @@ -1,7 +1,7 @@  class ImportsController < BreadcrumbController    skip_before_action :authenticate_user!, only: [:download]    defaults resource_class: Import, collection_name: 'imports', instance_name: 'import' -  before_action :ransack_started_on_date, only: [:index] +  before_action :ransack_started_at_params, only: [:index]    respond_to :html    belongs_to :workbench @@ -45,7 +45,11 @@ class ImportsController < BreadcrumbController    protected    def collection -    @q = parent.imports.where(type: "WorkbenchImport").search(params[:q]) + +    scope = parent.imports.where(type: "WorkbenchImport") +    scope = ransack_period scope + +    @q = scope.search(params[:q].try(:except, :started_at))      if sort_column && sort_direction        @imports ||= @q.result(distinct: true).order(sort_column + ' ' + sort_direction).paginate(page: params[:page], per_page: 10) @@ -56,15 +60,31 @@ class ImportsController < BreadcrumbController    private -  def ransack_started_on_date -    date =[] -    if params[:q] && !params[:q]['started_on_date(1i)'].empty? -      ['started_on_date(1i)', 'started_on_date(2i)', 'started_on_date(3i)'].each do |key| -        date << params[:q][key].to_i -        params[:q].delete(key) +  def ransack_started_at_params +    start_date = [] +    end_date = [] + +    if params[:q] && params[:q][:started_at] && !params[:q][:started_at].has_value?(nil) +      [1, 2, 3].each do |key| +        start_date <<  params[:q][:started_at]["begin(#{key}i)"].to_i +        end_date <<  params[:q][:started_at]["end(#{key}i)"].to_i        end -      params[:q]['started_on_date'] = DateTime.new(*date) rescue nil +      params[:q].delete([:started_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_started_at_between(@begin_range, @end_range)      end +    scope    end    def build_resource diff --git a/app/models/import.rb b/app/models/import.rb index 55d74c13c..74f7ef10c 100644 --- a/app/models/import.rb +++ b/app/models/import.rb @@ -9,7 +9,9 @@ class Import < ActiveRecord::Base    has_many :resources, class_name: "ImportResource", dependent: :destroy    has_many :children, foreign_key: :parent_id, class_name: "Import", dependent: :destroy -  scope :started_on_date, ->(date) { where('started_at BETWEEN ? AND ?', date.beginning_of_day, date.end_of_day) } +  scope :where_started_at_between, ->(start_date, end_date) do +     where('started_at BETWEEN ? AND ?', start_date, end_date) +   end    extend Enumerize    enumerize :status, in: %i(new pending successful warning failed running aborted canceled), scope: true, default: :new @@ -19,10 +21,6 @@ class Import < ActiveRecord::Base    before_create :initialize_fields -  def self.ransackable_scopes(auth_object = nil) -    [:started_on_date] -  end -    def self.model_name      ActiveModel::Name.new Import, Import, "Import"    end diff --git a/app/views/imports/_filters.html.slim b/app/views/imports/_filters.html.slim index a216019b6..a5488b275 100644 --- a/app/views/imports/_filters.html.slim +++ b/app/views/imports/_filters.html.slim @@ -14,7 +14,9 @@      .form-group.togglable        = f.label Import.human_attribute_name(:started_at), required: false, class: 'control-label'        .filter_menu -        = f.input :started_on_date, as: :date, label: false, wrapper_html: { class: 'date smart_date filter_menu-item' }, include_blank: true +        = f.simple_fields_for :started_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'), workbench_imports_path(@workbench), class: 'btn btn-link' diff --git a/config/locales/imports.en.yml b/config/locales/imports.en.yml index b92b8843f..9bf877c86 100644 --- a/config/locales/imports.en.yml +++ b/config/locales/imports.en.yml @@ -4,6 +4,7 @@ en:      filters:        referential: "Select data space..."        name_or_creator_cont: "Select an import or creator name..." +      error_period_filter: "End date must be greater or equal than begin date"      actions:        new: "New import"        show: "Import report" diff --git a/config/locales/imports.fr.yml b/config/locales/imports.fr.yml index f7bf8c178..6998c89d2 100644 --- a/config/locales/imports.fr.yml +++ b/config/locales/imports.fr.yml @@ -4,6 +4,7 @@ fr:      filters:        referential: "Sélectionnez un jeu de données..."        name_or_creator_cont: "Indiquez un nom d'import ou d'opérateur..." +      error_period_filter: "La date de fin doit être supérieure ou égale à la date de début"      actions:        new: "Nouvel import"        show: "Rapport d'import" | 
