aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorcedricnjanga2018-02-06 21:03:35 -0800
committercedricnjanga2018-03-05 23:10:04 -0800
commit5cabaff1074373a2387760634a49e2d2b56faee9 (patch)
tree0a5f2c83a28bbdfb9465aec7cef6013fd0d62070
parent06d2fdab5b338eb41f1e1b4d38ecebb0fb8dbbdf (diff)
downloadchouette-core-5cabaff1074373a2387760634a49e2d2b56faee9.tar.bz2
Refs #5855 Avoid creation of CCBlocks duplicates in the same CCSet
-rw-r--r--app/controllers/compliance_control_blocks_controller.rb8
-rw-r--r--app/models/compliance_control_block.rb6
-rw-r--r--config/locales/compliance_control_blocks.en.yml10
-rw-r--r--config/locales/compliance_control_blocks.fr.yml10
-rw-r--r--spec/models/compliance_control_block_spec.rb12
5 files changed, 46 insertions, 0 deletions
diff --git a/app/controllers/compliance_control_blocks_controller.rb b/app/controllers/compliance_control_blocks_controller.rb
index 9eee8dfaf..5236ad576 100644
--- a/app/controllers/compliance_control_blocks_controller.rb
+++ b/app/controllers/compliance_control_blocks_controller.rb
@@ -4,6 +4,14 @@ class ComplianceControlBlocksController < ChouetteController
belongs_to :compliance_control_set
actions :all, :except => [:show, :index]
+ after_action :check_duplicate, only: :create
+
+ def check_duplicate
+ unless @compliance_control_block.errors[:duplicate].empty?
+ flash[:error] = @compliance_control_block.errors[:duplicate].first
+ end
+ end
+
private
def compliance_control_block_params
diff --git a/app/models/compliance_control_block.rb b/app/models/compliance_control_block.rb
index d7d84fd06..a73784be6 100644
--- a/app/models/compliance_control_block.rb
+++ b/app/models/compliance_control_block.rb
@@ -12,6 +12,12 @@ class ComplianceControlBlock < ActiveRecord::Base
validates :transport_mode, presence: true
validates :compliance_control_set, presence: true
+ validate def unique_transport_mode_submode_combination
+ same_cc_block = ComplianceControlBlock.where("compliance_control_set_id = ? AND condition_attributes->'transport_mode' = ? AND condition_attributes->'transport_submode' = ?", self.compliance_control_set_id, self.transport_mode, self.transport_submode)
+ return true if same_cc_block.empty?
+ errors.add(:duplicate, I18n.t('activerecord.errors.models.compliance_control_block.attributes.condition_attributes.duplicate'))
+ end
+
def name
ApplicationController.helpers.transport_mode_text(self)
end
diff --git a/config/locales/compliance_control_blocks.en.yml b/config/locales/compliance_control_blocks.en.yml
index b9c01278c..5f54a3c35 100644
--- a/config/locales/compliance_control_blocks.en.yml
+++ b/config/locales/compliance_control_blocks.en.yml
@@ -9,6 +9,12 @@ fr:
compliance_control_blocks:
transport_mode: Transport mode
sub_transport_mode: Transport submode
+ errors:
+ models:
+ compliance_control_block:
+ attributes:
+ condition_attributes:
+ duplicate: The same compliance control block already exists in this compliance control set
compliance_control_blocks:
clone:
prefix: 'Copy of'
@@ -16,8 +22,12 @@ fr:
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..067afabef 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:
+ duplicate: Un groupe de contrôle identique existe déjà au sein de ce jeux 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/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