diff options
| author | 0Napster | 2017-09-28 14:26:24 +0200 | 
|---|---|---|
| committer | GitHub | 2017-09-28 14:26:24 +0200 | 
| commit | d4f93417331115d36880db771903446e6397a8bc (patch) | |
| tree | 9b3ed03f63b368c07969da10d7ef582f514b2820 | |
| parent | 33d4799af454b75775c01aa89dd10cbe7b0e7369 (diff) | |
| parent | 1f9f3ec31464293a7720562f26c48c53f89e7206 (diff) | |
| download | chouette-core-d4f93417331115d36880db771903446e6397a8bc.tar.bz2 | |
Merge pull request #79 from af83/4466-compliance_check_sets
4466 compliance check sets
| -rw-r--r-- | app/controllers/compliance_check_sets_controller.rb | 51 | ||||
| -rw-r--r-- | app/decorators/compliance_check_set_decorator.rb | 8 | ||||
| -rw-r--r-- | app/models/compliance_check_set.rb | 5 | ||||
| -rw-r--r-- | app/models/workbench.rb | 1 | ||||
| -rw-r--r-- | app/policies/compliance_check_set_policy.rb | 7 | ||||
| -rw-r--r-- | app/views/compliance_check_sets/_filters.html.slim | 24 | ||||
| -rw-r--r-- | app/views/compliance_check_sets/index.html.slim | 54 | ||||
| -rw-r--r-- | app/views/compliance_check_sets/show.html.slim | 11 | ||||
| -rw-r--r-- | app/views/compliance_control_sets/index.html.slim | 10 | ||||
| -rw-r--r-- | app/views/layouts/navigation/_main_nav_left.html.slim | 2 | ||||
| -rw-r--r-- | config/locales/compliance_check_sets.en.yml | 23 | ||||
| -rw-r--r-- | config/locales/compliance_check_sets.fr.yml | 23 | ||||
| -rw-r--r-- | config/locales/compliance_control_sets.en.yml | 18 | ||||
| -rw-r--r-- | config/locales/compliance_control_sets.fr.yml | 18 | ||||
| -rw-r--r-- | config/routes.rb | 4 | ||||
| -rw-r--r-- | lib/stif/permission_translator.rb | 9 | ||||
| -rw-r--r-- | spec/controllers/compliance_check_sets_controller_spec.rb | 22 | 
17 files changed, 263 insertions, 27 deletions
| diff --git a/app/controllers/compliance_check_sets_controller.rb b/app/controllers/compliance_check_sets_controller.rb new file mode 100644 index 000000000..d61fbafdb --- /dev/null +++ b/app/controllers/compliance_check_sets_controller.rb @@ -0,0 +1,51 @@ +class ComplianceCheckSetsController < BreadcrumbController +  defaults resource_class: ComplianceCheckSet +  before_action :ransack_created_at_params, only: [:index] +  respond_to :html + +  belongs_to :workbench + +  def index +    index! do |format| +      scope = ransack_period @compliance_check_sets +      @q_for_form = scope.ransack(params[:q]) +      format.html { +        @compliance_check_sets = ModelDecorator.decorate( +          @q_for_form.result, +          with: ComplianceCheckSetDecorator +        ) +      } +    end +  end + + +  private + +  def ransack_created_at_params +    start_date = [] +    end_date = [] + +    if params[:q] && params[:q][:created_at] && !params[:q][:created_at].has_value?(nil) && !params[:q][:created_at].has_value?("") +      [1, 2, 3].each do |key| +        start_date << params[:q][:created_at]["begin(#{key}i)"].to_i +        end_date << params[:q][:created_at]["end(#{key}i)"].to_i +      end +      params[:q].delete(:created_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('compliance_check_sets.filters.error_period_filter') +    else +      scope = scope.where_created_at_between(@begin_range, @end_range) +    end +    scope +  end + +end
\ No newline at end of file diff --git a/app/decorators/compliance_check_set_decorator.rb b/app/decorators/compliance_check_set_decorator.rb new file mode 100644 index 000000000..5f3821cbe --- /dev/null +++ b/app/decorators/compliance_check_set_decorator.rb @@ -0,0 +1,8 @@ +class ComplianceCheckSetDecorator < Draper::Decorator +  delegate_all + +  def action_links +    links = [] +  end + +end diff --git a/app/models/compliance_check_set.rb b/app/models/compliance_check_set.rb index 7b6400a21..3c62221f0 100644 --- a/app/models/compliance_check_set.rb +++ b/app/models/compliance_check_set.rb @@ -7,4 +7,9 @@ class ComplianceCheckSet < ActiveRecord::Base    belongs_to :parent, polymorphic: true    enumerize :status, in: %w[new pending successful warning failed running aborted canceled] + +  scope :where_created_at_between, ->(start_date, end_date) do +    where('created_at BETWEEN ? AND ?', start_date, end_date) +  end +  end diff --git a/app/models/workbench.rb b/app/models/workbench.rb index fe4e6cce1..ae111a9c5 100644 --- a/app/models/workbench.rb +++ b/app/models/workbench.rb @@ -11,6 +11,7 @@ class Workbench < ActiveRecord::Base    has_many :stop_areas, through: :stop_area_referential    has_many :imports    has_many :workbench_imports +  has_many :compliance_check_sets    validates :name, presence: true    validates :organisation, presence: true diff --git a/app/policies/compliance_check_set_policy.rb b/app/policies/compliance_check_set_policy.rb new file mode 100644 index 000000000..3f715649e --- /dev/null +++ b/app/policies/compliance_check_set_policy.rb @@ -0,0 +1,7 @@ +class ComplianceCheckSetPolicy < ApplicationPolicy +  class Scope < Scope +    def resolve +      scope +    end +  end +end diff --git a/app/views/compliance_check_sets/_filters.html.slim b/app/views/compliance_check_sets/_filters.html.slim new file mode 100644 index 000000000..609754eec --- /dev/null +++ b/app/views/compliance_check_sets/_filters.html.slim @@ -0,0 +1,24 @@ += search_form_for @q_for_form, url: workbench_compliance_check_sets_path(current_offer_workbench), builder: SimpleForm::FormBuilder, class: 'form form-filter' do |f| +  .ffg-row +    .input-group.search_bar +      = f.search_field :referential_name_cont, class: 'form-control', placeholder: t('compliance_check_sets.filters.name') +      span.input-group-btn +        button.btn.btn-default type='submit' +          span.fa.fa-search + +  .ffg-row +    .form-group.togglable +      = f.label t('activerecord.attributes.compliance_check_set.assigned_to'), required: false, class: 'control-label' +      = f.input :parent_type_eq_any, collection: ComplianceCheckSet.order('parent_type'), as: :check_boxes, label: false, label_method: lambda {|w| ("<span>#{w}</span>").html_safe}, required: false, wrapper_html: {class: 'checkbox_list'} + +    .form-group.togglable +      = f.label Import.human_attribute_name(:created_at), required: false, class: 'control-label' +      .filter_menu +        = f.simple_fields_for :created_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_checks_sets, class: 'btn btn-link' +    = f.submit t('actions.filter'), class: 'btn btn-default', id: 'referential_filter_btn' + diff --git a/app/views/compliance_check_sets/index.html.slim b/app/views/compliance_check_sets/index.html.slim new file mode 100644 index 000000000..38c4babcf --- /dev/null +++ b/app/views/compliance_check_sets/index.html.slim @@ -0,0 +1,54 @@ +/ PageHeader +- header_params = ['jeux-de-donnees', +        t('compliance_check_sets.index.title'), +        ''] += pageheader(*header_params) do + +  / Below is secundary actions & optional contents (filters, ...) +  .row.mb-sm +    .col-lg-12.text-right + +/ PageContent +.page_content +  .container-fluid +    .row +      .col-lg-12 +        = render 'filters' +      .row +        .col-lg-12 +          .select_table +            = table_builder_2 @compliance_check_sets, +              [ \ +                TableBuilderHelper::Column.new( \ +                  key: :ref, \ +                  attribute: 'referential_id' \ +                ), \ +                TableBuilderHelper::Column.new( \ +                  key: :creation_date, \ +                  attribute: Proc.new { |n| l(n.created_at, format: :long) if n.created_at } \ +                ), \ +                TableBuilderHelper::Column.new( \ +                  key: :associated_object, \ +                  attribute: Proc.new{|n| n.referential.name}, \ +                  link_to: lambda do |referential| \ +                    referential_path(referential, current_workbench_id: params[:id]) \ +                  end \ +                ), \ +                TableBuilderHelper::Column.new( \ +                  key: :assigned_to, \ +                  attribute: 'parent_type' \ +                ), \ +                TableBuilderHelper::Column.new(\ +                  key: :compliance_control_set, \ +                  attribute: Proc.new{ |n| (n.compliance_control_set.name) if n.compliance_control_set} \ +                ), \ +              ], +              sortable: true, +              links: [:show], +              cls: 'table has-filter has-search' +    - unless @compliance_check_sets.any? +      .row.mt-xs +        .col-lg-12 +          = replacement_msg t('compliance_check_sets.search_no_results') + + diff --git a/app/views/compliance_check_sets/show.html.slim b/app/views/compliance_check_sets/show.html.slim new file mode 100644 index 000000000..4e965947d --- /dev/null +++ b/app/views/compliance_check_sets/show.html.slim @@ -0,0 +1,11 @@ +/ PageHeader += pageheader 'jeux-de-donnees', +              @compliance_check_set.referential.name +/ PageContent +.page_content +  .container-fluid +    .row +      .col-lg-6.col-md-6.col-sm-12.col-xs-12 +        = definition_list t('metadatas'), +            ComplianceCheckSet.human_attribute_name(:id) => @compliance_check_set.referential.id, +            ComplianceCheckSet.human_attribute_name(:name) => @compliance_check_set.referential.name
\ No newline at end of file diff --git a/app/views/compliance_control_sets/index.html.slim b/app/views/compliance_control_sets/index.html.slim index aee1595ef..ecb4eb75b 100644 --- a/app/views/compliance_control_sets/index.html.slim +++ b/app/views/compliance_control_sets/index.html.slim @@ -19,7 +19,7 @@          .col-lg-12            .select_table              = table_builder_2 @compliance_control_sets, -                    [ \ +              [ \                  TableBuilderHelper::Column.new( \                    key: :name, \                    attribute: 'name', \ @@ -28,7 +28,7 @@                      end \                  ), \                  TableBuilderHelper::Column.new( \ -                  key: :assignment, \ +                  key: :assigned_to, \                    attribute: 'assignment' \                  ), \                  TableBuilderHelper::Column.new( \ @@ -44,9 +44,9 @@                    attribute: Proc.new { |n| l(n.updated_at, format: :long) if n.updated_at }, \                  ) \                ], -                    sortable: true, -                    links: [:show], -                    cls: 'table has-filter has-search' +              sortable: true, +              links: [:show], +              cls: 'table has-filter has-search'      - unless @compliance_control_sets.any?        .row.mt-xs          .col-lg-12 diff --git a/app/views/layouts/navigation/_main_nav_left.html.slim b/app/views/layouts/navigation/_main_nav_left.html.slim index 12139c93b..062c9383c 100644 --- a/app/views/layouts/navigation/_main_nav_left.html.slim +++ b/app/views/layouts/navigation/_main_nav_left.html.slim @@ -37,7 +37,7 @@                span Import              = link_to calendars_path, class: 'list-group-item' do                span Modèles de calendrier -            = link_to '#', class: 'list-group-item' do +            = link_to workbench_compliance_check_sets_path(current_offer_workbench), class: 'list-group-item' do                span Rapport de contrôle              = link_to compliance_control_sets_path, class: 'list-group-item' do                span Jeux de contrôle diff --git a/config/locales/compliance_check_sets.en.yml b/config/locales/compliance_check_sets.en.yml new file mode 100644 index 000000000..89c142a49 --- /dev/null +++ b/config/locales/compliance_check_sets.en.yml @@ -0,0 +1,23 @@ +en: +  compliance_check_sets: +    index: +      title: Control reports +      new: Creating a Control Report +      edit: Update a Control Report +    actions: +          new: Add a control report +          edit: Edit a control report +          destroy: Delete +          destroy_confirm: Are you sure you want to delete this control report? +    filters: +          name: Specify a control report name... +          error_period_filter: End date must be greater than or equal to begin date +    search_no_results: No control reports match your search +  activerecord: +          attributes: +            compliance_check_set: +              ref: réf +              creation_date: Created at +              associated_object: Associated object +              assigned_to: Assigned to +              compliance_control_set: Compliance control set diff --git a/config/locales/compliance_check_sets.fr.yml b/config/locales/compliance_check_sets.fr.yml new file mode 100644 index 000000000..8c21f33fd --- /dev/null +++ b/config/locales/compliance_check_sets.fr.yml @@ -0,0 +1,23 @@ +fr: +  compliance_check_sets: +    index: +      title: Rapports de contrôle +      new: Création d'un rapport de contrôle +      edit: Édition d'un rapport de contrôle +    actions: +          new: Ajouter +          edit: Editer +          destroy: Supprimer +          destroy_confirm: Etes vous sûr de supprimer ce rapport de contrôle ? +    filters: +          name: Indiquez un nom d'un objet associé... +          error_period_filter: La date de fin doit être supérieure ou égale à la date de début0 +    search_no_results: Aucun rapport de contrôle ne correspond à votre recherche +  activerecord: +          attributes: +            compliance_check_set: +              ref: réf +              creation_date: Date et heure de création +              associated_object: Objet associé +              assigned_to: Affectation +              compliance_control_set: jeu de contrôle diff --git a/config/locales/compliance_control_sets.en.yml b/config/locales/compliance_control_sets.en.yml index b7133aea5..4e2c8f485 100644 --- a/config/locales/compliance_control_sets.en.yml +++ b/config/locales/compliance_control_sets.en.yml @@ -14,12 +14,12 @@ en:        name: 'Enter name ...'      search_no_results: 'No compliance control set found'    activerecord: -    models: -      compliance_control_set: Calendar -    attributes: -      compliance_control_set: -        name: Name -        assignment: Assignment -        owner_jdc: Owner -        control_numbers: Control number -        updated_at: Updated at +          models: +            compliance_control_set: Calendar +          attributes: +            compliance_control_set: +              name: Name +              assigned_to: Assigned to +              owner_jdc: Owner of the control game +              control_numbers: Nb contrôle +              updated_at: Update
\ No newline at end of file diff --git a/config/locales/compliance_control_sets.fr.yml b/config/locales/compliance_control_sets.fr.yml index 8310aa0db..d808698c5 100644 --- a/config/locales/compliance_control_sets.fr.yml +++ b/config/locales/compliance_control_sets.fr.yml @@ -14,12 +14,12 @@ fr:        name: 'Indiquez un nom de jeux de contrôle...'      search_no_results: 'Aucun jeu de contrôle ne correspond à votre recherche'    activerecord: -    models: -      compliance_control_set: Calendrier -    attributes: -      compliance_control_set: -        name: Nom -        assignment: Affectation -        owner_jdc: Propriétaire du jeu de contrôle -        control_numbers: Nb contrôle -        updated_at: Mis a jour +          models: +            compliance_control_set: Calendrier +          attributes: +            compliance_control_set: +              name: Nom +              assigned_to: Affectation +              owner_jdc: Propriétaire du jeu de contrôle +              control_numbers: Nb contrôle +              updated_at: Mis a jour
\ No newline at end of file diff --git a/config/routes.rb b/config/routes.rb index 1d34a4854..9ee85d6e8 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -8,7 +8,9 @@ ChouetteIhm::Application.routes.draw do        resources :import_resources, only: [:index] do          resources :import_messages, only: [:index]        end - +    end +    resources :compliance_check_sets, only: [:index, :show] do +      resources :compliance_checks, only: [:show]      end    end diff --git a/lib/stif/permission_translator.rb b/lib/stif/permission_translator.rb index 15d5ffc89..095f726bd 100644 --- a/lib/stif/permission_translator.rb +++ b/lib/stif/permission_translator.rb @@ -17,15 +17,20 @@ module Stif      def all_resources        %w[          access_points -        connection_links calendars +        connection_links +        calendars          footnotes          imports          journey_patterns -        referentials routes routing_constraint_zones +        referentials +        routes +        routing_constraint_zones          time_tables          vehicle_journeys          api_keys          compliance_controls +        compliance_controls_sets +        compliance_check_sets        ]      end diff --git a/spec/controllers/compliance_check_sets_controller_spec.rb b/spec/controllers/compliance_check_sets_controller_spec.rb new file mode 100644 index 000000000..804b0a658 --- /dev/null +++ b/spec/controllers/compliance_check_sets_controller_spec.rb @@ -0,0 +1,22 @@ +require 'rails_helper' + +RSpec.describe ComplianceCheckSetsController, type: :controller do +  login_user + +  let(:compliance_check_set) { create :compliance_check_set } + +  describe "GET show" do +    it 'should be successful' do +      get :show, workbench_id: compliance_check_set.workbench.id, id: compliance_check_set.id +      expect(response).to be_success +    end +  end + +  describe "GET index" do +    it 'should be successful' do +      get :index, workbench_id: compliance_check_set.workbench.id, id: compliance_check_set.id +      expect(response).to be_success +    end +  end + +end | 
