diff options
19 files changed, 270 insertions, 6 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..989db1aeb --- /dev/null +++ b/app/controllers/compliance_check_sets_controller.rb @@ -0,0 +1,54 @@ +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 = decorate_compliance_check_sets(@q_for_form.result) + } + end + end + + def decorate_compliance_check_sets(compliance_check_sets) + ModelDecorator.decorate( + compliance_check_sets, + with: ComplianceCheckSetDecorator + ) + 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('imports.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/helpers/compliance_check_set_helper.rb b/app/helpers/compliance_check_set_helper.rb new file mode 100644 index 000000000..82680b304 --- /dev/null +++ b/app/helpers/compliance_check_set_helper.rb @@ -0,0 +1,2 @@ +module ComplianceCheckSetHelper +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 30692e625..cd90f8253 100644 --- a/app/models/workbench.rb +++ b/app/models/workbench.rb @@ -10,6 +10,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..b589e381f --- /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.assignment'), 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..cad20172b --- /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: :assignment, \ + attribute: 'parent_type' \ + ), \ + TableBuilderHelper::Column.new(\ + key: :control_game, \ + attribute: 'control_game' \ + ), \ + ], + 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..1b96b70fc --- /dev/null +++ b/app/views/compliance_check_sets/show.html.slim @@ -0,0 +1,12 @@ +/ PageHeader += pageheader 'jeux-de-donnees', + @compliance_check_set.referential.name, + 'Lorem ipsum dolor sit amet' +/ 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/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..d18381e33 --- /dev/null +++ b/config/locales/compliance_check_sets.en.yml @@ -0,0 +1,24 @@ +fr: + compliance_check_sets: + index: + title: Control reports + new: Creating a Control Report + edit: Editing a Control Report + actions: + new: Add + edit: Edit + destroy: Delete + destroy_confirm: Are you sure to delete this control report ? + filters: + name: Specify a control report name... + search_no_results: No control reports match your search + activerecord: + models: + compliance_check_set: Calendrier + attributes: + compliance_check_set: + ref: réf + creation_date: Date and time of creation + associated_object: Associated object + assignment: Affectation + control_game: Control Game diff --git a/config/locales/compliance_check_sets.fr.yml b/config/locales/compliance_check_sets.fr.yml new file mode 100644 index 000000000..f5aabe89d --- /dev/null +++ b/config/locales/compliance_check_sets.fr.yml @@ -0,0 +1,24 @@ +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é... + search_no_results: Aucun rapport de contrôle ne correspond à votre recherche + activerecord: + models: + compliance_check_set: Calendrier + attributes: + compliance_check_set: + ref: réf + creation_date: Date et heure de création + associated_object: Objet associé + assignment: Affectation + control_game: jeu de contrôle diff --git a/config/routes.rb b/config/routes.rb index ef625db1f..b976e6a6b 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/db/migrate/20170905135646_create_compliance_check_blocks.rb b/db/migrate/20170905135646_create_compliance_check_blocks.rb index c461e656b..741a8b6e6 100644 --- a/db/migrate/20170905135646_create_compliance_check_blocks.rb +++ b/db/migrate/20170905135646_create_compliance_check_blocks.rb @@ -3,7 +3,7 @@ class CreateComplianceCheckBlocks < ActiveRecord::Migration create_table :compliance_check_blocks do |t| t.string :name t.hstore :condition_attributes - t.references :compliance_check_set, index: true, foreign_key: true + t.references :compliance_check_sets, index: true, foreign_key: true t.timestamps null: false end diff --git a/db/migrate/20170906084628_create_compliance_checks.rb b/db/migrate/20170906084628_create_compliance_checks.rb index 1d6bdaaf2..a4c9ad5fd 100644 --- a/db/migrate/20170906084628_create_compliance_checks.rb +++ b/db/migrate/20170906084628_create_compliance_checks.rb @@ -1,7 +1,7 @@ class CreateComplianceChecks < ActiveRecord::Migration def change create_table :compliance_checks do |t| - t.references :compliance_check_set, index: true, foreign_key: true + t.references :compliance_check_sets, index: true, foreign_key: true t.references :compliance_check_block, index: true, foreign_key: true t.string :type t.json :control_attributes diff --git a/lib/stif/permission_translator.rb b/lib/stif/permission_translator.rb index 2bc565968..9a82e733c 100644 --- a/lib/stif/permission_translator.rb +++ b/lib/stif/permission_translator.rb @@ -17,14 +17,18 @@ module Stif def all_resources %w[ access_points - connection_links calendars + connection_links + calendars footnotes 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..5f5cea82f --- /dev/null +++ b/spec/controllers/compliance_check_sets_controller_spec.rb @@ -0,0 +1,24 @@ +require 'rails_helper' + +RSpec.describe ComplianceCheckSetsController, type: :controller do + login_user + + let(:compliance_check_set) { create :compliance_check_set } + + workbench_compliance_check_sets_path(current_offer_workbench) + + describe "GET show" do + it 'should be successful' do + get :show, id: compliance_check_set.id + expect(response).to be_success + end + end + + describe "GET index" do + it 'should be successful' do + get :index, id: compliance_check_set.id + expect(response).to be_success + end + end + +end diff --git a/spec/decorators/compliance_check_set_decorator_spec.rb b/spec/decorators/compliance_check_set_decorator_spec.rb new file mode 100644 index 000000000..d1252f509 --- /dev/null +++ b/spec/decorators/compliance_check_set_decorator_spec.rb @@ -0,0 +1,4 @@ +require 'spec_helper' + +describe ComplianceCheckSetDecorator do +end diff --git a/spec/helpers/compliance_check_set_helper_spec.rb b/spec/helpers/compliance_check_set_helper_spec.rb new file mode 100644 index 000000000..675ab872d --- /dev/null +++ b/spec/helpers/compliance_check_set_helper_spec.rb @@ -0,0 +1,15 @@ +require 'rails_helper' + +# Specs in this file have access to a helper object that includes +# the ComplianceCheckSetHelper. For example: +# +# describe ComplianceCheckSetHelper do +# describe "string concat" do +# it "concats two strings with spaces" do +# expect(helper.concat_strings("this","that")).to eq("this that") +# end +# end +# end +RSpec.describe ComplianceCheckSetHelper, type: :helper do + pending "add some examples to (or delete) #{__FILE__}" +end |
