aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app/assets/stylesheets/components/_main_nav.sass5
-rw-r--r--app/controllers/compliance_control_blocks_controller.rb13
-rw-r--r--app/helpers/stop_areas_helper.rb6
-rw-r--r--app/models/chouette/stop_area.rb4
-rw-r--r--app/models/compliance_control_block.rb2
-rw-r--r--app/views/compliance_control_blocks/edit.html.slim1
-rw-r--r--app/views/compliance_control_blocks/new.html.slim2
-rw-r--r--app/views/referentials/select_compliance_control_set.html.slim2
-rw-r--r--app/views/stop_areas/_form.html.slim2
-rw-r--r--config/locales/compliance_control_blocks.en.yml10
-rw-r--r--config/locales/compliance_control_blocks.fr.yml10
-rw-r--r--config/locales/stop_areas.en.yml5
-rw-r--r--config/locales/stop_areas.fr.yml5
-rw-r--r--spec/features/compliance_control_sets_spec.rb2
-rw-r--r--spec/lib/compliance_control_set_cloner_spec.rb2
-rw-r--r--spec/lib/compliance_control_set_copier_spec.rb2
-rw-r--r--spec/models/compliance_control_block_spec.rb12
17 files changed, 74 insertions, 11 deletions
diff --git a/app/assets/stylesheets/components/_main_nav.sass b/app/assets/stylesheets/components/_main_nav.sass
index 8e164fa01..ef3f14762 100644
--- a/app/assets/stylesheets/components/_main_nav.sass
+++ b/app/assets/stylesheets/components/_main_nav.sass
@@ -346,6 +346,7 @@ $menuW: 300px
flex: 1 1
height: $menuH
position: relative
+ margin-right: 2em
h1
position: absolute
@@ -355,8 +356,8 @@ $menuW: 300px
line-height: 1.1
white-space: nowrap
max-height: 1.1em
- margin: 0 -1.4em 0 0
- padding: 0 1.4em 5px 0
+ margin: 0
+ padding: 0 0 5px 0
overflow: hidden
text-overflow: ellipsis
diff --git a/app/controllers/compliance_control_blocks_controller.rb b/app/controllers/compliance_control_blocks_controller.rb
index 9eee8dfaf..1173a548a 100644
--- a/app/controllers/compliance_control_blocks_controller.rb
+++ b/app/controllers/compliance_control_blocks_controller.rb
@@ -4,10 +4,23 @@ class ComplianceControlBlocksController < ChouetteController
belongs_to :compliance_control_set
actions :all, :except => [:show, :index]
+ after_action :display_errors, only: [:create, :update]
+
+ def display_errors
+ unless @compliance_control_block.errors[:condition_attributes].empty?
+ flash[:error] = @compliance_control_block.errors[:condition_attributes].join(', ')
+ end
+ end
+
private
def compliance_control_block_params
params.require(:compliance_control_block).permit(:transport_mode, :transport_submode)
end
+ protected
+
+ alias_method :compliance_control_set, :parent
+ helper_method :compliance_control_set
+
end
diff --git a/app/helpers/stop_areas_helper.rb b/app/helpers/stop_areas_helper.rb
index 1c9d974a1..032f68494 100644
--- a/app/helpers/stop_areas_helper.rb
+++ b/app/helpers/stop_areas_helper.rb
@@ -68,7 +68,11 @@ module StopAreasHelper
end
def stop_area_registration_number_value stop_area
- stop_area&.registration_number || stop_area&.stop_area_referential&.generate_registration_number
+ stop_area&.registration_number
+ end
+
+ def stop_area_registration_number_hint
+ t "formtastic.hints.stop_area.registration_number"
end
def stop_area_status(stop_area)
diff --git a/app/models/chouette/stop_area.rb b/app/models/chouette/stop_area.rb
index ccdff609f..e22c3996d 100644
--- a/app/models/chouette/stop_area.rb
+++ b/app/models/chouette/stop_area.rb
@@ -49,7 +49,7 @@ module Chouette
validate :registration_number_is_set
before_validation do
- self.registration_number ||= self.stop_area_referential.generate_registration_number
+ self.registration_number = self.stop_area_referential.generate_registration_number unless self.registration_number.present?
end
def self.nullable_attributes
@@ -90,7 +90,7 @@ module Chouette
end
unless self.stop_area_referential.validates_registration_number(self.registration_number)
- errors.add(:registration_number, I18n.t('stop_areas.errors.registration_number.invalid'))
+ errors.add(:registration_number, I18n.t('stop_areas.errors.registration_number.invalid', mask: self.stop_area_referential.registration_number_format))
end
end
diff --git a/app/models/compliance_control_block.rb b/app/models/compliance_control_block.rb
index d7d84fd06..bc5d6fd4a 100644
--- a/app/models/compliance_control_block.rb
+++ b/app/models/compliance_control_block.rb
@@ -12,6 +12,8 @@ class ComplianceControlBlock < ActiveRecord::Base
validates :transport_mode, presence: true
validates :compliance_control_set, presence: true
+ validates_uniqueness_of :condition_attributes, scope: :compliance_control_set_id
+
def name
ApplicationController.helpers.transport_mode_text(self)
end
diff --git a/app/views/compliance_control_blocks/edit.html.slim b/app/views/compliance_control_blocks/edit.html.slim
index 49aee7705..1d32256b0 100644
--- a/app/views/compliance_control_blocks/edit.html.slim
+++ b/app/views/compliance_control_blocks/edit.html.slim
@@ -1,3 +1,4 @@
+- breadcrumb :compliance_control_set, compliance_control_set
- page_header_content_for @compliance_control_block
.page_content
diff --git a/app/views/compliance_control_blocks/new.html.slim b/app/views/compliance_control_blocks/new.html.slim
index 7d2551311..aab40572b 100644
--- a/app/views/compliance_control_blocks/new.html.slim
+++ b/app/views/compliance_control_blocks/new.html.slim
@@ -1,3 +1,5 @@
+- breadcrumb :compliance_control_set, compliance_control_set
+
.page_content
.container-fluid
.row
diff --git a/app/views/referentials/select_compliance_control_set.html.slim b/app/views/referentials/select_compliance_control_set.html.slim
index 69c87aab2..3550bb202 100644
--- a/app/views/referentials/select_compliance_control_set.html.slim
+++ b/app/views/referentials/select_compliance_control_set.html.slim
@@ -1,3 +1,5 @@
+- breadcrumb @referential
+
.page_content
.container-fluid
.row
diff --git a/app/views/stop_areas/_form.html.slim b/app/views/stop_areas/_form.html.slim
index 1cba88f94..20bdc289f 100644
--- a/app/views/stop_areas/_form.html.slim
+++ b/app/views/stop_areas/_form.html.slim
@@ -48,7 +48,7 @@
- if has_feature?(:stop_area_waiting_time)
= f.input :waiting_time, input_html: { min: 0 }
- = f.input :registration_number, required: stop_area_registration_number_is_required(f.object), :input_html => {title: stop_area_registration_number_title(f.object), value: stop_area_registration_number_value(f.object)}
+ = f.input :registration_number, required: stop_area_registration_number_is_required(f.object), :input_html => {title: stop_area_registration_number_title(f.object), value: stop_area_registration_number_value(f.object)}, hint: stop_area_registration_number_hint
= f.input :fare_code
= f.input :nearest_topic_name, :input_html => {:title => t("formtastic.titles#{format_restriction_for_locales(@referential)}.stop_area.nearest_topic_name")}
= f.input :comment, as: :text, :input_html => {:rows => 5, :title => t("formtastic.titles#{format_restriction_for_locales(@referential)}.stop_area.comment")}
diff --git a/config/locales/compliance_control_blocks.en.yml b/config/locales/compliance_control_blocks.en.yml
index 275f05106..0ec979549 100644
--- a/config/locales/compliance_control_blocks.en.yml
+++ b/config/locales/compliance_control_blocks.en.yml
@@ -9,6 +9,12 @@ en:
compliance_control_blocks:
transport_mode: Transport mode
sub_transport_mode: Transport submode
+ errors:
+ models:
+ compliance_control_block:
+ attributes:
+ condition_attributes:
+ taken: The same compliance control block already exists in this compliance control set
compliance_control_blocks:
clone:
prefix: 'Copy of'
@@ -16,8 +22,12 @@ en:
destroy_confirm: Are you sure you want to destroy this block ?
new:
title: Create a control block
+ create:
+ title: Create a control block
edit:
title: "Edit the control block : %{name}"
+ update:
+ title: "Edit the control block : %{name}"
metas:
control:
zero: "No controls"
diff --git a/config/locales/compliance_control_blocks.fr.yml b/config/locales/compliance_control_blocks.fr.yml
index a6720881f..5ce5b4729 100644
--- a/config/locales/compliance_control_blocks.fr.yml
+++ b/config/locales/compliance_control_blocks.fr.yml
@@ -9,6 +9,12 @@ fr:
compliance_control_blocks:
transport_mode: Mode de transport
transport_submode: Sous-mode de transport
+ errors:
+ models:
+ compliance_control_block:
+ attributes:
+ condition_attributes:
+ taken: Un groupe de contrôle identique existe déjà au sein de ce jeu de contrôles
compliance_control_blocks:
clone:
prefix: 'Copie de'
@@ -16,8 +22,12 @@ fr:
destroy_confirm: Etes vous sûr de supprimer ce bloc ?
new:
title: Créer un groupe de contrôle(s)
+ create:
+ title: Créer un groupe de contrôle(s)
edit:
title: "Editer le groupe de contrôle : %{name}"
+ update:
+ title: "Editer le groupe de contrôle : %{name}"
metas:
control:
zero: "Aucun contrôle"
diff --git a/config/locales/stop_areas.en.yml b/config/locales/stop_areas.en.yml
index 37d39b76c..342fa3c68 100644
--- a/config/locales/stop_areas.en.yml
+++ b/config/locales/stop_areas.en.yml
@@ -8,7 +8,7 @@ en:
registration_number:
already_taken: Already taken
cannot_be_empty: This field is mandatory
- invalid: Incorrect value
+ invalid: "Incorrect value (expected value: \"%{mask}\")"
default_geometry_success: "%{count} modified stop areas"
stop_area:
no_position: "No Position"
@@ -205,6 +205,9 @@ en:
comment: "Maximum length = 255."
coordinates: "Coordinates are mandatory."
projection_xy: "x,y in secondary referential, dot for decimal separator"
+ hints:
+ stop_area:
+ registration_number: Leave empty for automatic value.
referential_stop_areas:
<<: *en_stop_areas
diff --git a/config/locales/stop_areas.fr.yml b/config/locales/stop_areas.fr.yml
index aee112be7..a532bdc40 100644
--- a/config/locales/stop_areas.fr.yml
+++ b/config/locales/stop_areas.fr.yml
@@ -9,7 +9,7 @@ fr:
registration_number:
already_taken: Déjà utilisé
cannot_be_empty: Ce champ est requis
- invalid: Valeur invalide
+ invalid: "Valeur invalide (valeur attendue: \"%{mask}\")"
default_geometry_success: "%{count} arrêts édités"
stop_area:
no_position: "Pas de position"
@@ -208,6 +208,9 @@ fr:
comment: "Longueur maximale = 255."
coordinates: "Les coordonnées sont obligatoires."
projection_xy: "x,y dans le référentiel secondaire, le séparateur de décimales est 'point'"
+ hints:
+ stop_area:
+ registration_number: Laisser blanc pour assigner une valeur automatiquement.
referential_stop_areas:
<<: *fr_stop_areas
diff --git a/spec/features/compliance_control_sets_spec.rb b/spec/features/compliance_control_sets_spec.rb
index 0f4597db3..306f363a5 100644
--- a/spec/features/compliance_control_sets_spec.rb
+++ b/spec/features/compliance_control_sets_spec.rb
@@ -12,7 +12,7 @@ RSpec.describe "ComplianceControlSets", type: :feature do
let(:other_control_cset) { create :compliance_control_set, organisation: other_orga }
let(:blox){
- 2.times.map{ | _ | create :compliance_control_block, compliance_control_set: control_set }
+ 2.times.map{ |n| create :compliance_control_block, compliance_control_set: control_set, transport_mode: StifTransportModeEnumerations.transport_modes[n], transport_submode: StifTransportSubmodeEnumerations.transport_submodes[n] }
}
before do
diff --git a/spec/lib/compliance_control_set_cloner_spec.rb b/spec/lib/compliance_control_set_cloner_spec.rb
index 7efe27659..0d3561e0e 100644
--- a/spec/lib/compliance_control_set_cloner_spec.rb
+++ b/spec/lib/compliance_control_set_cloner_spec.rb
@@ -49,7 +49,7 @@ RSpec.describe ComplianceControlSetCloner do
context 'Directed Acyclic Graph is copied correctly' do
let(:source_blox){
- 3.times.map{ |_| create :compliance_control_block, compliance_control_set: source_set }
+ 3.times.map{ |n| create :compliance_control_block, compliance_control_set: source_set, transport_mode: StifTransportModeEnumerations.transport_modes[n], transport_submode: StifTransportSubmodeEnumerations.transport_submodes[n] }
}
let(:direct_ccs){
3.times.map{ |n| create :generic_attribute_control_min_max, compliance_control_set: source_set, name: "direct #{n.succ}", code: "direct-#{n.succ}" }
diff --git a/spec/lib/compliance_control_set_copier_spec.rb b/spec/lib/compliance_control_set_copier_spec.rb
index 0f15d86d0..d1a56cd7f 100644
--- a/spec/lib/compliance_control_set_copier_spec.rb
+++ b/spec/lib/compliance_control_set_copier_spec.rb
@@ -23,7 +23,7 @@ RSpec.describe ComplianceControlSetCopier do
context 'Directed Acyclic Graph is copied correctly' do
let(:cc_blox){
- 3.times.map{ |_| create :compliance_control_block, compliance_control_set: cc_set }
+ 3.times.map{ |n| create :compliance_control_block, compliance_control_set: cc_set, transport_mode: StifTransportModeEnumerations.transport_modes[n], transport_submode: StifTransportSubmodeEnumerations.transport_submodes[n] }
}
let!(:direct_ccs){
3.times.map{ |n| create :compliance_control, compliance_control_set: cc_set, name: "direct #{n.succ}", code: "direct-#{n.succ}" }
diff --git a/spec/models/compliance_control_block_spec.rb b/spec/models/compliance_control_block_spec.rb
index 4abe0ed9c..089d78434 100644
--- a/spec/models/compliance_control_block_spec.rb
+++ b/spec/models/compliance_control_block_spec.rb
@@ -17,4 +17,16 @@ RSpec.describe ComplianceControlBlock, type: :model do
it { should_not allow_values( *%w{ demandResponseBus nightus irportLinkBus highrequencyBus expressBUs
Shuttle suburban regioalRail interregion4lRail })
.for(:transport_submode) }
+
+ context "transport mode & submode uniqueness" do
+ let(:cc_block) {create :compliance_control_block, transport_mode: 'bus', transport_submode: 'nightBus'}
+ let(:cc_set1) { cc_block.compliance_control_set }
+ let(:cc_set2) { create :compliance_control_set }
+
+ it "sould be unique in a compliance control set" do
+ expect( ComplianceControlBlock.new(transport_mode: 'bus', transport_submode: 'nightBus', compliance_control_set: cc_set1) ).not_to be_valid
+ expect( ComplianceControlBlock.new(transport_mode: 'bus', transport_submode: 'nightBus', compliance_control_set: cc_set2) ).to be_valid
+ end
+
+end
end