diff options
| -rw-r--r-- | app/assets/stylesheets/components/_main_nav.sass | 5 | ||||
| -rw-r--r-- | app/controllers/compliance_control_blocks_controller.rb | 13 | ||||
| -rw-r--r-- | app/helpers/stop_areas_helper.rb | 6 | ||||
| -rw-r--r-- | app/models/chouette/stop_area.rb | 4 | ||||
| -rw-r--r-- | app/models/compliance_control_block.rb | 2 | ||||
| -rw-r--r-- | app/views/compliance_control_blocks/edit.html.slim | 1 | ||||
| -rw-r--r-- | app/views/compliance_control_blocks/new.html.slim | 2 | ||||
| -rw-r--r-- | app/views/referentials/select_compliance_control_set.html.slim | 2 | ||||
| -rw-r--r-- | app/views/stop_areas/_form.html.slim | 2 | ||||
| -rw-r--r-- | config/locales/compliance_control_blocks.en.yml | 10 | ||||
| -rw-r--r-- | config/locales/compliance_control_blocks.fr.yml | 10 | ||||
| -rw-r--r-- | config/locales/stop_areas.en.yml | 5 | ||||
| -rw-r--r-- | config/locales/stop_areas.fr.yml | 5 | ||||
| -rw-r--r-- | spec/features/compliance_control_sets_spec.rb | 2 | ||||
| -rw-r--r-- | spec/lib/compliance_control_set_cloner_spec.rb | 2 | ||||
| -rw-r--r-- | spec/lib/compliance_control_set_copier_spec.rb | 2 | ||||
| -rw-r--r-- | spec/models/compliance_control_block_spec.rb | 12 | 
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 | 
