- valid siren on create file
This commit is contained in:
parent
6e19d3ba67
commit
2b6aba16ac
5 changed files with 67 additions and 3 deletions
|
@ -1,5 +1,6 @@
|
||||||
class Users::DossiersController < UsersController
|
class Users::DossiersController < UsersController
|
||||||
before_action :authenticate_user!
|
before_action :authenticate_user!
|
||||||
|
before_action :check_siret, only: :create
|
||||||
|
|
||||||
def index
|
def index
|
||||||
order = 'DESC'
|
order = 'DESC'
|
||||||
|
@ -74,8 +75,7 @@ class Users::DossiersController < UsersController
|
||||||
redirect_to url_for(controller: :dossiers, action: :show, id: @dossier.id)
|
redirect_to url_for(controller: :dossiers, action: :show, id: @dossier.id)
|
||||||
|
|
||||||
rescue RestClient::ResourceNotFound
|
rescue RestClient::ResourceNotFound
|
||||||
flash.alert = t('errors.messages.invalid_siret')
|
errors_valid_siret
|
||||||
redirect_to url_for new_users_dossiers_path(procedure_id: create_params[:procedure_id])
|
|
||||||
|
|
||||||
rescue ActiveRecord::RecordNotFound
|
rescue ActiveRecord::RecordNotFound
|
||||||
flash.alert = t('errors.messages.dossier_not_found')
|
flash.alert = t('errors.messages.dossier_not_found')
|
||||||
|
@ -115,6 +115,15 @@ class Users::DossiersController < UsersController
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
|
def check_siret
|
||||||
|
errors_valid_siret unless Siret.new(siret: siret).valid?
|
||||||
|
end
|
||||||
|
|
||||||
|
def errors_valid_siret
|
||||||
|
flash.alert = t('errors.messages.invalid_siret')
|
||||||
|
redirect_to url_for new_users_dossiers_path(procedure_id: create_params[:procedure_id])
|
||||||
|
end
|
||||||
|
|
||||||
def update_params
|
def update_params
|
||||||
params.require(:dossier).permit(:autorisation_donnees)
|
params.require(:dossier).permit(:autorisation_donnees)
|
||||||
end
|
end
|
||||||
|
|
7
app/models/siret.rb
Normal file
7
app/models/siret.rb
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
class Siret
|
||||||
|
include ActiveModel::Model
|
||||||
|
attr_accessor :siret
|
||||||
|
|
||||||
|
validates_presence_of :siret
|
||||||
|
validates :siret, siret_format: true
|
||||||
|
end
|
21
app/validators/siret_format_validator.rb
Normal file
21
app/validators/siret_format_validator.rb
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
class SiretFormatValidator < ActiveModel::EachValidator
|
||||||
|
def validate_each(record,attribute,value)
|
||||||
|
unless value =~ /^\d{14}$/
|
||||||
|
record.errors.add(attribute, :format)
|
||||||
|
end
|
||||||
|
unless value!= nil && (luhn_checksum(value) % 10 == 0)
|
||||||
|
record.errors.add(attribute, :checksum)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
def luhn_checksum(value)
|
||||||
|
accum = 0
|
||||||
|
value.reverse.each_char.map(&:to_i).each_with_index do |digit, index|
|
||||||
|
t = index.even? ? digit : digit * 2
|
||||||
|
t = t - 9 if t >= 10
|
||||||
|
accum += t
|
||||||
|
end
|
||||||
|
accum
|
||||||
|
end
|
||||||
|
end
|
|
@ -21,7 +21,7 @@ module TPS
|
||||||
config.i18n.default_locale = :fr
|
config.i18n.default_locale = :fr
|
||||||
config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}')]
|
config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}')]
|
||||||
|
|
||||||
config.autoload_paths += %W(#{config.root}/lib)
|
config.autoload_paths += %W(#{config.root}/lib #{config.root}/app/validators)
|
||||||
config.assets.paths << Rails.root.join('app', 'assets', 'javascript')
|
config.assets.paths << Rails.root.join('app', 'assets', 'javascript')
|
||||||
config.assets.paths << Rails.root.join('app', 'assets', 'javascript', 'api_carto')
|
config.assets.paths << Rails.root.join('app', 'assets', 'javascript', 'api_carto')
|
||||||
config.assets.paths << Rails.root.join('app', 'assets', 'javascript', 'api_carto', 'lib')
|
config.assets.paths << Rails.root.join('app', 'assets', 'javascript', 'api_carto', 'lib')
|
||||||
|
|
27
spec/models/siret_spec.rb
Normal file
27
spec/models/siret_spec.rb
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
require 'spec_helper'
|
||||||
|
|
||||||
|
describe Siret, type: :model do
|
||||||
|
|
||||||
|
let(:valid_siret) { '41816609600051' }
|
||||||
|
let(:invalid_siret) { '111111111' }
|
||||||
|
|
||||||
|
context 'with no siret provided' do
|
||||||
|
it { is_expected.to validate_presence_of(:siret) }
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'init with valid siret' do
|
||||||
|
it { is_expected.to allow_value(valid_siret).for(:siret) }
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'init with invalid siret' do
|
||||||
|
it { is_expected.not_to allow_value(invalid_siret).for(:siret) }
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'init with bullshit siret' do
|
||||||
|
it { is_expected.not_to allow_value('bullshit').for(:siret) }
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'init with a siret that is too long' do
|
||||||
|
it { is_expected.not_to allow_value('9' * 15).for(:siret) }
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in a new issue