From 938dae71ae29a0c2934a1027046d61dd5dcaf135 Mon Sep 17 00:00:00 2001 From: cedricnjanga Date: Thu, 21 Dec 2017 18:25:18 +0100 Subject: Refs #5301 Add ransackable scope to PurchaseWindow for date_ranges --- app/controllers/purchase_windows_controller.rb | 27 ++++++++++++++++++----- app/models/chouette/purchase_window.rb | 4 ++++ app/views/purchase_windows/_filters.html.slim | 6 ++--- app/views/purchase_windows/index.html.slim | 3 ++- spec/features/purchase_windows_permission_spec.rb | 4 ++++ 5 files changed, 34 insertions(+), 10 deletions(-) diff --git a/app/controllers/purchase_windows_controller.rb b/app/controllers/purchase_windows_controller.rb index 4965b14c7..04b5736bb 100644 --- a/app/controllers/purchase_windows_controller.rb +++ b/app/controllers/purchase_windows_controller.rb @@ -10,9 +10,7 @@ class PurchaseWindowsController < ChouetteController def index index! do - scope = self.ransack_period_range(scope: @purchase_windows, error_message: t('compliance_check_sets.filters.error_period_filter'), query: :overlapping) - @q = scope.ransack(params[:q]) - @purchase_windows = decorate_purchase_windows(@q.result.paginate(page: params[:page], per_page: 30)) + @purchase_windows = decorate_purchase_windows(@purchase_windows) end end @@ -47,14 +45,31 @@ class PurchaseWindowsController < ChouetteController ) end + def sort_column + Chouette::PurchaseWindow.column_names.include?(params[:sort]) ? params[:sort] : 'name' + end + + def sort_direction + %w[asc desc].include?(params[:direction]) ? params[:direction] : 'asc' + end + + def collection + return @purchase_windows if @purchase_windows + @q = Chouette::PurchaseWindow.ransack(params[:q]) + + purchase_windows = @q.result + purchase_windows = purchase_windows.order(sort_column + ' ' + sort_direction) if sort_column && sort_direction + @purchase_windows = purchase_windows.paginate(page: params[:page]) + end + def ransack_contains_date date =[] - if params[:q] && params[:q]['date_ranges(1i)'].present? - ['date_ranges(1i)', 'date_ranges(2i)', 'date_ranges(3i)'].each do |key| + if params[:q] && params[:q]['contains_date(1i)'].present? + ['contains_date(1i)', 'contains_date(2i)', 'contains_date(3i)'].each do |key| date << params[:q][key].to_i params[:q].delete(key) end - params[:q]['date_ranges'] = Date.new(*date) rescue nil + params[:q]['contains_date'] = @date = Date.new(*date) rescue nil end end end diff --git a/app/models/chouette/purchase_window.rb b/app/models/chouette/purchase_window.rb index 8786c7252..5368d790a 100644 --- a/app/models/chouette/purchase_window.rb +++ b/app/models/chouette/purchase_window.rb @@ -16,6 +16,10 @@ module Chouette scope :contains_date, ->(date) { where('date ? <@ any (date_ranges)', date) } + def self.ransackable_scopes(auth_object = nil) + [:contains_date] + end + def local_id "IBOO-#{self.referential.id}-#{self.id}" end diff --git a/app/views/purchase_windows/_filters.html.slim b/app/views/purchase_windows/_filters.html.slim index 6d659a6b5..4d7c8ce26 100644 --- a/app/views/purchase_windows/_filters.html.slim +++ b/app/views/purchase_windows/_filters.html.slim @@ -6,9 +6,9 @@ button.btn.btn-default#search_btn type='submit' span.fa.fa-search - / .form-group - / = f.label Chouette::PurchaseWindow.human_attribute_name(:date), class: 'control-label' - / = f.input :date_ranges, as: :date, label: false, wrapper_html: { class: 'date smart_date' }, class: 'form-control', include_blank: true + .form-group + = f.label Chouette::PurchaseWindow.human_attribute_name(:date), class: 'control-label' + = f.input :contains_date, as: :date, label: false, wrapper_html: { class: 'date smart_date' }, class: 'form-control', default: @date, include_blank: @date ? false : true .actions = link_to t('actions.erase'), referential_purchase_windows_path, class: 'btn btn-link' diff --git a/app/views/purchase_windows/index.html.slim b/app/views/purchase_windows/index.html.slim index 38954b5dc..04f9fb0a8 100644 --- a/app/views/purchase_windows/index.html.slim +++ b/app/views/purchase_windows/index.html.slim @@ -28,7 +28,8 @@ ), \ TableBuilderHelper::Column.new( \ key: :bounding_dates, \ - attribute: Proc.new {|w| w.bounding_dates.nil? ? '-' : t('validity_range', debut: l(w.bounding_dates.begin, format: :short), end: l(w.bounding_dates.end, format: :short))} \ + attribute: Proc.new {|w| w.bounding_dates.nil? ? '-' : t('validity_range', debut: l(w.bounding_dates.begin, format: :short), end: l(w.bounding_dates.end, format: :short))}, \ + sortable: false \ ) \ ], links: [:show], diff --git a/spec/features/purchase_windows_permission_spec.rb b/spec/features/purchase_windows_permission_spec.rb index e74fb5c17..9f155a1e8 100644 --- a/spec/features/purchase_windows_permission_spec.rb +++ b/spec/features/purchase_windows_permission_spec.rb @@ -4,6 +4,10 @@ require 'spec_helper' describe "PurchaseWindows", :type => :feature do login_user + before do + @user.organisation.update features: %w{purchase_windows} + end + let(:purchase_window) { create :purchase_window, referential: first_referential} describe 'permissions' do -- cgit v1.2.3