Merge pull request #2937 from tchak/champ-nombre
Champ IntegerNumber and DecimalNumber
This commit is contained in:
commit
7ef381b130
15 changed files with 103 additions and 1 deletions
|
@ -3,7 +3,8 @@ module TypeDeChampHelper
|
||||||
TypeDeChamp.type_champs.fetch(:piece_justificative) => :champ_pj?,
|
TypeDeChamp.type_champs.fetch(:piece_justificative) => :champ_pj?,
|
||||||
TypeDeChamp.type_champs.fetch(:siret) => :champ_siret?,
|
TypeDeChamp.type_champs.fetch(:siret) => :champ_siret?,
|
||||||
TypeDeChamp.type_champs.fetch(:linked_drop_down_list) => :champ_linked_dropdown?,
|
TypeDeChamp.type_champs.fetch(:linked_drop_down_list) => :champ_linked_dropdown?,
|
||||||
TypeDeChamp.type_champs.fetch(:carte) => :champ_carte?
|
TypeDeChamp.type_champs.fetch(:carte) => :champ_carte?,
|
||||||
|
TypeDeChamp.type_champs.fetch(:integer_number) => :champ_integer_number?
|
||||||
}
|
}
|
||||||
|
|
||||||
def tdc_options
|
def tdc_options
|
||||||
|
|
7
app/models/champs/decimal_number_champ.rb
Normal file
7
app/models/champs/decimal_number_champ.rb
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
class Champs::DecimalNumberChamp < Champ
|
||||||
|
validates :value, numericality: { allow_nil: true }
|
||||||
|
|
||||||
|
def value_for_export
|
||||||
|
value.to_f
|
||||||
|
end
|
||||||
|
end
|
7
app/models/champs/integer_number_champ.rb
Normal file
7
app/models/champs/integer_number_champ.rb
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
class Champs::IntegerNumberChamp < Champ
|
||||||
|
validates :value, numericality: { only_integer: true, allow_nil: true }
|
||||||
|
|
||||||
|
def value_for_export
|
||||||
|
value.to_i
|
||||||
|
end
|
||||||
|
end
|
|
@ -8,6 +8,8 @@ class TypeDeChamp < ApplicationRecord
|
||||||
date: 'date',
|
date: 'date',
|
||||||
datetime: 'datetime',
|
datetime: 'datetime',
|
||||||
number: 'number',
|
number: 'number',
|
||||||
|
decimal_number: 'decimal_number',
|
||||||
|
integer_number: 'integer_number',
|
||||||
checkbox: 'checkbox',
|
checkbox: 'checkbox',
|
||||||
civilite: 'civilite',
|
civilite: 'civilite',
|
||||||
email: 'email',
|
email: 'email',
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
class TypesDeChamp::DecimalNumberTypeDeChamp < TypesDeChamp::TypeDeChampBase
|
||||||
|
end
|
|
@ -0,0 +1,2 @@
|
||||||
|
class TypesDeChamp::IntegerNumberTypeDeChamp < TypesDeChamp::TypeDeChampBase
|
||||||
|
end
|
|
@ -0,0 +1,7 @@
|
||||||
|
class Champs::DecimalNumberChampSerializer < ChampSerializer
|
||||||
|
def value
|
||||||
|
if object.value.present?
|
||||||
|
object.value.to_f
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,7 @@
|
||||||
|
class Champs::IntegerNumberChampSerializer < ChampSerializer
|
||||||
|
def value
|
||||||
|
if object.value.present?
|
||||||
|
object.value.to_i
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,4 @@
|
||||||
|
= form.number_field :value,
|
||||||
|
step: :any,
|
||||||
|
placeholder: champ.libelle,
|
||||||
|
required: champ.mandatory?
|
|
@ -0,0 +1,3 @@
|
||||||
|
= form.number_field :value,
|
||||||
|
placeholder: champ.libelle,
|
||||||
|
required: champ.mandatory?
|
|
@ -15,6 +15,8 @@ Flipflop.configure do
|
||||||
title: "Champ double menu déroulant"
|
title: "Champ double menu déroulant"
|
||||||
feature :champ_carte,
|
feature :champ_carte,
|
||||||
title: "Champ Carte"
|
title: "Champ Carte"
|
||||||
|
feature :champ_integer_number,
|
||||||
|
title: "Champ nombre entier"
|
||||||
end
|
end
|
||||||
|
|
||||||
feature :web_hook
|
feature :web_hook
|
||||||
|
|
|
@ -10,6 +10,8 @@ fr:
|
||||||
date: 'Date'
|
date: 'Date'
|
||||||
datetime: 'Date et Heure'
|
datetime: 'Date et Heure'
|
||||||
number: 'Nombre entier'
|
number: 'Nombre entier'
|
||||||
|
decimal_number: 'Nombre décimal'
|
||||||
|
integer_number: 'Nombre entier'
|
||||||
checkbox: 'Case à cocher'
|
checkbox: 'Case à cocher'
|
||||||
civilite: 'Civilité'
|
civilite: 'Civilité'
|
||||||
email: 'Email'
|
email: 'Email'
|
||||||
|
|
|
@ -18,6 +18,12 @@ FactoryBot.define do
|
||||||
factory :type_de_champ_number do
|
factory :type_de_champ_number do
|
||||||
type_champ { TypeDeChamp.type_champs.fetch(:number) }
|
type_champ { TypeDeChamp.type_champs.fetch(:number) }
|
||||||
end
|
end
|
||||||
|
factory :type_de_champ_decimal_number do
|
||||||
|
type_champ { TypeDeChamp.type_champs.fetch(:decimal_number) }
|
||||||
|
end
|
||||||
|
factory :type_de_champ_integer_number do
|
||||||
|
type_champ { TypeDeChamp.type_champs.fetch(:integer_number) }
|
||||||
|
end
|
||||||
factory :type_de_champ_checkbox do
|
factory :type_de_champ_checkbox do
|
||||||
type_champ { TypeDeChamp.type_champs.fetch(:checkbox) }
|
type_champ { TypeDeChamp.type_champs.fetch(:checkbox) }
|
||||||
end
|
end
|
||||||
|
|
25
spec/models/champs/decimal_number_champ_spec.rb
Normal file
25
spec/models/champs/decimal_number_champ_spec.rb
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
require 'spec_helper'
|
||||||
|
|
||||||
|
describe Champs::DecimalNumberChamp do
|
||||||
|
subject { Champs::DecimalNumberChamp.new(value: value) }
|
||||||
|
|
||||||
|
describe '#valid?' do
|
||||||
|
context 'when the value is integer number' do
|
||||||
|
let(:value) { 2 }
|
||||||
|
|
||||||
|
it { is_expected.to be_valid }
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when the value is decimal number' do
|
||||||
|
let(:value) { 2.6 }
|
||||||
|
|
||||||
|
it { is_expected.to be_valid }
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when the value is not a number' do
|
||||||
|
let(:value) { 'toto' }
|
||||||
|
|
||||||
|
it { is_expected.to_not be_valid }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
25
spec/models/champs/integer_number_champ_spec.rb
Normal file
25
spec/models/champs/integer_number_champ_spec.rb
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
require 'spec_helper'
|
||||||
|
|
||||||
|
describe Champs::IntegerNumberChamp do
|
||||||
|
subject { Champs::IntegerNumberChamp.new(value: value) }
|
||||||
|
|
||||||
|
describe '#valid?' do
|
||||||
|
context 'when the value is integer number' do
|
||||||
|
let(:value) { 2 }
|
||||||
|
|
||||||
|
it { is_expected.to be_valid }
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when the value is decimal number' do
|
||||||
|
let(:value) { 2.6 }
|
||||||
|
|
||||||
|
it { is_expected.to_not be_valid }
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when the value is not a number' do
|
||||||
|
let(:value) { 'toto' }
|
||||||
|
|
||||||
|
it { is_expected.to_not be_valid }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
Loading…
Add table
Add a link
Reference in a new issue