aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
author0Napster2017-09-28 14:26:24 +0200
committerGitHub2017-09-28 14:26:24 +0200
commitd4f93417331115d36880db771903446e6397a8bc (patch)
tree9b3ed03f63b368c07969da10d7ef582f514b2820
parent33d4799af454b75775c01aa89dd10cbe7b0e7369 (diff)
parent1f9f3ec31464293a7720562f26c48c53f89e7206 (diff)
downloadchouette-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.rb51
-rw-r--r--app/decorators/compliance_check_set_decorator.rb8
-rw-r--r--app/models/compliance_check_set.rb5
-rw-r--r--app/models/workbench.rb1
-rw-r--r--app/policies/compliance_check_set_policy.rb7
-rw-r--r--app/views/compliance_check_sets/_filters.html.slim24
-rw-r--r--app/views/compliance_check_sets/index.html.slim54
-rw-r--r--app/views/compliance_check_sets/show.html.slim11
-rw-r--r--app/views/compliance_control_sets/index.html.slim10
-rw-r--r--app/views/layouts/navigation/_main_nav_left.html.slim2
-rw-r--r--config/locales/compliance_check_sets.en.yml23
-rw-r--r--config/locales/compliance_check_sets.fr.yml23
-rw-r--r--config/locales/compliance_control_sets.en.yml18
-rw-r--r--config/locales/compliance_control_sets.fr.yml18
-rw-r--r--config/routes.rb4
-rw-r--r--lib/stif/permission_translator.rb9
-rw-r--r--spec/controllers/compliance_check_sets_controller_spec.rb22
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