diff options
| author | Zog | 2018-04-19 16:38:15 +0200 | 
|---|---|---|
| committer | Johan Van Ryseghem | 2018-04-27 11:17:19 +0200 | 
| commit | e8e029da36b493827820289f8db50645eb939806 (patch) | |
| tree | 0e6fa62311641733673f4a53fa3e00c362b90b45 /app | |
| parent | c5f45f2a57b225503506c89df6b2a53a84028223 (diff) | |
| download | chouette-core-e8e029da36b493827820289f8db50645eb939806.tar.bz2 | |
Refs #6572; Update filters on referentials list
Diffstat (limited to 'app')
| -rw-r--r-- | app/assets/stylesheets/components/_tables.sass | 4 | ||||
| -rw-r--r-- | app/controllers/workbenches_controller.rb | 47 | ||||
| -rw-r--r-- | app/helpers/referentials_helper.rb | 13 | ||||
| -rw-r--r-- | app/helpers/search_helper.rb | 2 | ||||
| -rw-r--r-- | app/models/referential.rb | 4 | ||||
| -rw-r--r-- | app/models/workbench.rb | 1 | ||||
| -rw-r--r-- | app/views/workbenches/_filters.html.slim | 6 | ||||
| -rw-r--r-- | app/views/workbenches/show.html.slim | 2 | 
8 files changed, 59 insertions, 20 deletions
| diff --git a/app/assets/stylesheets/components/_tables.sass b/app/assets/stylesheets/components/_tables.sass index 66ffe9cb1..4952acf92 100644 --- a/app/assets/stylesheets/components/_tables.sass +++ b/app/assets/stylesheets/components/_tables.sass @@ -68,10 +68,10 @@            font-weight: 700            color: inherit -        > .fa +        > .fa, > .sb            &:first-child              margin-right: 3px - +                    > tr:hover          cursor: default          > td diff --git a/app/controllers/workbenches_controller.rb b/app/controllers/workbenches_controller.rb index 35438eaaf..43415ff60 100644 --- a/app/controllers/workbenches_controller.rb +++ b/app/controllers/workbenches_controller.rb @@ -5,7 +5,7 @@ class WorkbenchesController < ChouetteController    defaults resource_class: Workbench    include PolicyChecker -   +    respond_to :html, except: :destroy    def index @@ -50,7 +50,7 @@ class WorkbenchesController < ChouetteController    end    def sort_result collection -    col = (Workbench.find(params[:id]).referentials.column_names + %w{lines validity_period}).include?(params[:sort]) ? params[:sort] : 'name' +    col = (Referential.column_names + %w{lines validity_period}).include?(params[:sort]) ? params[:sort] : 'name'      dir = %w[asc desc].include?(params[:direction]) ?  params[:direction] : 'asc'      if ['lines', 'validity_period'].include?(col) @@ -75,16 +75,41 @@ class WorkbenchesController < ChouetteController    # Fake ransack filter    def ransack_status scope -    archived   = !params[:q]['archived_at_not_null'].to_i.zero? -    unarchived = !params[:q]['archived_at_null'].to_i.zero? - -    # Both status checked, means no filter -    return scope unless archived || unarchived -    return scope if archived && unarchived +    sql = scope.to_sql +    filters = [] +    (params[:q] && params[:q][:state] || {}).each do |k, v| +      if v == "1" + +        # We get the specific part of the SQL QUERY +        # It looks a bit weird, bu this way we don't have to duplicate the +        # logic of the scopes +        filter_sql = scope.send(k).to_sql +        j = 0 +        while filter_sql[j] == sql[j] +          j += 1 +        end +        i = j +        while filter_sql[j] != sql[i] +          j += 1 +        end + +        filter_sql = filter_sql[i..j] +        filter_sql = filter_sql.strip +        filter_sql = filter_sql.gsub /^AND\s*/i, '' +        filters << filter_sql +      end +    end -    scope = scope.where(archived_at: nil) if unarchived -    scope = scope.where("archived_at is not null") if archived -    scope +    # archived   = !params[:q]['archived_at_not_null'].to_i.zero? +    # unarchived = !params[:q]['archived_at_null'].to_i.zero? +    # +    # # Both status checked, means no filter +    # return scope unless archived || unarchived +    # return scope if archived && unarchived +    # +    # scope = scope.where(archived_at: nil) if unarchived +    # scope = scope.where("archived_at is not null") if archived +    scope.where filters.map{|f| "(#{f})"}.join('OR')    end    # Ignore archived_at_not_null/archived_at_null managed by ransack_status scope diff --git a/app/helpers/referentials_helper.rb b/app/helpers/referentials_helper.rb index ef8831cdc..c0a60410a 100644 --- a/app/helpers/referentials_helper.rb +++ b/app/helpers/referentials_helper.rb @@ -12,6 +12,19 @@ module ReferentialsHelper      end    end +  def icon_for_referential_state state +    case state.to_s +    when "pending" +      "<span class='fa fa-clock-o'></span>" +    when "failed" +      "<span class='fa fa-times'></span>" +    when "archived" +      "<span class='fa fa-archive'></span>" +    else +      "<span class='sb sb-lg sb-preparing'></span>" +    end.html_safe +  end +    def referential_state referential      out = if referential.archived?        "<div class='td-block'><span class='fa fa-archive'></span><span>#{t('activerecord.attributes.referential.archived_at')}</span></div>" diff --git a/app/helpers/search_helper.rb b/app/helpers/search_helper.rb index 16081b660..7d4885312 100644 --- a/app/helpers/search_helper.rb +++ b/app/helpers/search_helper.rb @@ -15,7 +15,7 @@ module SearchHelper        if val.is_a?(Array)          active = val.any? &:present?        elsif val.is_a?(Hash) -        active = val.values.any? {|v| v.present? && v != "false" } +        active = val.values.any? {|v| v.present? && v != "false" && v != "0" }        else          active = true        end diff --git a/app/models/referential.rb b/app/models/referential.rb index 2449d767d..9ceb1769e 100644 --- a/app/models/referential.rb +++ b/app/models/referential.rb @@ -3,6 +3,8 @@ class Referential < ApplicationModel    include DataFormatEnumerations    include ObjectidFormatterSupport +  STATES = %i(pending active failed archived) +    validates_presence_of :name    validates_presence_of :slug    validates_presence_of :prefix @@ -571,7 +573,7 @@ class Referential < ApplicationModel      update failed_at: nil, archived_at: Time.now    end -  %i(pending active failed archived).each do |s| +  STATES.each do |s|      define_method "#{s}?" do        state == s      end diff --git a/app/models/workbench.rb b/app/models/workbench.rb index ef0b2eaa4..1c54e8904 100644 --- a/app/models/workbench.rb +++ b/app/models/workbench.rb @@ -38,7 +38,6 @@ class Workbench < ApplicationModel          .referentials          .joins(:metadatas)          .where(['referential_metadata.line_ids && ARRAY[?]::bigint[]', line_ids]) -        .ready          .not_in_referential_suite      end    end diff --git a/app/views/workbenches/_filters.html.slim b/app/views/workbenches/_filters.html.slim index c9dd13d96..ffac2d736 100644 --- a/app/views/workbenches/_filters.html.slim +++ b/app/views/workbenches/_filters.html.slim @@ -11,11 +11,11 @@        = f.label t('activerecord.models.line.one').upcase, required: false, class: 'control-label'        = f.input :associated_lines_id_eq, as: :select, collection: @workbench.lines.includes(:company).order(:name), input_html: { 'data-select2ed': 'true', 'data-select2ed-placeholder': t('referentials.filters.line') }, label: false, label_method: :display_name, wrapper_html: { class: 'select2ed'} -    .form-group.togglable class=filter_item_class(params[:q], :archived_at_not_null) +    .form-group.togglable class=filter_item_class(params[:q], :state)        = f.label Referential.human_attribute_name(:status), required: false, class: 'control-label'        .form-group.checkbox_list -        = f.input :archived_at_not_null, label: ("<span>#{t('activerecord.attributes.referential.archived_at')}<span class='fa fa-archive'></span></span>").html_safe, as: :boolean, wrapper_html: { class: 'checkbox-wrapper' } -        = f.input :archived_at_null, label: ("<span>#{t('activerecord.attributes.referential.archived_at_null')}<span class='sb sb-lg sb-preparing'></span></span>").html_safe, as: :boolean, wrapper_html: { class: 'checkbox-wrapper' } +        - Referential::STATES.each do |s| +          = f.input "state[#{s}]", input_html: {checked: (params[:q] && params[:q][:state] && params[:q][:state][s]) == "1"}, label: ("<span>#{"referentials.states.#{s}".t}#{icon_for_referential_state(s)}</span>").html_safe, as: :boolean, wrapper_html: { class: 'checkbox-wrapper' }      .form-group.togglable class=filter_item_class(params[:q], :organisation_name_eq_any)        = f.label t('activerecord.models.organisation.one'), required: false, class: 'control-label' diff --git a/app/views/workbenches/show.html.slim b/app/views/workbenches/show.html.slim index 7dd1583fa..b0276c5ce 100644 --- a/app/views/workbenches/show.html.slim +++ b/app/views/workbenches/show.html.slim @@ -34,7 +34,7 @@                  TableBuilderHelper::Column.new( \                    key: :archived_at, \                    name: Referential.tmf('status'), \ -                  attribute: Proc.new {|w| w.referential_read_only? ? ("<div class='td-block'><span class='fa fa-archive'></span><span>#{t('activerecord.attributes.referential.archived_at')}</span></div>").html_safe : ("<div class='td-block'><span class='sb sb-lg sb-preparing'></span><span>#{t('activerecord.attributes.referential.archived_at_null')}</span></div>").html_safe} \ +                  attribute: Proc.new {|w| "<a href='' title='#{"referentials.states.#{w.state}".t}'>#{icon_for_referential_state(w.state)}</a>".html_safe} \                  ), \                  TableBuilderHelper::Column.new( \                    key: :organisation, \ | 
