Merge branch 'dev'

This commit is contained in:
gregoirenovel 2018-02-14 15:50:29 +01:00
commit b8ac9d4c29
73 changed files with 627 additions and 603 deletions

View file

@ -14,9 +14,9 @@ Téléprocédures Simplifiées, ou TPS pour les intimes, est une plateforme 100
### Développement ### Développement
- Mailcatcher : `gem install mailcatcher` - Mailcatcher : `gem install mailcatcher`
- Hivemind : - Overmind :
* Mac : `brew install hivemind` * Mac : `brew install overmind`
* Linux : voir https://github.com/DarthSim/hivemind#installation * Linux : voir https://github.com/DarthSim/overmind#installation
### Tests ### Tests
@ -89,7 +89,7 @@ client_secret: ''
## Lancement de l'application ## Lancement de l'application
hivemind overmind s
## Programmation des jobs ## Programmation des jobs
@ -117,6 +117,12 @@ Pour exécuter les tests de l'application, plusieurs possibilités :
rake spec SPEC=file_path/file_name_spec.rb rake spec SPEC=file_path/file_name_spec.rb
rspec file_path/file_name_spec.rb rspec file_path/file_name_spec.rb
## Debug
Une fois `overmind` lancé, et un breakpoint `byebug` inséré dans le code, il faut se connecter au process `server` dans un nouveau terminal afin d'intéragir avec byebug :
overmind connect server
## Linting ## Linting
- Faire tourner RuboCop : `bundle exec rubocop` - Faire tourner RuboCop : `bundle exec rubocop`

View file

@ -19,12 +19,8 @@ class RootController < ApplicationController
description = 'a not so long description' description = 'a not so long description'
all_champs = TypeDeChamp.type_champs all_champs = TypeDeChamp.type_champs
.map { |name, _| TypeDeChamp.new(type_champ: name, libelle: name, description: description, mandatory: true) } .map { |name, _| TypeDeChamp.new(type_champ: name, private: false, libelle: name, description: description, mandatory: true) }
.map { |type_de_champ| ChampPublic.new(type_de_champ: type_de_champ) } .map.with_index { |type_de_champ, i| type_de_champ.champ.build(id: i) }
.map.with_index do |champ, i|
champ.id = i
champ
end
all_champs all_champs
.select { |champ| champ.type_champ == 'header_section' } .select { |champ| champ.type_champ == 'header_section' }

View file

@ -23,7 +23,7 @@ class AdminTypesDeChampFacades
end end
def new_type_de_champ def new_type_de_champ
@private ? TypeDeChampPrivate.new.decorate : TypeDeChampPublic.new.decorate TypeDeChamp.new(private: @private).decorate
end end
def fields_for_var def fields_for_var

View file

@ -1,18 +1,26 @@
class Champ < ActiveRecord::Base class Champ < ActiveRecord::Base
self.inheritance_column = :_type_disabled
belongs_to :dossier, touch: true belongs_to :dossier, touch: true
belongs_to :type_de_champ belongs_to :type_de_champ, inverse_of: :champ
has_many :commentaires has_many :commentaires
delegate :libelle, :type_champ, :order_place, :mandatory, :description, :drop_down_list, to: :type_de_champ delegate :libelle, :type_champ, :order_place, :mandatory?, :description, :drop_down_list, to: :type_de_champ
before_save :format_date_to_iso, if: Proc.new { type_champ == 'date' } before_save :format_date_to_iso, if: Proc.new { type_champ == 'date' }
before_save :format_datetime, if: Proc.new { type_champ == 'datetime' } before_save :format_datetime, if: Proc.new { type_champ == 'datetime' }
before_save :multiple_select_to_string, if: Proc.new { type_champ == 'multiple_drop_down_list' } before_save :multiple_select_to_string, if: Proc.new { type_champ == 'multiple_drop_down_list' }
scope :updated_since?, -> (date) { where('champs.updated_at > ?', date) } scope :updated_since?, -> (date) { where('champs.updated_at > ?', date) }
scope :public_only, -> { where.not(type: 'ChampPrivate').or(where(private: [false, nil])) }
scope :private_only, -> { where(type: 'ChampPrivate').or(where(private: true)) }
def mandatory? def public?
mandatory !private?
end
def private?
super || type == 'ChampPrivate'
end end
def same_hour? num def same_hour? num

View file

@ -1,2 +0,0 @@
class ChampPrivate < Champ
end

View file

@ -1,2 +0,0 @@
class ChampPublic < Champ
end

View file

@ -20,8 +20,8 @@ class Dossier < ActiveRecord::Base
has_many :cerfa, dependent: :destroy has_many :cerfa, dependent: :destroy
has_many :pieces_justificatives, dependent: :destroy has_many :pieces_justificatives, dependent: :destroy
has_many :champs, class_name: 'ChampPublic', dependent: :destroy has_many :champs, -> { public_only }, dependent: :destroy
has_many :champs_private, class_name: 'ChampPrivate', dependent: :destroy has_many :champs_private, -> { private_only }, class_name: 'Champ', dependent: :destroy
has_many :quartier_prioritaires, dependent: :destroy has_many :quartier_prioritaires, dependent: :destroy
has_many :cadastres, dependent: :destroy has_many :cadastres, dependent: :destroy
has_many :commentaires, dependent: :destroy has_many :commentaires, dependent: :destroy
@ -89,12 +89,8 @@ class Dossier < ActiveRecord::Base
end end
def build_default_champs def build_default_champs
procedure.types_de_champ.all.each do |type_de_champ| procedure.all_types_de_champ.each do |type_de_champ|
ChampPublic.create(type_de_champ: type_de_champ, dossier: self) type_de_champ.champ.create(dossier: self)
end
procedure.types_de_champ_private.all.each do |type_de_champ|
ChampPrivate.create(type_de_champ: type_de_champ, dossier: self)
end end
end end

View file

@ -1,7 +1,7 @@
class Procedure < ActiveRecord::Base class Procedure < ActiveRecord::Base
has_many :types_de_piece_justificative, -> { order "order_place ASC" }, dependent: :destroy has_many :types_de_piece_justificative, -> { order "order_place ASC" }, dependent: :destroy
has_many :types_de_champ, class_name: 'TypeDeChampPublic', dependent: :destroy has_many :types_de_champ, -> { public_only }, dependent: :destroy
has_many :types_de_champ_private, dependent: :destroy has_many :types_de_champ_private, -> { private_only }, class_name: 'TypeDeChamp', dependent: :destroy
has_many :dossiers has_many :dossiers
has_one :procedure_path, dependent: :destroy has_one :procedure_path, dependent: :destroy
@ -62,6 +62,10 @@ class Procedure < ActiveRecord::Base
types_de_champ_private.order(:order_place) types_de_champ_private.order(:order_place)
end end
def all_types_de_champ
types_de_champ + types_de_champ_private
end
def self.active id def self.active id
publiees.find(id) publiees.find(id)
end end

View file

@ -1,4 +1,6 @@
class TypeDeChamp < ActiveRecord::Base class TypeDeChamp < ActiveRecord::Base
self.inheritance_column = :_type_disabled
enum type_champs: { enum type_champs: {
text: 'text', text: 'text',
textarea: 'textarea', textarea: 'textarea',
@ -24,7 +26,18 @@ class TypeDeChamp < ActiveRecord::Base
belongs_to :procedure belongs_to :procedure
has_many :champ, dependent: :destroy scope :public_only, -> { where.not(type: 'TypeDeChampPrivate').or(where(private: [false, nil])) }
scope :private_only, -> { where(type: 'TypeDeChampPrivate').or(where(private: true)) }
has_many :champ, inverse_of: :type_de_champ, dependent: :destroy do
def build(params = {})
super(params.merge(proxy_association.owner.params_for_champ))
end
def create(params = {})
super(params.merge(proxy_association.owner.params_for_champ))
end
end
has_one :drop_down_list has_one :drop_down_list
accepts_nested_attributes_for :drop_down_list accepts_nested_attributes_for :drop_down_list
@ -34,16 +47,33 @@ class TypeDeChamp < ActiveRecord::Base
before_validation :check_mandatory before_validation :check_mandatory
def params_for_champ
{
private: private?
}
end
def self.type_de_champs_list_fr def self.type_de_champs_list_fr
type_champs.map { |champ| [I18n.t("activerecord.attributes.type_de_champ.type_champs.#{champ.last}"), champ.first] } type_champs.map { |champ| [I18n.t("activerecord.attributes.type_de_champ.type_champs.#{champ.last}"), champ.first] }
end end
def field_for_list? def check_mandatory
!(type_champ == 'textarea' || type_champ == 'header_section') if non_fillable?
self.mandatory = false
else
true
end
end end
def check_mandatory def non_fillable?
self.mandatory = false if %w(header_section explication).include?(self.type_champ) type_champ.in?(['header_section', 'explication'])
true end
def private?
super || type == 'TypeDeChampPrivate'
end
def public?
!private?
end end
end end

View file

@ -1,2 +0,0 @@
class TypeDeChampPrivate < TypeDeChamp
end

View file

@ -1,2 +0,0 @@
class TypeDeChampPublic < TypeDeChamp
end

View file

@ -1,5 +0,0 @@
class ChampPrivateSerializer < ActiveModel::Serializer
attributes :value
has_one :type_de_champ
end

View file

@ -1,5 +0,0 @@
class ChampPublicSerializer < ActiveModel::Serializer
attributes :value
has_one :type_de_champ
end

View file

@ -0,0 +1,5 @@
class ChampSerializer < ActiveModel::Serializer
attributes :value
has_one :type_de_champ
end

View file

@ -13,17 +13,17 @@ class TypesDeChampService
:type_champ, :type_champ,
:id, :id,
:mandatory, :mandatory,
:type,
drop_down_list_attributes: [:value, :id] drop_down_list_attributes: [:value, :id]
]) ])
parameters[attributes].each do |param_first, param_second| parameters[attributes].each do |index, param|
if param_second[:libelle].empty? param[:private] = private
parameters[attributes].delete(param_first.to_s) if param[:libelle].empty?
parameters[attributes].delete(index.to_s)
end end
if param_second['drop_down_list_attributes'] && param_second['drop_down_list_attributes']['value'] if param['drop_down_list_attributes'] && param['drop_down_list_attributes']['value']
param_second['drop_down_list_attributes']['value'] = self.clean_value (param_second['drop_down_list_attributes']['value']) param['drop_down_list_attributes']['value'] = self.clean_value (param['drop_down_list_attributes']['value'])
end end
end end

View file

@ -21,7 +21,7 @@
= fff.hidden_field :id = fff.hidden_field :id
- hide_mandatory = (ff.object.object.class == TypeDeChampPrivate || type_champ == 'explication') - hide_mandatory = (ff.object.object.private? || type_champ == 'explication')
.form-group.mandatory{ style: hide_mandatory ? 'visibility: hidden;' : nil } .form-group.mandatory{ style: hide_mandatory ? 'visibility: hidden;' : nil }
%h4 Obligatoire ? %h4 Obligatoire ?
.center .center

View file

@ -1,4 +1,4 @@
= form.text_field :value, = form.text_field :value,
'data-address': 'true', 'data-address': 'true',
placeholder: champ.libelle, placeholder: champ.libelle,
required: champ.mandatory required: champ.mandatory?

View file

@ -1,6 +1,6 @@
= form.label :value do = form.label :value do
#{champ.libelle} #{champ.libelle}
- if champ.mandatory - if champ.mandatory?
%span.mandatory * %span.mandatory *
- if champ.updated_at.present? - if champ.updated_at.present?

View file

@ -1,5 +1,5 @@
= form.check_box :value, = form.check_box :value,
{ required: champ.mandatory }, { required: champ.mandatory? },
'on', 'on',
'off' 'off'

View file

@ -1,4 +1,4 @@
= form.date_field :value, = form.date_field :value,
value: champ.value, value: champ.value,
placeholder: 'JJ/MM/AAAA', placeholder: 'JJ/MM/AAAA',
required: champ.mandatory required: champ.mandatory?

View file

@ -1,3 +1,3 @@
= form.select :value, = form.select :value,
Champ.departements, Champ.departements,
required: champ.mandatory required: champ.mandatory?

View file

@ -8,7 +8,7 @@
placeholder: "Numéro de dossier", placeholder: "Numéro de dossier",
autocomplete: 'off', autocomplete: 'off',
'data-type': 'dossier-link', 'data-type': 'dossier-link',
required: champ.mandatory required: champ.mandatory?
.help-block .help-block
%p.text-info{ style: show_text_summary ? nil : 'display: none;' } %p.text-info{ style: show_text_summary ? nil : 'display: none;' }

View file

@ -2,4 +2,4 @@
= form.select :value, = form.select :value,
champ.drop_down_list.options, champ.drop_down_list.options,
disabled: champ.drop_down_list.disabled_options, disabled: champ.drop_down_list.disabled_options,
required: champ.mandatory required: champ.mandatory?

View file

@ -1,3 +1,3 @@
= form.email_field :value, = form.email_field :value,
placeholder: champ.libelle, placeholder: champ.libelle,
required: champ.mandatory required: champ.mandatory?

View file

@ -1,5 +1,5 @@
= form.check_box :value, = form.check_box :value,
{ required: champ.mandatory }, { required: champ.mandatory? },
'on', 'on',
'off' 'off'

View file

@ -1,3 +1,3 @@
= form.number_field :value, = form.number_field :value,
placeholder: champ.libelle, placeholder: champ.libelle,
required: champ.mandatory required: champ.mandatory?

View file

@ -1,3 +1,3 @@
= form.select :value, = form.select :value,
Champ.pays, Champ.pays,
required: champ.mandatory required: champ.mandatory?

View file

@ -1,3 +1,3 @@
= form.phone_field :value, = form.phone_field :value,
placeholder: champ.libelle, placeholder: champ.libelle,
required: champ.mandatory required: champ.mandatory?

View file

@ -1,3 +1,3 @@
= form.select :value, = form.select :value,
Champ.regions, Champ.regions,
required: champ.mandatory required: champ.mandatory?

View file

@ -1,3 +1,3 @@
= form.text_field :value, = form.text_field :value,
placeholder: champ.libelle, placeholder: champ.libelle,
required: champ.mandatory required: champ.mandatory?

View file

@ -1,5 +1,5 @@
~ form.text_area :value, ~ form.text_area :value,
row: 6, row: 6,
placeholder: champ.description, placeholder: champ.description,
required: champ.mandatory, required: champ.mandatory?,
value: html_to_string(champ.value) value: html_to_string(champ.value)

View file

@ -94,9 +94,10 @@
- @dossiers.each do |dossier| - @dossiers.each do |dossier|
%tr %tr
%td.folder-col %td.folder-col
%span.icon.folder = link_to(dossier_path(@procedure, dossier), class: 'cell-link') do
- if current_gestionnaire.notifications_for_procedure(@procedure).include?(dossier.id) %span.icon.folder
%span.notifications{ 'aria-label': 'notifications' } - if current_gestionnaire.notifications_for_procedure(@procedure).include?(dossier.id)
%span.notifications{ 'aria-label': 'notifications' }
%td.number-col %td.number-col
= link_to(dossier_path(@procedure, dossier), class: 'cell-link') do = link_to(dossier_path(@procedure, dossier), class: 'cell-link') do

View file

@ -9,23 +9,26 @@
%table.table.dossiers-table.hoverable %table.table.dossiers-table.hoverable
%thead %thead
%tr %tr
%th Nº %th.notification-col
%th.number-col Nº dossier
%th Procédure %th Procédure
%th Demandeur %th Demandeur
%th Statut %th.status-col Statut
%tbody %tbody
- @dossiers.each do |dossier| - @dossiers.each do |dossier|
/ # FIXME: here we have a n+1, we fire a request / # FIXME: here we have a n+1, we fire a request
/ (due to dossier_linked_path) per result / (due to dossier_linked_path) per result
%tr %tr
%td.number-col %td.folder-col
= link_to(dossier_linked_path(current_gestionnaire, dossier), class: 'cell-link') do = link_to(dossier_linked_path(current_gestionnaire, dossier), class: 'cell-link') do
%span.icon.folder> %span.icon.folder
= dossier.id %td.number-col
%td= link_to(dossier.procedure.libelle, dossier_linked_path(current_gestionnaire, dossier), class: 'cell-link') = link_to(dossier_linked_path(current_gestionnaire, dossier), class: 'cell-link') do
%td= link_to(dossier.user.email, dossier_linked_path(current_gestionnaire, dossier), class: 'cell-link') = dossier.id
%td.status-col %td= link_to(dossier.procedure.libelle, dossier_linked_path(current_gestionnaire, dossier), class: 'cell-link')
= link_to(dossier_linked_path(current_gestionnaire, dossier), class: 'cell-link') do %td= link_to(dossier.user.email, dossier_linked_path(current_gestionnaire, dossier), class: 'cell-link')
= render partial: 'new_gestionnaire/procedures/status', locals: { dossier: dossier } %td.status-col
= link_to(dossier_linked_path(current_gestionnaire, dossier), class: 'cell-link') do
= render partial: 'new_gestionnaire/procedures/status', locals: { dossier: dossier }
- else - else
%h2 Aucun dossier correspondant à votre recherche n'a été trouvé %h2 Aucun dossier correspondant à votre recherche n'a été trouvé

View file

@ -27,7 +27,7 @@
%td{ id: "dossier_#{dossier.id}_state" }= dossier.display_state %td{ id: "dossier_#{dossier.id}_state" }= dossier.display_state
%td= dossier.last_update %td= dossier.last_update
%td= link_to('X', url_for(controller: 'dossiers', action: :destroy, id: dossier.id), 'data-confirm' => "Voulez-vous supprimer la brouillon ?", 'data-method' => :delete, class: 'btn-sm btn-danger') if @liste == "brouillon" %td= link_to('X', url_for(controller: 'dossiers', action: :destroy, id: dossier.id), 'data-confirm' => "Voulez-vous supprimer le brouillon ?", 'data-method' => :delete, class: 'btn-sm btn-danger') if @liste == "brouillon"
= smart_listing.paginate = smart_listing.paginate
= smart_listing.pagination_per_page_links = smart_listing.pagination_per_page_links

View file

@ -0,0 +1,11 @@
class AddPrivateToChampAndTypeDeChamp < ActiveRecord::Migration[5.2]
disable_ddl_transaction!
def change
add_column :champs, :private, :boolean, index: true
add_column :types_de_champ, :private, :boolean, index: true
add_index :champs, :private, algorithm: :concurrently
add_index :types_de_champ, :private, algorithm: :concurrently
end
end

View file

@ -10,467 +10,465 @@
# #
# It's strongly recommended that you check this file into your version control system. # It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema.define(version: 20180206153121) do ActiveRecord::Schema.define(version: 2018_02_09_133452) do
# These are extensions that must be enabled in order to support this database # These are extensions that must be enabled in order to support this database
enable_extension "plpgsql" enable_extension "plpgsql"
enable_extension "unaccent" enable_extension "unaccent"
create_table "administrateurs", force: :cascade do |t| create_table "administrateurs", id: :serial, force: :cascade do |t|
t.string "email", default: "", null: false t.string "email", default: "", null: false
t.string "encrypted_password", default: "", null: false t.string "encrypted_password", default: "", null: false
t.string "reset_password_token" t.string "reset_password_token"
t.datetime "reset_password_sent_at" t.datetime "reset_password_sent_at"
t.datetime "remember_created_at" t.datetime "remember_created_at"
t.integer "sign_in_count", default: 0, null: false t.integer "sign_in_count", default: 0, null: false
t.datetime "current_sign_in_at" t.datetime "current_sign_in_at"
t.datetime "last_sign_in_at" t.datetime "last_sign_in_at"
t.string "current_sign_in_ip" t.string "current_sign_in_ip"
t.string "last_sign_in_ip" t.string "last_sign_in_ip"
t.datetime "created_at" t.datetime "created_at"
t.datetime "updated_at" t.datetime "updated_at"
t.string "api_token" t.string "api_token"
t.boolean "active", default: false t.boolean "active", default: false
t.index ["email"], name: "index_administrateurs_on_email", unique: true, using: :btree t.index ["email"], name: "index_administrateurs_on_email", unique: true
t.index ["reset_password_token"], name: "index_administrateurs_on_reset_password_token", unique: true, using: :btree t.index ["reset_password_token"], name: "index_administrateurs_on_reset_password_token", unique: true
end end
create_table "administrateurs_gestionnaires", id: false, force: :cascade do |t| create_table "administrateurs_gestionnaires", id: false, force: :cascade do |t|
t.integer "administrateur_id" t.integer "administrateur_id"
t.integer "gestionnaire_id" t.integer "gestionnaire_id"
t.index ["administrateur_id"], name: "index_administrateurs_gestionnaires_on_administrateur_id", using: :btree t.index ["administrateur_id"], name: "index_administrateurs_gestionnaires_on_administrateur_id"
t.index ["gestionnaire_id", "administrateur_id"], name: "unique_couple_administrateur_gestionnaire", unique: true, using: :btree t.index ["gestionnaire_id", "administrateur_id"], name: "unique_couple_administrateur_gestionnaire", unique: true
t.index ["gestionnaire_id"], name: "index_administrateurs_gestionnaires_on_gestionnaire_id", using: :btree t.index ["gestionnaire_id"], name: "index_administrateurs_gestionnaires_on_gestionnaire_id"
end end
create_table "administrations", force: :cascade do |t| create_table "administrations", id: :serial, force: :cascade do |t|
t.string "email", default: "", null: false t.string "email", default: "", null: false
t.string "encrypted_password", default: "", null: false t.string "encrypted_password", default: "", null: false
t.string "reset_password_token" t.string "reset_password_token"
t.datetime "reset_password_sent_at" t.datetime "reset_password_sent_at"
t.datetime "remember_created_at" t.datetime "remember_created_at"
t.integer "sign_in_count", default: 0, null: false t.integer "sign_in_count", default: 0, null: false
t.datetime "current_sign_in_at" t.datetime "current_sign_in_at"
t.datetime "last_sign_in_at" t.datetime "last_sign_in_at"
t.string "current_sign_in_ip" t.string "current_sign_in_ip"
t.string "last_sign_in_ip" t.string "last_sign_in_ip"
t.datetime "created_at" t.datetime "created_at"
t.datetime "updated_at" t.datetime "updated_at"
t.index ["email"], name: "index_administrations_on_email", unique: true, using: :btree t.index ["email"], name: "index_administrations_on_email", unique: true
t.index ["reset_password_token"], name: "index_administrations_on_reset_password_token", unique: true, using: :btree t.index ["reset_password_token"], name: "index_administrations_on_reset_password_token", unique: true
end end
create_table "ar_internal_metadata", primary_key: "key", id: :string, force: :cascade do |t| create_table "assign_tos", id: :serial, force: :cascade do |t|
t.string "value"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
create_table "assign_tos", force: :cascade do |t|
t.integer "gestionnaire_id" t.integer "gestionnaire_id"
t.integer "procedure_id" t.integer "procedure_id"
t.index ["gestionnaire_id"], name: "index_assign_tos_on_gestionnaire_id", using: :btree t.index ["gestionnaire_id"], name: "index_assign_tos_on_gestionnaire_id"
t.index ["procedure_id"], name: "index_assign_tos_on_procedure_id", using: :btree t.index ["procedure_id"], name: "index_assign_tos_on_procedure_id"
end end
create_table "attestation_templates", force: :cascade do |t| create_table "attestation_templates", id: :serial, force: :cascade do |t|
t.text "title" t.text "title"
t.text "body" t.text "body"
t.text "footer" t.text "footer"
t.string "logo" t.string "logo"
t.string "signature" t.string "signature"
t.boolean "activated" t.boolean "activated"
t.datetime "created_at", null: false t.datetime "created_at", null: false
t.datetime "updated_at", null: false t.datetime "updated_at", null: false
t.integer "procedure_id" t.integer "procedure_id"
t.string "logo_secure_token" t.string "logo_secure_token"
t.string "signature_secure_token" t.string "signature_secure_token"
t.index ["procedure_id"], name: "index_attestation_templates_on_procedure_id", unique: true, using: :btree t.index ["procedure_id"], name: "index_attestation_templates_on_procedure_id", unique: true
end end
create_table "attestations", force: :cascade do |t| create_table "attestations", id: :serial, force: :cascade do |t|
t.string "pdf" t.string "pdf"
t.string "title" t.string "title"
t.integer "dossier_id", null: false t.integer "dossier_id", null: false
t.datetime "created_at", null: false t.datetime "created_at", null: false
t.datetime "updated_at", null: false t.datetime "updated_at", null: false
t.string "content_secure_token" t.string "content_secure_token"
t.index ["dossier_id"], name: "index_attestations_on_dossier_id", using: :btree t.index ["dossier_id"], name: "index_attestations_on_dossier_id"
end end
create_table "avis", force: :cascade do |t| create_table "avis", id: :serial, force: :cascade do |t|
t.string "email" t.string "email"
t.text "introduction" t.text "introduction"
t.text "answer" t.text "answer"
t.integer "gestionnaire_id" t.integer "gestionnaire_id"
t.integer "dossier_id" t.integer "dossier_id"
t.datetime "created_at", null: false t.datetime "created_at", null: false
t.datetime "updated_at", null: false t.datetime "updated_at", null: false
t.integer "claimant_id", null: false t.integer "claimant_id", null: false
t.boolean "confidentiel", default: false, null: false t.boolean "confidentiel", default: false, null: false
t.index ["claimant_id"], name: "index_avis_on_claimant_id", using: :btree t.index ["claimant_id"], name: "index_avis_on_claimant_id"
t.index ["dossier_id"], name: "index_avis_on_dossier_id", using: :btree t.index ["dossier_id"], name: "index_avis_on_dossier_id"
t.index ["gestionnaire_id"], name: "index_avis_on_gestionnaire_id", using: :btree t.index ["gestionnaire_id"], name: "index_avis_on_gestionnaire_id"
end end
create_table "cadastres", force: :cascade do |t| create_table "cadastres", id: :serial, force: :cascade do |t|
t.string "surface_intersection" t.string "surface_intersection"
t.float "surface_parcelle" t.float "surface_parcelle"
t.string "numero" t.string "numero"
t.integer "feuille" t.integer "feuille"
t.string "section" t.string "section"
t.string "code_dep" t.string "code_dep"
t.string "nom_com" t.string "nom_com"
t.string "code_com" t.string "code_com"
t.string "code_arr" t.string "code_arr"
t.text "geometry" t.text "geometry"
t.integer "dossier_id" t.integer "dossier_id"
end end
create_table "cerfas", force: :cascade do |t| create_table "cerfas", id: :serial, force: :cascade do |t|
t.string "content" t.string "content"
t.integer "dossier_id" t.integer "dossier_id"
t.datetime "created_at" t.datetime "created_at"
t.integer "user_id" t.integer "user_id"
t.string "original_filename" t.string "original_filename"
t.string "content_secure_token" t.string "content_secure_token"
t.index ["dossier_id"], name: "index_cerfas_on_dossier_id", using: :btree t.index ["dossier_id"], name: "index_cerfas_on_dossier_id"
end end
create_table "champs", force: :cascade do |t| create_table "champs", id: :serial, force: :cascade do |t|
t.string "value" t.string "value"
t.integer "type_de_champ_id" t.integer "type_de_champ_id"
t.integer "dossier_id" t.integer "dossier_id"
t.string "type" t.string "type"
t.datetime "created_at" t.datetime "created_at"
t.datetime "updated_at" t.datetime "updated_at"
t.index ["dossier_id"], name: "index_champs_on_dossier_id", using: :btree t.boolean "private"
t.index ["type_de_champ_id"], name: "index_champs_on_type_de_champ_id", using: :btree t.index ["dossier_id"], name: "index_champs_on_dossier_id"
t.index ["private"], name: "index_champs_on_private"
t.index ["type_de_champ_id"], name: "index_champs_on_type_de_champ_id"
end end
create_table "closed_mails", force: :cascade do |t| create_table "closed_mails", id: :serial, force: :cascade do |t|
t.text "body" t.text "body"
t.string "subject" t.string "subject"
t.integer "procedure_id" t.integer "procedure_id"
t.datetime "created_at", null: false t.datetime "created_at", null: false
t.datetime "updated_at", null: false t.datetime "updated_at", null: false
t.index ["procedure_id"], name: "index_closed_mails_on_procedure_id", using: :btree t.index ["procedure_id"], name: "index_closed_mails_on_procedure_id"
end end
create_table "commentaires", force: :cascade do |t| create_table "commentaires", id: :serial, force: :cascade do |t|
t.string "email" t.string "email"
t.datetime "created_at", null: false t.datetime "created_at", null: false
t.string "body" t.string "body"
t.integer "dossier_id" t.integer "dossier_id"
t.datetime "updated_at", null: false t.datetime "updated_at", null: false
t.integer "piece_justificative_id" t.integer "piece_justificative_id"
t.integer "champ_id" t.integer "champ_id"
t.string "file" t.string "file"
t.index ["champ_id"], name: "index_commentaires_on_champ_id", using: :btree t.index ["champ_id"], name: "index_commentaires_on_champ_id"
t.index ["dossier_id"], name: "index_commentaires_on_dossier_id", using: :btree t.index ["dossier_id"], name: "index_commentaires_on_dossier_id"
end end
create_table "delayed_jobs", force: :cascade do |t| create_table "delayed_jobs", id: :serial, force: :cascade do |t|
t.integer "priority", default: 0, null: false t.integer "priority", default: 0, null: false
t.integer "attempts", default: 0, null: false t.integer "attempts", default: 0, null: false
t.text "handler", null: false t.text "handler", null: false
t.text "last_error" t.text "last_error"
t.datetime "run_at" t.datetime "run_at"
t.datetime "locked_at" t.datetime "locked_at"
t.datetime "failed_at" t.datetime "failed_at"
t.string "locked_by" t.string "locked_by"
t.string "queue" t.string "queue"
t.datetime "created_at" t.datetime "created_at"
t.datetime "updated_at" t.datetime "updated_at"
t.string "cron" t.string "cron"
t.index ["priority", "run_at"], name: "delayed_jobs_priority", using: :btree t.index ["priority", "run_at"], name: "delayed_jobs_priority"
end end
create_table "dossiers", force: :cascade do |t| create_table "dossiers", id: :serial, force: :cascade do |t|
t.boolean "autorisation_donnees" t.boolean "autorisation_donnees"
t.integer "procedure_id" t.integer "procedure_id"
t.datetime "created_at" t.datetime "created_at"
t.datetime "updated_at" t.datetime "updated_at"
t.string "state" t.string "state"
t.integer "user_id" t.integer "user_id"
t.text "json_latlngs" t.text "json_latlngs"
t.boolean "archived", default: false t.boolean "archived", default: false
t.boolean "mandataire_social", default: false t.boolean "mandataire_social", default: false
t.datetime "en_construction_at" t.datetime "en_construction_at"
t.datetime "en_instruction_at" t.datetime "en_instruction_at"
t.datetime "processed_at" t.datetime "processed_at"
t.text "motivation" t.text "motivation"
t.datetime "hidden_at" t.datetime "hidden_at"
t.index ["hidden_at"], name: "index_dossiers_on_hidden_at", using: :btree t.index ["hidden_at"], name: "index_dossiers_on_hidden_at"
t.index ["procedure_id"], name: "index_dossiers_on_procedure_id", using: :btree t.index ["procedure_id"], name: "index_dossiers_on_procedure_id"
t.index ["user_id"], name: "index_dossiers_on_user_id", using: :btree t.index ["user_id"], name: "index_dossiers_on_user_id"
end end
create_table "drop_down_lists", force: :cascade do |t| create_table "drop_down_lists", id: :serial, force: :cascade do |t|
t.string "value" t.string "value"
t.integer "type_de_champ_id" t.integer "type_de_champ_id"
t.index ["type_de_champ_id"], name: "index_drop_down_lists_on_type_de_champ_id", using: :btree t.index ["type_de_champ_id"], name: "index_drop_down_lists_on_type_de_champ_id"
end end
create_table "entreprises", force: :cascade do |t| create_table "entreprises", id: :serial, force: :cascade do |t|
t.string "siren" t.string "siren"
t.integer "capital_social" t.integer "capital_social"
t.string "numero_tva_intracommunautaire" t.string "numero_tva_intracommunautaire"
t.string "forme_juridique" t.string "forme_juridique"
t.string "forme_juridique_code" t.string "forme_juridique_code"
t.string "nom_commercial" t.string "nom_commercial"
t.string "raison_sociale" t.string "raison_sociale"
t.string "siret_siege_social" t.string "siret_siege_social"
t.string "code_effectif_entreprise" t.string "code_effectif_entreprise"
t.datetime "date_creation" t.datetime "date_creation"
t.string "nom" t.string "nom"
t.string "prenom" t.string "prenom"
t.integer "dossier_id" t.integer "dossier_id"
t.datetime "created_at" t.datetime "created_at"
t.datetime "updated_at" t.datetime "updated_at"
t.index ["dossier_id"], name: "index_entreprises_on_dossier_id", using: :btree t.index ["dossier_id"], name: "index_entreprises_on_dossier_id"
end end
create_table "etablissements", force: :cascade do |t| create_table "etablissements", id: :serial, force: :cascade do |t|
t.string "siret" t.string "siret"
t.boolean "siege_social" t.boolean "siege_social"
t.string "naf" t.string "naf"
t.string "libelle_naf" t.string "libelle_naf"
t.string "adresse" t.string "adresse"
t.string "numero_voie" t.string "numero_voie"
t.string "type_voie" t.string "type_voie"
t.string "nom_voie" t.string "nom_voie"
t.string "complement_adresse" t.string "complement_adresse"
t.string "code_postal" t.string "code_postal"
t.string "localite" t.string "localite"
t.string "code_insee_localite" t.string "code_insee_localite"
t.integer "dossier_id" t.integer "dossier_id"
t.integer "entreprise_id" t.integer "entreprise_id"
t.index ["dossier_id"], name: "index_etablissements_on_dossier_id", using: :btree t.index ["dossier_id"], name: "index_etablissements_on_dossier_id"
end end
create_table "exercices", force: :cascade do |t| create_table "exercices", id: :serial, force: :cascade do |t|
t.string "ca" t.string "ca"
t.datetime "dateFinExercice" t.datetime "dateFinExercice"
t.integer "date_fin_exercice_timestamp" t.integer "date_fin_exercice_timestamp"
t.integer "etablissement_id" t.integer "etablissement_id"
end end
create_table "follows", force: :cascade do |t| create_table "follows", id: :serial, force: :cascade do |t|
t.integer "gestionnaire_id", null: false t.integer "gestionnaire_id", null: false
t.integer "dossier_id", null: false t.integer "dossier_id", null: false
t.datetime "demande_seen_at" t.datetime "demande_seen_at"
t.datetime "annotations_privees_seen_at" t.datetime "annotations_privees_seen_at"
t.datetime "avis_seen_at" t.datetime "avis_seen_at"
t.datetime "messagerie_seen_at" t.datetime "messagerie_seen_at"
t.index ["dossier_id"], name: "index_follows_on_dossier_id", using: :btree t.index ["dossier_id"], name: "index_follows_on_dossier_id"
t.index ["gestionnaire_id", "dossier_id"], name: "index_follows_on_gestionnaire_id_and_dossier_id", unique: true, using: :btree t.index ["gestionnaire_id", "dossier_id"], name: "index_follows_on_gestionnaire_id_and_dossier_id", unique: true
t.index ["gestionnaire_id"], name: "index_follows_on_gestionnaire_id", using: :btree t.index ["gestionnaire_id"], name: "index_follows_on_gestionnaire_id"
end end
create_table "france_connect_informations", force: :cascade do |t| create_table "france_connect_informations", id: :serial, force: :cascade do |t|
t.string "gender" t.string "gender"
t.string "given_name" t.string "given_name"
t.string "family_name" t.string "family_name"
t.date "birthdate" t.date "birthdate"
t.string "birthplace" t.string "birthplace"
t.string "france_connect_particulier_id" t.string "france_connect_particulier_id"
t.integer "user_id" t.integer "user_id"
t.string "email_france_connect" t.string "email_france_connect"
t.index ["user_id"], name: "index_france_connect_informations_on_user_id", using: :btree t.index ["user_id"], name: "index_france_connect_informations_on_user_id"
end end
create_table "gestionnaires", force: :cascade do |t| create_table "gestionnaires", id: :serial, force: :cascade do |t|
t.string "email", default: "", null: false t.string "email", default: "", null: false
t.string "encrypted_password", default: "", null: false t.string "encrypted_password", default: "", null: false
t.string "reset_password_token" t.string "reset_password_token"
t.datetime "reset_password_sent_at" t.datetime "reset_password_sent_at"
t.datetime "remember_created_at" t.datetime "remember_created_at"
t.integer "sign_in_count", default: 0, null: false t.integer "sign_in_count", default: 0, null: false
t.datetime "current_sign_in_at" t.datetime "current_sign_in_at"
t.datetime "last_sign_in_at" t.datetime "last_sign_in_at"
t.string "current_sign_in_ip" t.string "current_sign_in_ip"
t.string "last_sign_in_ip" t.string "last_sign_in_ip"
t.datetime "created_at" t.datetime "created_at"
t.datetime "updated_at" t.datetime "updated_at"
t.integer "procedure_filter" t.integer "procedure_filter"
t.index ["email"], name: "index_gestionnaires_on_email", unique: true, using: :btree t.index ["email"], name: "index_gestionnaires_on_email", unique: true
t.index ["reset_password_token"], name: "index_gestionnaires_on_reset_password_token", unique: true, using: :btree t.index ["reset_password_token"], name: "index_gestionnaires_on_reset_password_token", unique: true
end end
create_table "individuals", force: :cascade do |t| create_table "individuals", id: :serial, force: :cascade do |t|
t.string "nom" t.string "nom"
t.string "prenom" t.string "prenom"
t.string "birthdate" t.string "birthdate"
t.integer "dossier_id" t.integer "dossier_id"
t.string "gender" t.string "gender"
t.index ["dossier_id"], name: "index_individuals_on_dossier_id", using: :btree t.index ["dossier_id"], name: "index_individuals_on_dossier_id"
end end
create_table "initiated_mails", force: :cascade do |t| create_table "initiated_mails", id: :serial, force: :cascade do |t|
t.string "subject" t.string "subject"
t.text "body" t.text "body"
t.integer "procedure_id" t.integer "procedure_id"
t.datetime "created_at", null: false t.datetime "created_at", null: false
t.datetime "updated_at", null: false t.datetime "updated_at", null: false
t.index ["procedure_id"], name: "index_initiated_mails_on_procedure_id", using: :btree t.index ["procedure_id"], name: "index_initiated_mails_on_procedure_id"
end end
create_table "invites", force: :cascade do |t| create_table "invites", id: :serial, force: :cascade do |t|
t.string "email" t.string "email"
t.string "email_sender" t.string "email_sender"
t.integer "dossier_id" t.integer "dossier_id"
t.integer "user_id" t.integer "user_id"
t.string "type", default: "InviteGestionnaire" t.string "type", default: "InviteGestionnaire"
end end
create_table "module_api_cartos", force: :cascade do |t| create_table "module_api_cartos", id: :serial, force: :cascade do |t|
t.integer "procedure_id" t.integer "procedure_id"
t.boolean "use_api_carto", default: false t.boolean "use_api_carto", default: false
t.boolean "quartiers_prioritaires", default: false t.boolean "quartiers_prioritaires", default: false
t.boolean "cadastre", default: false t.boolean "cadastre", default: false
t.index ["procedure_id"], name: "index_module_api_cartos_on_procedure_id", unique: true, using: :btree t.index ["procedure_id"], name: "index_module_api_cartos_on_procedure_id", unique: true
end end
create_table "pieces_justificatives", force: :cascade do |t| create_table "pieces_justificatives", id: :serial, force: :cascade do |t|
t.string "content" t.string "content"
t.integer "dossier_id" t.integer "dossier_id"
t.integer "type_de_piece_justificative_id" t.integer "type_de_piece_justificative_id"
t.datetime "created_at" t.datetime "created_at"
t.integer "user_id" t.integer "user_id"
t.string "original_filename" t.string "original_filename"
t.string "content_secure_token" t.string "content_secure_token"
t.datetime "updated_at" t.datetime "updated_at"
t.index ["dossier_id"], name: "index_pieces_justificatives_on_dossier_id", using: :btree t.index ["dossier_id"], name: "index_pieces_justificatives_on_dossier_id"
t.index ["type_de_piece_justificative_id"], name: "index_pieces_justificatives_on_type_de_piece_justificative_id", using: :btree t.index ["type_de_piece_justificative_id"], name: "index_pieces_justificatives_on_type_de_piece_justificative_id"
end end
create_table "procedure_paths", force: :cascade do |t| create_table "procedure_paths", id: :serial, force: :cascade do |t|
t.string "path" t.string "path"
t.integer "procedure_id" t.integer "procedure_id"
t.integer "administrateur_id" t.integer "administrateur_id"
t.index ["path"], name: "index_procedure_paths_on_path", using: :btree t.index ["path"], name: "index_procedure_paths_on_path"
end end
create_table "procedure_presentations", force: :cascade do |t| create_table "procedure_presentations", id: :serial, force: :cascade do |t|
t.integer "assign_to_id" t.integer "assign_to_id"
t.text "displayed_fields", default: ["{\"label\":\"Demandeur\",\"table\":\"user\",\"column\":\"email\"}"], null: false, array: true t.text "displayed_fields", default: ["{\"label\":\"Demandeur\",\"table\":\"user\",\"column\":\"email\"}"], null: false, array: true
t.json "sort", default: "{\"table\":\"notifications\",\"column\":\"notifications\",\"order\":\"desc\"}", null: false t.json "sort", default: "{\"table\":\"notifications\",\"column\":\"notifications\",\"order\":\"desc\"}", null: false
t.json "filters", default: "{\"a-suivre\":[],\"suivis\":[],\"traites\":[],\"tous\":[],\"archives\":[]}", null: false t.json "filters", default: "{\"a-suivre\":[],\"suivis\":[],\"traites\":[],\"tous\":[],\"archives\":[]}", null: false
t.index ["assign_to_id"], name: "index_procedure_presentations_on_assign_to_id", unique: true, using: :btree t.index ["assign_to_id"], name: "index_procedure_presentations_on_assign_to_id", unique: true
end end
create_table "procedures", force: :cascade do |t| create_table "procedures", id: :serial, force: :cascade do |t|
t.string "libelle" t.string "libelle"
t.string "description" t.string "description"
t.string "organisation", null: false t.string "organisation", null: false
t.string "direction" t.string "direction"
t.string "lien_demarche" t.string "lien_demarche"
t.datetime "created_at", null: false t.datetime "created_at", null: false
t.datetime "updated_at", null: false t.datetime "updated_at", null: false
t.integer "administrateur_id" t.integer "administrateur_id"
t.boolean "euro_flag", default: false t.boolean "euro_flag", default: false
t.string "logo" t.string "logo"
t.boolean "cerfa_flag", default: false t.boolean "cerfa_flag", default: false
t.string "logo_secure_token" t.string "logo_secure_token"
t.string "lien_site_web" t.string "lien_site_web"
t.string "lien_notice" t.string "lien_notice"
t.boolean "for_individual", default: false t.boolean "for_individual", default: false
t.boolean "individual_with_siret", default: false t.boolean "individual_with_siret", default: false
t.date "auto_archive_on" t.date "auto_archive_on"
t.datetime "published_at" t.datetime "published_at"
t.datetime "hidden_at" t.datetime "hidden_at"
t.datetime "archived_at" t.datetime "archived_at"
t.datetime "whitelisted_at" t.datetime "whitelisted_at"
t.boolean "ask_birthday", default: false, null: false t.boolean "ask_birthday", default: false, null: false
t.index ["hidden_at"], name: "index_procedures_on_hidden_at", using: :btree t.index ["hidden_at"], name: "index_procedures_on_hidden_at"
end end
create_table "quartier_prioritaires", force: :cascade do |t| create_table "quartier_prioritaires", id: :serial, force: :cascade do |t|
t.string "code" t.string "code"
t.string "nom" t.string "nom"
t.string "commune" t.string "commune"
t.text "geometry" t.text "geometry"
t.integer "dossier_id" t.integer "dossier_id"
end end
create_table "received_mails", force: :cascade do |t| create_table "received_mails", id: :serial, force: :cascade do |t|
t.text "body" t.text "body"
t.string "subject" t.string "subject"
t.integer "procedure_id" t.integer "procedure_id"
t.datetime "created_at", null: false t.datetime "created_at", null: false
t.datetime "updated_at", null: false t.datetime "updated_at", null: false
t.index ["procedure_id"], name: "index_received_mails_on_procedure_id", using: :btree t.index ["procedure_id"], name: "index_received_mails_on_procedure_id"
end end
create_table "refused_mails", force: :cascade do |t| create_table "refused_mails", id: :serial, force: :cascade do |t|
t.text "body" t.text "body"
t.string "subject" t.string "subject"
t.integer "procedure_id" t.integer "procedure_id"
t.datetime "created_at", null: false t.datetime "created_at", null: false
t.datetime "updated_at", null: false t.datetime "updated_at", null: false
t.index ["procedure_id"], name: "index_refused_mails_on_procedure_id", using: :btree t.index ["procedure_id"], name: "index_refused_mails_on_procedure_id"
end end
create_table "rna_informations", force: :cascade do |t| create_table "rna_informations", id: :serial, force: :cascade do |t|
t.string "association_id" t.string "association_id"
t.string "titre" t.string "titre"
t.text "objet" t.text "objet"
t.date "date_creation" t.date "date_creation"
t.date "date_declaration" t.date "date_declaration"
t.date "date_publication" t.date "date_publication"
t.integer "entreprise_id" t.integer "entreprise_id"
t.index ["entreprise_id"], name: "index_rna_informations_on_entreprise_id", using: :btree t.index ["entreprise_id"], name: "index_rna_informations_on_entreprise_id"
end end
create_table "types_de_champ", force: :cascade do |t| create_table "types_de_champ", id: :serial, force: :cascade do |t|
t.string "libelle" t.string "libelle"
t.string "type_champ" t.string "type_champ"
t.integer "order_place" t.integer "order_place"
t.integer "procedure_id" t.integer "procedure_id"
t.text "description" t.text "description"
t.boolean "mandatory", default: false t.boolean "mandatory", default: false
t.string "type" t.string "type"
t.boolean "private"
t.index ["private"], name: "index_types_de_champ_on_private"
end end
create_table "types_de_piece_justificative", force: :cascade do |t| create_table "types_de_piece_justificative", id: :serial, force: :cascade do |t|
t.string "libelle" t.string "libelle"
t.string "description" t.string "description"
t.boolean "api_entreprise", default: false t.boolean "api_entreprise", default: false
t.datetime "created_at", null: false t.datetime "created_at", null: false
t.datetime "updated_at", null: false t.datetime "updated_at", null: false
t.integer "procedure_id" t.integer "procedure_id"
t.integer "order_place" t.integer "order_place"
t.string "lien_demarche" t.string "lien_demarche"
t.boolean "mandatory", default: false t.boolean "mandatory", default: false
end end
create_table "users", force: :cascade do |t| create_table "users", id: :serial, force: :cascade do |t|
t.string "email", default: "", null: false t.string "email", default: "", null: false
t.string "encrypted_password", default: "", null: false t.string "encrypted_password", default: "", null: false
t.string "reset_password_token" t.string "reset_password_token"
t.datetime "reset_password_sent_at" t.datetime "reset_password_sent_at"
t.datetime "remember_created_at" t.datetime "remember_created_at"
t.integer "sign_in_count", default: 0, null: false t.integer "sign_in_count", default: 0, null: false
t.datetime "current_sign_in_at" t.datetime "current_sign_in_at"
t.datetime "last_sign_in_at" t.datetime "last_sign_in_at"
t.string "current_sign_in_ip" t.string "current_sign_in_ip"
t.string "last_sign_in_ip" t.string "last_sign_in_ip"
t.datetime "created_at" t.datetime "created_at"
t.datetime "updated_at" t.datetime "updated_at"
t.string "siret" t.string "siret"
t.string "loged_in_with_france_connect", default: "false" t.string "loged_in_with_france_connect", default: "false"
t.index ["email"], name: "index_users_on_email", unique: true, using: :btree t.index ["email"], name: "index_users_on_email", unique: true
t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true, using: :btree t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true
end end
create_table "without_continuation_mails", force: :cascade do |t| create_table "without_continuation_mails", id: :serial, force: :cascade do |t|
t.text "body" t.text "body"
t.string "subject" t.string "subject"
t.integer "procedure_id" t.integer "procedure_id"
t.datetime "created_at", null: false t.datetime "created_at", null: false
t.datetime "updated_at", null: false t.datetime "updated_at", null: false
t.index ["procedure_id"], name: "index_without_continuation_mails_on_procedure_id", using: :btree t.index ["procedure_id"], name: "index_without_continuation_mails_on_procedure_id"
end end
add_foreign_key "attestation_templates", "procedures" add_foreign_key "attestation_templates", "procedures"
@ -488,7 +486,7 @@ ActiveRecord::Schema.define(version: 20180206153121) do
add_foreign_key "refused_mails", "procedures" add_foreign_key "refused_mails", "procedures"
add_foreign_key "without_continuation_mails", "procedures" add_foreign_key "without_continuation_mails", "procedures"
create_view :searches, sql_definition: <<-SQL create_view "searches", sql_definition: <<-SQL
SELECT dossiers.id AS dossier_id, SELECT dossiers.id AS dossier_id,
(((((((((((((((((((((((((((((((((((((((((((((((((((((((COALESCE(users.email, ''::character varying))::text || ' '::text) || (COALESCE(france_connect_informations.given_name, ''::character varying))::text) || ' '::text) || (COALESCE(france_connect_informations.family_name, ''::character varying))::text) || ' '::text) || (COALESCE(cerfas.content, ''::character varying))::text) || ' '::text) || (COALESCE(champs.value, ''::character varying))::text) || ' '::text) || (COALESCE(drop_down_lists.value, ''::character varying))::text) || ' '::text) || (COALESCE(entreprises.siren, ''::character varying))::text) || ' '::text) || (COALESCE(entreprises.numero_tva_intracommunautaire, ''::character varying))::text) || ' '::text) || (COALESCE(entreprises.forme_juridique, ''::character varying))::text) || ' '::text) || (COALESCE(entreprises.forme_juridique_code, ''::character varying))::text) || ' '::text) || (COALESCE(entreprises.nom_commercial, ''::character varying))::text) || ' '::text) || (COALESCE(entreprises.raison_sociale, ''::character varying))::text) || ' '::text) || (COALESCE(entreprises.siret_siege_social, ''::character varying))::text) || ' '::text) || (COALESCE(entreprises.nom, ''::character varying))::text) || ' '::text) || (COALESCE(entreprises.prenom, ''::character varying))::text) || ' '::text) || (COALESCE(rna_informations.association_id, ''::character varying))::text) || ' '::text) || (COALESCE(rna_informations.titre, ''::character varying))::text) || ' '::text) || COALESCE(rna_informations.objet, ''::text)) || ' '::text) || (COALESCE(etablissements.siret, ''::character varying))::text) || ' '::text) || (COALESCE(etablissements.naf, ''::character varying))::text) || ' '::text) || (COALESCE(etablissements.libelle_naf, ''::character varying))::text) || ' '::text) || (COALESCE(etablissements.adresse, ''::character varying))::text) || ' '::text) || (COALESCE(etablissements.code_postal, ''::character varying))::text) || ' '::text) || (COALESCE(etablissements.localite, ''::character varying))::text) || ' '::text) || (COALESCE(etablissements.code_insee_localite, ''::character varying))::text) || ' '::text) || (COALESCE(individuals.nom, ''::character varying))::text) || ' '::text) || (COALESCE(individuals.prenom, ''::character varying))::text) || ' '::text) || (COALESCE(pieces_justificatives.content, ''::character varying))::text) AS term (((((((((((((((((((((((((((((((((((((((((((((((((((((((COALESCE(users.email, ''::character varying))::text || ' '::text) || (COALESCE(france_connect_informations.given_name, ''::character varying))::text) || ' '::text) || (COALESCE(france_connect_informations.family_name, ''::character varying))::text) || ' '::text) || (COALESCE(cerfas.content, ''::character varying))::text) || ' '::text) || (COALESCE(champs.value, ''::character varying))::text) || ' '::text) || (COALESCE(drop_down_lists.value, ''::character varying))::text) || ' '::text) || (COALESCE(entreprises.siren, ''::character varying))::text) || ' '::text) || (COALESCE(entreprises.numero_tva_intracommunautaire, ''::character varying))::text) || ' '::text) || (COALESCE(entreprises.forme_juridique, ''::character varying))::text) || ' '::text) || (COALESCE(entreprises.forme_juridique_code, ''::character varying))::text) || ' '::text) || (COALESCE(entreprises.nom_commercial, ''::character varying))::text) || ' '::text) || (COALESCE(entreprises.raison_sociale, ''::character varying))::text) || ' '::text) || (COALESCE(entreprises.siret_siege_social, ''::character varying))::text) || ' '::text) || (COALESCE(entreprises.nom, ''::character varying))::text) || ' '::text) || (COALESCE(entreprises.prenom, ''::character varying))::text) || ' '::text) || (COALESCE(rna_informations.association_id, ''::character varying))::text) || ' '::text) || (COALESCE(rna_informations.titre, ''::character varying))::text) || ' '::text) || COALESCE(rna_informations.objet, ''::text)) || ' '::text) || (COALESCE(etablissements.siret, ''::character varying))::text) || ' '::text) || (COALESCE(etablissements.naf, ''::character varying))::text) || ' '::text) || (COALESCE(etablissements.libelle_naf, ''::character varying))::text) || ' '::text) || (COALESCE(etablissements.adresse, ''::character varying))::text) || ' '::text) || (COALESCE(etablissements.code_postal, ''::character varying))::text) || ' '::text) || (COALESCE(etablissements.localite, ''::character varying))::text) || ' '::text) || (COALESCE(etablissements.code_insee_localite, ''::character varying))::text) || ' '::text) || (COALESCE(individuals.nom, ''::character varying))::text) || ' '::text) || (COALESCE(individuals.prenom, ''::character varying))::text) || ' '::text) || (COALESCE(pieces_justificatives.content, ''::character varying))::text) AS term
FROM ((((((((((dossiers FROM ((((((((((dossiers

View file

@ -57,8 +57,7 @@ describe Admin::TypesDeChampController, type: :controller do
description: '', description: '',
order_place: '1', order_place: '1',
id: '', id: '',
mandatory: false, mandatory: false
type: 'TypeDeChampPublic'
} }
} }
} }
@ -148,7 +147,7 @@ describe Admin::TypesDeChampController, type: :controller do
end end
end end
context 'when procedure and type de champs are not linked' do context 'when procedure and type de champs are not linked' do
let(:type_de_champ) { create(:type_de_champ_public) } let(:type_de_champ) { create(:type_de_champ) }
let(:type_de_champ_id) { type_de_champ.id } let(:type_de_champ_id) { type_de_champ.id }
it { expect(subject.status).to eq(404) } it { expect(subject.status).to eq(404) }
end end
@ -163,20 +162,20 @@ describe Admin::TypesDeChampController, type: :controller do
end end
context 'when procedure have only one type de champ' do context 'when procedure have only one type de champ' do
let(:index) { 1 } let(:index) { 1 }
let!(:type_de_champ) { create(:type_de_champ_public, procedure: procedure) } let!(:type_de_champ) { create(:type_de_champ, procedure: procedure) }
it { expect(subject.status).to eq(400) } it { expect(subject.status).to eq(400) }
end end
context 'when procedure have tow type de champs' do context 'when procedure have tow type de champs' do
context 'when index == 0' do context 'when index == 0' do
let(:index) { 0 } let(:index) { 0 }
let!(:type_de_champ_1) { create(:type_de_champ_public, procedure: procedure) } let!(:type_de_champ_1) { create(:type_de_champ, procedure: procedure) }
let!(:type_de_champ_2) { create(:type_de_champ_public, procedure: procedure) } let!(:type_de_champ_2) { create(:type_de_champ, procedure: procedure) }
it { expect(subject.status).to eq(400) } it { expect(subject.status).to eq(400) }
end end
context 'when index > 0' do context 'when index > 0' do
let(:index) { 1 } let(:index) { 1 }
let!(:type_de_champ_0) { create(:type_de_champ_public, procedure: procedure, order_place: 0) } let!(:type_de_champ_0) { create(:type_de_champ, procedure: procedure, order_place: 0) }
let!(:type_de_champ_1) { create(:type_de_champ_public, procedure: procedure, order_place: 1) } let!(:type_de_champ_1) { create(:type_de_champ, procedure: procedure, order_place: 1) }
it { expect(subject.status).to eq(200) } it { expect(subject.status).to eq(200) }
it { expect(subject).to render_template('show') } it { expect(subject).to render_template('show') }
@ -201,12 +200,12 @@ describe Admin::TypesDeChampController, type: :controller do
it { expect(subject.status).to eq(400) } it { expect(subject.status).to eq(400) }
end end
context 'when procedure have only one type de champ' do context 'when procedure have only one type de champ' do
let!(:type_de_champ_0) { create(:type_de_champ_public, procedure: procedure) } let!(:type_de_champ_0) { create(:type_de_champ, procedure: procedure) }
it { expect(subject.status).to eq(400) } it { expect(subject.status).to eq(400) }
end end
context 'when procedure have 2 type de champ' do context 'when procedure have 2 type de champ' do
let!(:type_de_champ_0) { create(:type_de_champ_public, procedure: procedure, order_place: 0) } let!(:type_de_champ_0) { create(:type_de_champ, procedure: procedure, order_place: 0) }
let!(:type_de_champ_1) { create(:type_de_champ_public, procedure: procedure, order_place: 1) } let!(:type_de_champ_1) { create(:type_de_champ, procedure: procedure, order_place: 1) }
context 'when index represent last type_de_champ' do context 'when index represent last type_de_champ' do
let(:index) { 1 } let(:index) { 1 }
it { expect(subject.status).to eq(400) } it { expect(subject.status).to eq(400) }

View file

@ -49,8 +49,7 @@ describe Admin::TypesDeChampPrivateController, type: :controller do
description: description, description: description,
order_place: order_place, order_place: order_place,
id: types_de_champ_id, id: types_de_champ_id,
mandatory: mandatory, mandatory: mandatory
type: 'TypeDeChampPrivate'
}, },
'1' => { '1' => {
libelle: '', libelle: '',
@ -58,8 +57,7 @@ describe Admin::TypesDeChampPrivateController, type: :controller do
description: '', description: '',
order_place: '1', order_place: '1',
id: '', id: '',
mandatory: false, mandatory: false
type: 'TypeDeChampPrivate'
} }
} }
} }
@ -131,7 +129,7 @@ describe Admin::TypesDeChampPrivateController, type: :controller do
end end
end end
context 'when procedure and type de champs are not linked' do context 'when procedure and type de champs are not linked' do
let(:type_de_champ) { create(:type_de_champ_public) } let(:type_de_champ) { create(:type_de_champ) }
let(:type_de_champ_id) { type_de_champ.id } let(:type_de_champ_id) { type_de_champ.id }
it { expect(subject.status).to eq(404) } it { expect(subject.status).to eq(404) }
end end
@ -146,20 +144,20 @@ describe Admin::TypesDeChampPrivateController, type: :controller do
end end
context 'when procedure have only one type de champ' do context 'when procedure have only one type de champ' do
let(:index) { 1 } let(:index) { 1 }
let!(:type_de_champ) { create(:type_de_champ_private, procedure: procedure) } let!(:type_de_champ) { create(:type_de_champ, :private, procedure: procedure) }
it { expect(subject.status).to eq(400) } it { expect(subject.status).to eq(400) }
end end
context 'when procedure have tow type de champs' do context 'when procedure have tow type de champs' do
context 'when index == 0' do context 'when index == 0' do
let(:index) { 0 } let(:index) { 0 }
let!(:type_de_champ_1) { create(:type_de_champ_private, procedure: procedure) } let!(:type_de_champ_1) { create(:type_de_champ, :private, procedure: procedure) }
let!(:type_de_champ_2) { create(:type_de_champ_private, procedure: procedure) } let!(:type_de_champ_2) { create(:type_de_champ, :private, procedure: procedure) }
it { expect(subject.status).to eq(400) } it { expect(subject.status).to eq(400) }
end end
context 'when index > 0' do context 'when index > 0' do
let(:index) { 1 } let(:index) { 1 }
let!(:type_de_champ_0) { create(:type_de_champ_private, procedure: procedure, order_place: 0) } let!(:type_de_champ_0) { create(:type_de_champ, :private, procedure: procedure, order_place: 0) }
let!(:type_de_champ_1) { create(:type_de_champ_private, procedure: procedure, order_place: 1) } let!(:type_de_champ_1) { create(:type_de_champ, :private, procedure: procedure, order_place: 1) }
it { expect(subject.status).to eq(200) } it { expect(subject.status).to eq(200) }
it { expect(subject).to render_template('show') } it { expect(subject).to render_template('show') }
@ -184,12 +182,12 @@ describe Admin::TypesDeChampPrivateController, type: :controller do
it { expect(subject.status).to eq(400) } it { expect(subject.status).to eq(400) }
end end
context 'when procedure have only one type de champ' do context 'when procedure have only one type de champ' do
let!(:type_de_champ_0) { create(:type_de_champ_private, procedure: procedure) } let!(:type_de_champ_0) { create(:type_de_champ, :private, procedure: procedure) }
it { expect(subject.status).to eq(400) } it { expect(subject.status).to eq(400) }
end end
context 'when procedure have 2 type de champ' do context 'when procedure have 2 type de champ' do
let!(:type_de_champ_0) { create(:type_de_champ_private, procedure: procedure, order_place: 0) } let!(:type_de_champ_0) { create(:type_de_champ, :private, procedure: procedure, order_place: 0) }
let!(:type_de_champ_1) { create(:type_de_champ_private, procedure: procedure, order_place: 1) } let!(:type_de_champ_1) { create(:type_de_champ, :private, procedure: procedure, order_place: 1) }
context 'when index represent last type_de_champ' do context 'when index represent last type_de_champ' do
let(:index) { 1 } let(:index) { 1 }
it { expect(subject.status).to eq(400) } it { expect(subject.status).to eq(400) }

View file

@ -355,13 +355,11 @@ describe NewGestionnaire::DossiersController, type: :controller do
describe "#update_annotations" do describe "#update_annotations" do
let(:champ_multiple_drop_down_list) do let(:champ_multiple_drop_down_list) do
type_de_champ = TypeDeChamp.create(type_champ: 'multiple_drop_down_list', libelle: 'libelle') create(:type_de_champ, :private, type_champ: 'multiple_drop_down_list', libelle: 'libelle').champ.create
ChampPrivate.create(type_de_champ: type_de_champ)
end end
let(:champ_datetime) do let(:champ_datetime) do
type_de_champ = TypeDeChamp.create(type_champ: 'datetime', libelle: 'libelle') create(:type_de_champ, :private, type_champ: 'datetime', libelle: 'libelle').champ.create
ChampPrivate.create(type_de_champ: type_de_champ)
end end
let(:dossier) do let(:dossier) do

View file

@ -1,7 +1,8 @@
require 'spec_helper' require 'spec_helper'
describe ChampDecorator do describe ChampDecorator do
let(:champ) { create :champ, type_de_champ: (create :type_de_champ_public, type_champ: type_champ) } let(:type_de_champ) { create(:type_de_champ, type_champ: type_champ) }
let(:champ) { type_de_champ.champ.create }
let(:decorator) { champ.decorate } let(:decorator) { champ.decorate }
describe 'value' do describe 'value' do

View file

@ -4,9 +4,9 @@ describe TypeDeChampDecorator do
let(:procedure) { create(:procedure) } let(:procedure) { create(:procedure) }
let(:url) { 'http://localhost' } let(:url) { 'http://localhost' }
let(:params) { { url: url, index: index } } let(:params) { { url: url, index: index } }
let!(:type_de_champ_0) { create(:type_de_champ_public, procedure: procedure, order_place: 0) } let!(:type_de_champ_0) { create(:type_de_champ, procedure: procedure, order_place: 0) }
let!(:type_de_champ_1) { create(:type_de_champ_public, procedure: procedure, order_place: 1) } let!(:type_de_champ_1) { create(:type_de_champ, procedure: procedure, order_place: 1) }
let!(:type_de_champ_2) { create(:type_de_champ_public, procedure: procedure, order_place: 2) } let!(:type_de_champ_2) { create(:type_de_champ, procedure: procedure, order_place: 2) }
describe '#button_up' do describe '#button_up' do
describe 'with first piece justificative' do describe 'with first piece justificative' do

View file

@ -1,21 +1,21 @@
FactoryBot.define do FactoryBot.define do
factory :champ do factory :champ do
type_de_champ { FactoryBot.create(:type_de_champ_public) } type_de_champ { FactoryBot.create(:type_de_champ) }
trait :checkbox do trait :checkbox do
type_de_champ { FactoryBot.create(:type_de_champ_public, :checkbox) } type_de_champ { FactoryBot.create(:type_de_champ, :checkbox) }
end end
trait :header_section do trait :header_section do
type_de_champ { FactoryBot.create(:type_de_champ_public, :header_section) } type_de_champ { FactoryBot.create(:type_de_champ, :header_section) }
end end
trait :explication do trait :explication do
type_de_champ { FactoryBot.create(:type_de_champ_public, :explication) } type_de_champ { FactoryBot.create(:type_de_champ, :explication) }
end end
trait :dossier_link do trait :dossier_link do
type_de_champ { FactoryBot.create(:type_de_champ_public, :type_dossier_link) } type_de_champ { FactoryBot.create(:type_de_champ, :type_dossier_link) }
end end
end end
end end

View file

@ -36,7 +36,7 @@ FactoryBot.define do
after(:build) do |procedure, evaluator| after(:build) do |procedure, evaluator|
evaluator.types_de_champ_count.times do evaluator.types_de_champ_count.times do
type_de_champ = create(:type_de_champ_public) type_de_champ = create(:type_de_champ)
procedure.types_de_champ << type_de_champ procedure.types_de_champ << type_de_champ
end end
@ -50,7 +50,7 @@ FactoryBot.define do
after(:build) do |procedure, evaluator| after(:build) do |procedure, evaluator|
evaluator.types_de_champ_private_count.times do evaluator.types_de_champ_private_count.times do
type_de_champ = create(:type_de_champ_private) type_de_champ = create(:type_de_champ, :private)
procedure.types_de_champ_private << type_de_champ procedure.types_de_champ_private << type_de_champ
end end
@ -59,7 +59,7 @@ FactoryBot.define do
trait :with_type_de_champ_mandatory do trait :with_type_de_champ_mandatory do
after(:build) do |procedure, _evaluator| after(:build) do |procedure, _evaluator|
type_de_champ = create(:type_de_champ_public, mandatory: true) type_de_champ = create(:type_de_champ, mandatory: true)
procedure.types_de_champ << type_de_champ procedure.types_de_champ << type_de_champ
end end
@ -67,7 +67,7 @@ FactoryBot.define do
trait :with_datetime do trait :with_datetime do
after(:build) do |procedure, _evaluator| after(:build) do |procedure, _evaluator|
type_de_champ = create(:type_de_champ_public, mandatory: true, type_champ: :datetime) type_de_champ = create(:type_de_champ, mandatory: true, type_champ: :datetime)
procedure.types_de_champ << type_de_champ procedure.types_de_champ << type_de_champ
end end
@ -75,7 +75,7 @@ FactoryBot.define do
trait :with_dossier_link do trait :with_dossier_link do
after(:build) do |procedure, _evaluator| after(:build) do |procedure, _evaluator|
type_de_champ = create(:type_de_champ_public, :type_dossier_link) type_de_champ = create(:type_de_champ, :type_dossier_link)
procedure.types_de_champ << type_de_champ procedure.types_de_champ << type_de_champ
end end
@ -83,7 +83,7 @@ FactoryBot.define do
trait :with_yes_no do trait :with_yes_no do
after(:build) do |procedure, _evaluator| after(:build) do |procedure, _evaluator|
type_de_champ = create(:type_de_champ_public, :type_yes_no) type_de_champ = create(:type_de_champ, :type_yes_no)
procedure.types_de_champ << type_de_champ procedure.types_de_champ << type_de_champ
end end

View file

@ -1,5 +1,6 @@
FactoryBot.define do FactoryBot.define do
factory :type_de_champ_public do factory :type_de_champ do
private false
sequence(:libelle) { |n| "Libelle du champ #{n}" } sequence(:libelle) { |n| "Libelle du champ #{n}" }
sequence(:description) { |n| "description du champ #{n}" } sequence(:description) { |n| "description du champ #{n}" }
type_champ 'text' type_champ 'text'
@ -33,5 +34,11 @@ FactoryBot.define do
type_champ 'drop_down_list' type_champ 'drop_down_list'
drop_down_list { create(:drop_down_list) } drop_down_list { create(:drop_down_list) }
end end
trait :private do
private true
sequence(:libelle) { |n| "Libelle champ privé #{n}" }
sequence(:description) { |n| "description du champ privé #{n}" }
end
end end
end end

View file

@ -1,15 +0,0 @@
FactoryBot.define do
factory :type_de_champ_private do
sequence(:libelle) { |n| "Libelle champ privé #{n}" }
sequence(:description) { |n| "description du champ privé #{n}" }
type_champ 'text'
order_place 1
mandatory false
trait :type_drop_down_list do
libelle 'Menu déroulant'
type_champ 'drop_down_list'
drop_down_list { create(:drop_down_list) }
end
end
end

View file

@ -8,10 +8,10 @@ feature 'move down button type de champs', js: true do
end end
let(:procedure) { create(:procedure, administrateur: administrateur) } let(:procedure) { create(:procedure, administrateur: administrateur) }
let!(:type_de_champ_0) { create(:type_de_champ_private, procedure: procedure, order_place: 0) } let!(:type_de_champ_0) { create(:type_de_champ, :private, procedure: procedure, order_place: 0) }
let!(:type_de_champ_1) { create(:type_de_champ_private, procedure: procedure, order_place: 1) } let!(:type_de_champ_1) { create(:type_de_champ, :private, procedure: procedure, order_place: 1) }
let!(:type_de_champ_2) { create(:type_de_champ_private, procedure: procedure, order_place: 2) } let!(:type_de_champ_2) { create(:type_de_champ, :private, procedure: procedure, order_place: 2) }
let!(:type_de_champ_3) { create(:type_de_champ_private, procedure: procedure, order_place: 3) } let!(:type_de_champ_3) { create(:type_de_champ, :private, procedure: procedure, order_place: 3) }
context 'when clicking on move down for type de champ 1' do context 'when clicking on move down for type de champ 1' do
before do before do

View file

@ -8,10 +8,10 @@ feature 'move down button type de champs', js: true do
end end
let(:procedure) { create(:procedure, administrateur: administrateur) } let(:procedure) { create(:procedure, administrateur: administrateur) }
let!(:type_de_champ_0) { create(:type_de_champ_public, procedure: procedure, order_place: 0) } let!(:type_de_champ_0) { create(:type_de_champ, procedure: procedure, order_place: 0) }
let!(:type_de_champ_1) { create(:type_de_champ_public, procedure: procedure, order_place: 1) } let!(:type_de_champ_1) { create(:type_de_champ, procedure: procedure, order_place: 1) }
let!(:type_de_champ_2) { create(:type_de_champ_public, procedure: procedure, order_place: 2) } let!(:type_de_champ_2) { create(:type_de_champ, procedure: procedure, order_place: 2) }
let!(:type_de_champ_3) { create(:type_de_champ_public, procedure: procedure, order_place: 3) } let!(:type_de_champ_3) { create(:type_de_champ, procedure: procedure, order_place: 3) }
context 'when clicking on move down for type de champ 1' do context 'when clicking on move down for type de champ 1' do
before do before do

View file

@ -8,10 +8,10 @@ feature 'move up button type de champs', js: true do
end end
let(:procedure) { create(:procedure, administrateur: administrateur) } let(:procedure) { create(:procedure, administrateur: administrateur) }
let!(:type_de_champ_0) { create(:type_de_champ_private, procedure: procedure, order_place: 0) } let!(:type_de_champ_0) { create(:type_de_champ, :private, procedure: procedure, order_place: 0) }
let!(:type_de_champ_1) { create(:type_de_champ_private, procedure: procedure, order_place: 1) } let!(:type_de_champ_1) { create(:type_de_champ, :private, procedure: procedure, order_place: 1) }
let!(:type_de_champ_2) { create(:type_de_champ_private, procedure: procedure, order_place: 2) } let!(:type_de_champ_2) { create(:type_de_champ, :private, procedure: procedure, order_place: 2) }
let!(:type_de_champ_3) { create(:type_de_champ_private, procedure: procedure, order_place: 3) } let!(:type_de_champ_3) { create(:type_de_champ, :private, procedure: procedure, order_place: 3) }
context 'when clicking on move down for type de champ 1' do context 'when clicking on move down for type de champ 1' do
before do before do

View file

@ -8,10 +8,10 @@ feature 'move up button type de champs', js: true do
end end
let(:procedure) { create(:procedure, administrateur: administrateur) } let(:procedure) { create(:procedure, administrateur: administrateur) }
let!(:type_de_champ_0) { create(:type_de_champ_public, procedure: procedure, order_place: 0) } let!(:type_de_champ_0) { create(:type_de_champ, procedure: procedure, order_place: 0) }
let!(:type_de_champ_1) { create(:type_de_champ_public, procedure: procedure, order_place: 1) } let!(:type_de_champ_1) { create(:type_de_champ, procedure: procedure, order_place: 1) }
let!(:type_de_champ_2) { create(:type_de_champ_public, procedure: procedure, order_place: 2) } let!(:type_de_champ_2) { create(:type_de_champ, procedure: procedure, order_place: 2) }
let!(:type_de_champ_3) { create(:type_de_champ_public, procedure: procedure, order_place: 3) } let!(:type_de_champ_3) { create(:type_de_champ, procedure: procedure, order_place: 3) }
context 'when clicking on move down for type de champ 1' do context 'when clicking on move down for type de champ 1' do
before do before do

View file

@ -6,7 +6,7 @@ feature 'users: flux de commentaires' do
let(:dossier_id) { dossier.id } let(:dossier_id) { dossier.id }
let(:champ1) { dossier.champs.first } let(:champ1) { dossier.champs.first }
let(:champ2) { create(:champ, dossier: dossier, type_de_champ: create(:type_de_champ_public, libelle: "subtitle")) } let(:champ2) { create(:champ, dossier: dossier, type_de_champ: create(:type_de_champ, libelle: "subtitle")) }
let!(:commentaire1) { create(:commentaire, dossier: dossier, champ: champ1) } let!(:commentaire1) { create(:commentaire, dossier: dossier, champ: champ1) }
let!(:commentaire2) { create(:commentaire, dossier: dossier) } let!(:commentaire2) { create(:commentaire, dossier: dossier) }

View file

@ -4,7 +4,7 @@ RSpec.describe FindDubiousProceduresJob, type: :job do
describe 'perform' do describe 'perform' do
let(:mailer_double) { double('mailer', deliver_now: true) } let(:mailer_double) { double('mailer', deliver_now: true) }
let(:procedure) { create(:procedure) } let(:procedure) { create(:procedure) }
let(:allowed_tdc) { create(:type_de_champ_public, libelle: 'fournir') } let(:allowed_tdc) { create(:type_de_champ, libelle: 'fournir') }
before do before do
allow(AdministrationMailer).to receive(:dubious_procedures) allow(AdministrationMailer).to receive(:dubious_procedures)
@ -17,8 +17,8 @@ RSpec.describe FindDubiousProceduresJob, type: :job do
context 'with suspicious champs' do context 'with suspicious champs' do
let(:forbidden_tdcs) do let(:forbidden_tdcs) do
[ [
create(:type_de_champ_public, libelle: 'num de securite sociale, stp'), create(:type_de_champ, libelle: 'num de securite sociale, stp'),
create(:type_de_champ_public, libelle: "t'aurais une carte bancaire ?") create(:type_de_champ, libelle: "t'aurais une carte bancaire ?")
] ]
end end

View file

@ -149,8 +149,8 @@ describe AttestationTemplate, type: :model do
context 'when the procedure has a type de champ named libelleA et libelleB' do context 'when the procedure has a type de champ named libelleA et libelleB' do
let(:types_de_champ) do let(:types_de_champ) do
[ [
create(:type_de_champ_public, libelle: 'libelleA'), create(:type_de_champ, libelle: 'libelleA'),
create(:type_de_champ_public, libelle: 'libelleB') create(:type_de_champ, libelle: 'libelleB')
] ]
end end

View file

@ -1,7 +1,11 @@
require 'spec_helper' require 'spec_helper'
describe ChampPrivate do describe Champ do
require 'models/champ_shared_example.rb' describe '#private?' do
let(:type_de_champ) { build(:type_de_champ, :private) }
let(:champ) { type_de_champ.champ.build }
it_should_behave_like "champ_spec" it { expect(champ.private?).to be_truthy }
it { expect(champ.public?).to be_falsey }
end
end end

View file

@ -1,7 +0,0 @@
require 'spec_helper'
describe ChampPublic do
require 'models/champ_shared_example.rb'
it_should_behave_like "champ_spec"
end

View file

@ -1,7 +1,7 @@
shared_examples 'champ_spec' do shared_examples 'champ_spec' do
describe 'mandatory_and_blank?' do describe 'mandatory_and_blank?' do
let(:type_de_champ) { TypeDeChamp.new(mandatory: mandatory) } let(:type_de_champ) { build(:type_de_champ, mandatory: mandatory) }
let(:champ) { Champ.new(type_de_champ: type_de_champ, value: value) } let(:champ) { type_de_champ.champ.build(value: value) }
let(:value) { '' } let(:value) { '' }
let(:mandatory) { true } let(:mandatory) { true }
@ -33,8 +33,8 @@ shared_examples 'champ_spec' do
end end
context "when type_champ=date" do context "when type_champ=date" do
let(:type_de_champ) { create(:type_de_champ_public, type_champ: "date") } let(:type_de_champ) { create(:type_de_champ, type_champ: "date") }
let(:champ) { create(:champ, type_de_champ: type_de_champ) } let(:champ) { type_de_champ.champ.create }
it "should convert %d/%m/%Y format to ISO" do it "should convert %d/%m/%Y format to ISO" do
champ.value = "31/12/2017" champ.value = "31/12/2017"

View file

@ -5,9 +5,17 @@ describe Champ do
it_should_behave_like "champ_spec" it_should_behave_like "champ_spec"
describe '#public?' do
let(:type_de_champ) { build(:type_de_champ) }
let(:champ) { type_de_champ.champ.build }
it { expect(champ.public?).to be_truthy }
it { expect(champ.private?).to be_falsey }
end
describe '#format_datetime' do describe '#format_datetime' do
let(:type_de_champ) { TypeDeChamp.new(type_champ: 'datetime') } let(:type_de_champ) { build(:type_de_champ, type_champ: 'datetime') }
let(:champ) { Champ.new(type_de_champ: type_de_champ, value: value) } let(:champ) { type_de_champ.champ.build(value: value) }
before { champ.save } before { champ.save }
@ -25,8 +33,8 @@ describe Champ do
end end
describe '#multiple_select_to_string' do describe '#multiple_select_to_string' do
let(:type_de_champ) { TypeDeChamp.new(type_champ: 'multiple_drop_down_list') } let(:type_de_champ) { build(:type_de_champ, type_champ: 'multiple_drop_down_list') }
let(:champ) { Champ.new(type_de_champ: type_de_champ, value: value) } let(:champ) { type_de_champ.champ.build(value: value) }
before { champ.save } before { champ.save }
@ -63,8 +71,8 @@ describe Champ do
end end
describe 'for_export' do describe 'for_export' do
let(:type_de_champ) { create(:type_de_champ_public, type_champ: type_champ) } let(:type_de_champ) { create(:type_de_champ, type_champ: type_champ) }
let(:champ) { Champ.new(type_de_champ: type_de_champ, value: value) } let(:champ) { type_de_champ.champ.build(value: value) }
before { champ.save } before { champ.save }

View file

@ -71,8 +71,8 @@ describe TagsSubstitutionConcern, type: :model do
context 'when the procedure has a type de champ named libelleA et libelleB' do context 'when the procedure has a type de champ named libelleA et libelleB' do
let(:types_de_champ) do let(:types_de_champ) do
[ [
create(:type_de_champ_public, libelle: 'libelleA'), create(:type_de_champ, libelle: 'libelleA'),
create(:type_de_champ_public, libelle: 'libelleB') create(:type_de_champ, libelle: 'libelleB')
] ]
end end
@ -123,7 +123,7 @@ describe TagsSubstitutionConcern, type: :model do
end end
context 'when the procedure has a type de champ prive named libelleA' do context 'when the procedure has a type de champ prive named libelleA' do
let(:types_de_champ_private) { [create(:type_de_champ_private, libelle: 'libelleA')] } let(:types_de_champ_private) { [create(:type_de_champ, :private, libelle: 'libelleA')] }
context 'and it is used in the template' do context 'and it is used in the template' do
let(:template) { '--libelleA--' } let(:template) { '--libelleA--' }
@ -144,13 +144,13 @@ describe TagsSubstitutionConcern, type: :model do
# The dossier just transitionned from brouillon to en construction, # The dossier just transitionned from brouillon to en construction,
# so champs private are not valid tags yet # so champs private are not valid tags yet
let(:types_de_champ_private) { [create(:type_de_champ_private, libelle: 'libelleA')] } let(:types_de_champ_private) { [create(:type_de_champ, :private, libelle: 'libelleA')] }
it { is_expected.to eq('--libelleA--') } it { is_expected.to eq('--libelleA--') }
end end
context 'champs publics are valid tags' do context 'champs publics are valid tags' do
let(:types_de_champ) { [create(:type_de_champ_public, libelle: 'libelleA')] } let(:types_de_champ) { [create(:type_de_champ, libelle: 'libelleA')] }
before { dossier.champs.first.update_attributes(value: 'libelle1') } before { dossier.champs.first.update_attributes(value: 'libelle1') }
@ -161,8 +161,8 @@ describe TagsSubstitutionConcern, type: :model do
context 'when the procedure has 2 types de champ date and datetime' do context 'when the procedure has 2 types de champ date and datetime' do
let(:types_de_champ) do let(:types_de_champ) do
[ [
create(:type_de_champ_public, libelle: 'date', type_champ: 'date'), create(:type_de_champ, libelle: 'date', type_champ: 'date'),
create(:type_de_champ_public, libelle: 'datetime', type_champ: 'datetime') create(:type_de_champ, libelle: 'datetime', type_champ: 'datetime')
] ]
end end
@ -224,13 +224,13 @@ describe TagsSubstitutionConcern, type: :model do
shared_examples "treat all kinds of space as equivalent" do shared_examples "treat all kinds of space as equivalent" do
context 'and the champ has a non breaking space' do context 'and the champ has a non breaking space' do
let(:types_de_champ) { [create(:type_de_champ_public, libelle: 'mon tag')] } let(:types_de_champ) { [create(:type_de_champ, libelle: 'mon tag')] }
it { is_expected.to eq('valeur') } it { is_expected.to eq('valeur') }
end end
context 'and the champ has an ordinary space' do context 'and the champ has an ordinary space' do
let(:types_de_champ) { [create(:type_de_champ_public, libelle: 'mon tag')] } let(:types_de_champ) { [create(:type_de_champ, libelle: 'mon tag')] }
it { is_expected.to eq('valeur') } it { is_expected.to eq('valeur') }
end end
@ -265,8 +265,8 @@ describe TagsSubstitutionConcern, type: :model do
describe 'tags' do describe 'tags' do
subject { template_concern.tags } subject { template_concern.tags }
let(:types_de_champ) { [create(:type_de_champ_public, libelle: 'public')] } let(:types_de_champ) { [create(:type_de_champ, libelle: 'public')] }
let(:types_de_champ_private) { [create(:type_de_champ_private, libelle: 'privé')] } let(:types_de_champ_private) { [create(:type_de_champ, :private, libelle: 'privé')] }
context 'when generating a document for a dossier terminé' do context 'when generating a document for a dossier terminé' do
it { is_expected.to include(include({ libelle: 'motivation' })) } it { is_expected.to include(include({ libelle: 'motivation' })) }

View file

@ -349,9 +349,9 @@ describe Dossier do
let(:dossier) { Dossier.create(user: create(:user), procedure: procedure) } let(:dossier) { Dossier.create(user: create(:user), procedure: procedure) }
before do before do
create(:type_de_champ_public, libelle: 'l1', order_place: 1, procedure: procedure) create(:type_de_champ, libelle: 'l1', order_place: 1, procedure: procedure)
create(:type_de_champ_public, libelle: 'l3', order_place: 3, procedure: procedure) create(:type_de_champ, libelle: 'l3', order_place: 3, procedure: procedure)
create(:type_de_champ_public, libelle: 'l2', order_place: 2, procedure: procedure) create(:type_de_champ, libelle: 'l2', order_place: 2, procedure: procedure)
end end
it { expect(dossier.ordered_champs.pluck(:libelle)).to match(%w(l1 l2 l3)) } it { expect(dossier.ordered_champs.pluck(:libelle)).to match(%w(l1 l2 l3)) }
@ -362,9 +362,9 @@ describe Dossier do
let(:dossier) { Dossier.create(user: create(:user), procedure: procedure) } let(:dossier) { Dossier.create(user: create(:user), procedure: procedure) }
before do before do
create :type_de_champ_private, libelle: 'l1', order_place: 1, procedure: procedure create :type_de_champ, :private, libelle: 'l1', order_place: 1, procedure: procedure
create :type_de_champ_private, libelle: 'l3', order_place: 3, procedure: procedure create :type_de_champ, :private, libelle: 'l3', order_place: 3, procedure: procedure
create :type_de_champ_private, libelle: 'l2', order_place: 2, procedure: procedure create :type_de_champ, :private, libelle: 'l2', order_place: 2, procedure: procedure
end end
it { expect(dossier.ordered_champs_private.pluck(:libelle)).to match(%w(l1 l2 l3)) } it { expect(dossier.ordered_champs_private.pluck(:libelle)).to match(%w(l1 l2 l3)) }

View file

@ -47,16 +47,16 @@ describe DropDownList do
end end
context 'when multiple' do context 'when multiple' do
let(:type_de_champ) { TypeDeChamp.new(type_champ: 'multiple_drop_down_list') } let(:type_de_champ) { build(:type_de_champ, type_champ: 'multiple_drop_down_list') }
let(:champ) { type_de_champ.champ.build(value: '["1","2"]').decorate }
let(:champ) { Champ.new(value: '["1","2"]').decorate }
it { expect(dropdownlist.selected_options(champ)).to match(['1', '2']) } it { expect(dropdownlist.selected_options(champ)).to match(['1', '2']) }
end end
context 'when simple' do context 'when simple' do
let(:type_de_champ) { TypeDeChamp.new(type_champ: 'drop_down_list') } let(:type_de_champ) { build(:type_de_champ, type_champ: 'drop_down_list') }
let(:champ) { type_de_champ.champ.build(value: '1').decorate }
let(:champ) { Champ.new(value: '1').decorate }
it { expect(dropdownlist.selected_options(champ)).to match(['1']) } it { expect(dropdownlist.selected_options(champ)).to match(['1']) }
end end
end end

View file

@ -69,8 +69,8 @@ describe Procedure do
describe '#types_de_champ_ordered' do describe '#types_de_champ_ordered' do
let(:procedure) { create(:procedure) } let(:procedure) { create(:procedure) }
let!(:type_de_champ_0) { create(:type_de_champ_public, procedure: procedure, order_place: 1) } let!(:type_de_champ_0) { create(:type_de_champ, procedure: procedure, order_place: 1) }
let!(:type_de_champ_1) { create(:type_de_champ_public, procedure: procedure, order_place: 0) } let!(:type_de_champ_1) { create(:type_de_champ, procedure: procedure, order_place: 0) }
subject { procedure.types_de_champ_ordered } subject { procedure.types_de_champ_ordered }
it { expect(subject.first).to eq(type_de_champ_1) } it { expect(subject.first).to eq(type_de_champ_1) }
it { expect(subject.last).to eq(type_de_champ_0) } it { expect(subject.last).to eq(type_de_champ_0) }
@ -85,8 +85,8 @@ describe Procedure do
it { expect(subject).to eq(false) } it { expect(subject).to eq(false) }
end end
context 'when procedure have 2 types de champ' do context 'when procedure have 2 types de champ' do
let!(:type_de_champ_0) { create(:type_de_champ_public, procedure: procedure, order_place: 0) } let!(:type_de_champ_0) { create(:type_de_champ, procedure: procedure, order_place: 0) }
let!(:type_de_champ_1) { create(:type_de_champ_public, procedure: procedure, order_place: 1) } let!(:type_de_champ_1) { create(:type_de_champ, procedure: procedure, order_place: 1) }
context 'when index is not the last element' do context 'when index is not the last element' do
it { expect(subject).to eq(true) } it { expect(subject).to eq(true) }
it 'switch order place' do it 'switch order place' do
@ -153,12 +153,12 @@ describe Procedure do
let(:archived_at) { nil } let(:archived_at) { nil }
let(:published_at) { nil } let(:published_at) { nil }
let(:procedure) { create(:procedure, archived_at: archived_at, published_at: published_at, received_mail: received_mail) } let(:procedure) { create(:procedure, archived_at: archived_at, published_at: published_at, received_mail: received_mail) }
let!(:type_de_champ_0) { create(:type_de_champ_public, procedure: procedure, order_place: 0) } let!(:type_de_champ_0) { create(:type_de_champ, procedure: procedure, order_place: 0) }
let!(:type_de_champ_1) { create(:type_de_champ_public, procedure: procedure, order_place: 1) } let!(:type_de_champ_1) { create(:type_de_champ, procedure: procedure, order_place: 1) }
let!(:type_de_champ_2) { create(:type_de_champ_public, :type_drop_down_list, procedure: procedure, order_place: 2) } let!(:type_de_champ_2) { create(:type_de_champ, :type_drop_down_list, procedure: procedure, order_place: 2) }
let!(:type_de_champ_private_0) { create(:type_de_champ_private, procedure: procedure, order_place: 0) } let!(:type_de_champ_private_0) { create(:type_de_champ, :private, procedure: procedure, order_place: 0) }
let!(:type_de_champ_private_1) { create(:type_de_champ_private, procedure: procedure, order_place: 1) } let!(:type_de_champ_private_1) { create(:type_de_champ, :private, procedure: procedure, order_place: 1) }
let!(:type_de_champ_private_2) { create(:type_de_champ_private, :type_drop_down_list, procedure: procedure, order_place: 2) } let!(:type_de_champ_private_2) { create(:type_de_champ, :private, :type_drop_down_list, procedure: procedure, order_place: 2) }
let!(:piece_justificative_0) { create(:type_de_piece_justificative, procedure: procedure, order_place: 0) } let!(:piece_justificative_0) { create(:type_de_piece_justificative, procedure: procedure, order_place: 0) }
let!(:piece_justificative_1) { create(:type_de_piece_justificative, procedure: procedure, order_place: 1) } let!(:piece_justificative_1) { create(:type_de_piece_justificative, procedure: procedure, order_place: 1) }
let(:received_mail){ create(:received_mail) } let(:received_mail){ create(:received_mail) }
@ -342,10 +342,10 @@ describe Procedure do
it { expect(subject[:headers]).to eq(dossier.export_headers) } it { expect(subject[:headers]).to eq(dossier.export_headers) }
context 'with ordered champs' do context 'with ordered champs' do
let(:tc_2) { create(:type_de_champ_public, order_place: 2) } let(:tc_2) { create(:type_de_champ, order_place: 2) }
let(:tc_1) { create(:type_de_champ_public, order_place: 1) } let(:tc_1) { create(:type_de_champ, order_place: 1) }
let(:tcp_2) { create(:type_de_champ_private, order_place: 2) } let(:tcp_2) { create(:type_de_champ, :private, order_place: 2) }
let(:tcp_1) { create(:type_de_champ_private, order_place: 1) } let(:tcp_1) { create(:type_de_champ, :private, order_place: 1) }
before do before do
procedure.types_de_champ << tc_2 << tc_1 procedure.types_de_champ << tc_2 << tc_1

View file

@ -1,7 +1,10 @@
require 'spec_helper' require 'spec_helper'
describe TypeDeChampPrivate do describe TypeDeChamp do
require 'models/type_de_champ_shared_example' describe '#private?' do
let(:type_de_champ) { build(:type_de_champ, :private) }
it_should_behave_like "type_de_champ_spec" it { expect(type_de_champ.private?).to be_truthy }
it { expect(type_de_champ.public?).to be_falsey }
end
end end

View file

@ -1,7 +0,0 @@
require 'spec_helper'
describe TypeDeChampPublic do
require 'models/type_de_champ_shared_example'
it_should_behave_like "type_de_champ_spec"
end

View file

@ -29,14 +29,4 @@ shared_examples 'type_de_champ_spec' do
it { is_expected.to allow_value('blabla').for(:description) } it { is_expected.to allow_value('blabla').for(:description) }
end end
end end
describe 'field_for_list?' do
let(:type_de_champ_yes) { create :type_de_champ_public, type_champ: 'text' }
let(:type_de_champ_no_1) { create :type_de_champ_public, type_champ: 'textarea' }
let(:type_de_champ_no_2) { create :type_de_champ_public, type_champ: 'header_section' }
it { expect(type_de_champ_yes.field_for_list?).to be_truthy }
it { expect(type_de_champ_no_1.field_for_list?).to be_falsey }
it { expect(type_de_champ_no_2.field_for_list?).to be_falsey }
end
end end

View file

@ -1,12 +1,12 @@
require 'spec_helper' require 'spec_helper'
describe ChampsService do describe ChampsService do
let!(:champ) { Champ.create(value: 'toto', type_de_champ: TypeDeChamp.new) } let(:type_de_champ) { create(:type_de_champ) }
let!(:champ_mandatory_empty) { Champ.create(type_de_champ: TypeDeChamp.new(libelle: 'mandatory', mandatory: true)) } let(:type_de_champ_mandatory) { create(:type_de_champ, libelle: 'mandatory', mandatory: true) }
let!(:champ_datetime) do let(:type_de_champ_datetime) { create(:type_de_champ, type_champ: :datetime) }
champ_datetime = TypeDeChamp.new(type_champ: 'datetime') let!(:champ) { type_de_champ.champ.create(value: 'toto') }
Champ.create(type_de_champ: champ_datetime) let!(:champ_mandatory_empty) { type_de_champ_mandatory.champ.create }
end let!(:champ_datetime) { type_de_champ_datetime.champ.create }
let!(:champs) { [champ, champ_mandatory_empty, champ_datetime] } let!(:champs) { [champ, champ_mandatory_empty, champ_datetime] }
describe 'save_champs' do describe 'save_champs' do

View file

@ -9,7 +9,7 @@ describe TypesDeChampService do
describe 'the drop down list attributes' do describe 'the drop down list attributes' do
let(:types_de_champ_attributes) do let(:types_de_champ_attributes) do
{ {
"0" => { "0": {
libelle: 'top', libelle: 'top',
drop_down_list_attributes: { drop_down_list_attributes: {
value: "un\r\n deux\r\n -- commentaire --\r\n trois", value: "un\r\n deux\r\n -- commentaire --\r\n trois",
@ -28,29 +28,34 @@ describe TypesDeChampService do
describe 'reorder the fields' do describe 'reorder the fields' do
let(:types_de_champ_attributes) do let(:types_de_champ_attributes) do
{ {
'0' => { 'libelle' => 'a', 'order_place' => '0', 'custom_order_place' => '1' }, '0': { 'libelle': 'a', 'order_place': '0', 'custom_order_place': '1' },
'1' => { 'libelle' => 'b', 'order_place' => '1', 'custom_order_place' => '2' } '1': { 'libelle': 'b', 'order_place': '1', 'custom_order_place': '2' }
} }
end end
subject { result['types_de_champ_attributes'].to_unsafe_hash } subject { result['types_de_champ_attributes'].to_unsafe_hash }
it { is_expected.to match({ "0" => { 'libelle' => 'a', 'order_place' => '0' }, "1" => { 'libelle' => 'b', 'order_place' => '1' } }) } it do
is_expected.to match({
'0': { 'libelle': 'a', 'order_place': '0', 'private': false },
'1': { 'libelle': 'b', 'order_place': '1', 'private': false }
})
end
context 'when the user specifies a position on one element' do context 'when the user specifies a position on one element' do
let(:types_de_champ_attributes) do let(:types_de_champ_attributes) do
{ {
'0' => { 'libelle' => 'a', 'order_place' => '1', 'custom_order_place' => '1' }, '0': { 'libelle': 'a', 'order_place': '1', 'custom_order_place': '1' },
'1' => { 'libelle' => 'b', 'order_place' => '10', 'custom_order_place' => '10' }, '1': { 'libelle': 'b', 'order_place': '10', 'custom_order_place': '10' },
'2' => { 'libelle' => 'c', 'order_place' => '11', 'custom_order_place' => '2' } '2': { 'libelle': 'c', 'order_place': '11', 'custom_order_place': '2' }
} }
end end
it do it do
is_expected.to match({ is_expected.to match({
'0' => { 'libelle' => 'a', 'order_place' => '0' }, '0': { 'libelle': 'a', 'order_place': '0', 'private': false },
'1' => { 'libelle' => 'c', 'order_place' => '1' }, '1': { 'libelle': 'c', 'order_place': '1', 'private': false },
'2' => { 'libelle' => 'b', 'order_place' => '2' } '2': { 'libelle': 'b', 'order_place': '2', 'private': false }
}) })
end end
end end
@ -58,17 +63,17 @@ describe TypesDeChampService do
context 'when the user puts a champ down' do context 'when the user puts a champ down' do
let(:types_de_champ_attributes) do let(:types_de_champ_attributes) do
{ {
'0' => { 'libelle' => 'a', 'order_place' => '0', 'custom_order_place' => '2' }, '0': { 'libelle': 'a', 'order_place': '0', 'custom_order_place': '2' },
'1' => { 'libelle' => 'b', 'order_place' => '1', 'custom_order_place' => '2' }, '1': { 'libelle': 'b', 'order_place': '1', 'custom_order_place': '2' },
'2' => { 'libelle' => 'c', 'order_place' => '2', 'custom_order_place' => '3' } '2': { 'libelle': 'c', 'order_place': '2', 'custom_order_place': '3' }
} }
end end
it do it do
is_expected.to match({ is_expected.to match({
'0' => { 'libelle' => 'b', 'order_place' => '0' }, '0': { 'libelle': 'b', 'order_place': '0', 'private': false },
'1' => { 'libelle' => 'a', 'order_place' => '1' }, '1': { 'libelle': 'a', 'order_place': '1', 'private': false },
'2' => { 'libelle' => 'c', 'order_place' => '2' } '2': { 'libelle': 'c', 'order_place': '2', 'private': false }
}) })
end end
end end
@ -76,19 +81,19 @@ describe TypesDeChampService do
context 'when the user uses not a number' do context 'when the user uses not a number' do
let(:types_de_champ_attributes) do let(:types_de_champ_attributes) do
{ {
'0' => { 'libelle' => 'a', 'order_place' => '0', 'custom_order_place' => '1' }, '0': { 'libelle': 'a', 'order_place': '0', 'custom_order_place': '1' },
'1' => { 'libelle' => 'b', 'order_place' => '1', 'custom_order_place' => '2' }, '1': { 'libelle': 'b', 'order_place': '1', 'custom_order_place': '2' },
'2' => { 'libelle' => 'c', 'order_place' => '2', 'custom_order_place' => '' }, '2': { 'libelle': 'c', 'order_place': '2', 'custom_order_place': '' },
'3' => { 'libelle' => 'd', 'order_place' => '3', 'custom_order_place' => 'a' } '3': { 'libelle': 'd', 'order_place': '3', 'custom_order_place': 'a' }
} }
end end
it 'does not change the natural order' do it 'does not change the natural order' do
is_expected.to match({ is_expected.to match({
'0' => { 'libelle' => 'a', 'order_place' => '0' }, '0': { 'libelle': 'a', 'order_place': '0', 'private': false },
'1' => { 'libelle' => 'b', 'order_place' => '1' }, '1': { 'libelle': 'b', 'order_place': '1', 'private': false },
'2' => { 'libelle' => 'c', 'order_place' => '2' }, '2': { 'libelle': 'c', 'order_place': '2', 'private': false },
'3' => { 'libelle' => 'd', 'order_place' => '3' } '3': { 'libelle': 'd', 'order_place': '3', 'private': false }
}) })
end end
end end

View file

@ -6,8 +6,8 @@ describe 'admin/types_de_champ/show.html.haml', type: :view do
describe 'fields sorted' do describe 'fields sorted' do
let(:first_libelle) { 'salut la compagnie' } let(:first_libelle) { 'salut la compagnie' }
let(:last_libelle) { 'je suis bien sur la page' } let(:last_libelle) { 'je suis bien sur la page' }
let!(:type_de_champ_1) { create(:type_de_champ_public, procedure: procedure, order_place: 1, libelle: last_libelle) } let!(:type_de_champ_1) { create(:type_de_champ, procedure: procedure, order_place: 1, libelle: last_libelle) }
let!(:type_de_champ_0) { create(:type_de_champ_public, procedure: procedure, order_place: 0, libelle: first_libelle) } let!(:type_de_champ_0) { create(:type_de_champ, procedure: procedure, order_place: 0, libelle: first_libelle) }
before do before do
procedure.reload procedure.reload
assign(:procedure, procedure) assign(:procedure, procedure)
@ -32,15 +32,15 @@ describe 'admin/types_de_champ/show.html.haml', type: :view do
it { expect(subject).not_to have_css('.fa-chevron-up') } it { expect(subject).not_to have_css('.fa-chevron-up') }
end end
context 'when there is only one field in database' do context 'when there is only one field in database' do
let!(:type_de_champ_0) { create(:type_de_champ_public, procedure: procedure, order_place: 0) } let!(:type_de_champ_0) { create(:type_de_champ, procedure: procedure, order_place: 0) }
it { expect(subject).to have_css('#btn_down_0[style*="visibility: hidden"]') } it { expect(subject).to have_css('#btn_down_0[style*="visibility: hidden"]') }
it { expect(subject).to have_css('#btn_up_0[style*="visibility: hidden"]') } it { expect(subject).to have_css('#btn_up_0[style*="visibility: hidden"]') }
it { expect(subject).not_to have_css('#btn_up_1') } it { expect(subject).not_to have_css('#btn_up_1') }
it { expect(subject).not_to have_css('#btn_down_1') } it { expect(subject).not_to have_css('#btn_down_1') }
end end
context 'when there are 2 fields in database' do context 'when there are 2 fields in database' do
let!(:type_de_champ_0) { create(:type_de_champ_public, procedure: procedure, order_place: 0) } let!(:type_de_champ_0) { create(:type_de_champ, procedure: procedure, order_place: 0) }
let!(:type_de_champ_1) { create(:type_de_champ_public, procedure: procedure, order_place: 1) } let!(:type_de_champ_1) { create(:type_de_champ, procedure: procedure, order_place: 1) }
it { expect(subject).to have_css('#btn_down_0') } it { expect(subject).to have_css('#btn_down_0') }
it { expect(subject).to have_css('#btn_up_0[style*="visibility: hidden"]') } it { expect(subject).to have_css('#btn_up_0[style*="visibility: hidden"]') }
it { expect(subject).to have_css('#btn_up_1') } it { expect(subject).to have_css('#btn_up_1') }

View file

@ -6,8 +6,8 @@ describe 'admin/types_de_champ/show.html.haml', type: :view do
describe 'fields sorted' do describe 'fields sorted' do
let(:first_libelle) { 'salut la compagnie' } let(:first_libelle) { 'salut la compagnie' }
let(:last_libelle) { 'je suis bien sur la page' } let(:last_libelle) { 'je suis bien sur la page' }
let!(:type_de_champ_1) { create(:type_de_champ_private, procedure: procedure, order_place: 1, libelle: last_libelle) } let!(:type_de_champ_1) { create(:type_de_champ, :private, procedure: procedure, order_place: 1, libelle: last_libelle) }
let!(:type_de_champ_0) { create(:type_de_champ_private, procedure: procedure, order_place: 0, libelle: first_libelle) } let!(:type_de_champ_0) { create(:type_de_champ, :private, procedure: procedure, order_place: 0, libelle: first_libelle) }
before do before do
procedure.reload procedure.reload
assign(:procedure, procedure) assign(:procedure, procedure)
@ -40,15 +40,15 @@ describe 'admin/types_de_champ/show.html.haml', type: :view do
it { expect(subject).not_to have_css('.fa-chevron-up') } it { expect(subject).not_to have_css('.fa-chevron-up') }
end end
context 'when there is only one field in database' do context 'when there is only one field in database' do
let!(:type_de_champ_0) { create(:type_de_champ_private, procedure: procedure, order_place: 0) } let!(:type_de_champ_0) { create(:type_de_champ, :private, procedure: procedure, order_place: 0) }
it { expect(subject).to have_css('#btn_down_0[style*="visibility: hidden"]') } it { expect(subject).to have_css('#btn_down_0[style*="visibility: hidden"]') }
it { expect(subject).to have_css('#btn_up_0[style*="visibility: hidden"]') } it { expect(subject).to have_css('#btn_up_0[style*="visibility: hidden"]') }
it { expect(subject).not_to have_css('#btn_up_1') } it { expect(subject).not_to have_css('#btn_up_1') }
it { expect(subject).not_to have_css('#btn_down_1') } it { expect(subject).not_to have_css('#btn_down_1') }
end end
context 'when there are 2 fields in database' do context 'when there are 2 fields in database' do
let!(:type_de_champ_0) { create(:type_de_champ_private, procedure: procedure, order_place: 0) } let!(:type_de_champ_0) { create(:type_de_champ, :private, procedure: procedure, order_place: 0) }
let!(:type_de_champ_1) { create(:type_de_champ_private, procedure: procedure, order_place: 1) } let!(:type_de_champ_1) { create(:type_de_champ, :private, procedure: procedure, order_place: 1) }
it { expect(subject).to have_css('#btn_down_0') } it { expect(subject).to have_css('#btn_down_0') }
it { expect(subject).to have_css('#btn_up_0[style*="visibility: hidden"]') } it { expect(subject).to have_css('#btn_up_0[style*="visibility: hidden"]') }
it { expect(subject).to have_css('#btn_up_1') } it { expect(subject).to have_css('#btn_up_1') }

View file

@ -13,7 +13,7 @@ describe 'new_gestionnaire/dossiers/champs.html.haml', type: :view do
context "there are some champs" do context "there are some champs" do
let(:dossier) { create(:dossier) } let(:dossier) { create(:dossier) }
let(:avis) { create :avis, dossier: dossier, gestionnaire: gestionnaire } let(:avis) { create :avis, dossier: dossier, gestionnaire: gestionnaire }
let(:champ1) { create(:champ, :checkbox, value: "true") } let(:champ1) { create(:champ, :checkbox, value: "on") }
let(:champ2) { create(:champ, :header_section, value: "Section") } let(:champ2) { create(:champ, :header_section, value: "Section") }
let(:champ3) { create(:champ, :explication, value: "mazette") } let(:champ3) { create(:champ, :explication, value: "mazette") }
let(:champ4) { create(:champ, :dossier_link, value: dossier.id) } let(:champ4) { create(:champ, :dossier_link, value: dossier.id) }
@ -53,7 +53,7 @@ describe 'new_gestionnaire/dossiers/champs.html.haml', type: :view do
context "with seen_at" do context "with seen_at" do
let(:dossier) { create(:dossier) } let(:dossier) { create(:dossier) }
let(:champ1) { create(:champ, :checkbox, value: "true") } let(:champ1) { create(:champ, :checkbox, value: "on") }
let(:champs) { [champ1] } let(:champs) { [champ1] }
context "with a demande_seen_at after champ updated_at" do context "with a demande_seen_at after champ updated_at" do

View file

@ -1,7 +1,7 @@
require 'spec_helper' require 'spec_helper'
describe 'users/description/champs/date.html.haml', type: :view do describe 'users/description/champs/date.html.haml', type: :view do
let(:type_champ) { create(:type_de_champ_public, type_champ: :date) } let(:type_champ) { create(:type_de_champ, type_champ: :date) }
before do before do
render 'users/description/champs/date.html.haml', champ: champ render 'users/description/champs/date.html.haml', champ: champ

View file

@ -1,7 +1,7 @@
require 'spec_helper' require 'spec_helper'
describe 'users/description/champs/dossier_link.html.haml', type: :view do describe 'users/description/champs/dossier_link.html.haml', type: :view do
let(:type_champ) { create(:type_de_champ_public, type_champ: :dossier_link) } let(:type_champ) { create(:type_de_champ, type_champ: :dossier_link) }
before do before do
render 'users/description/champs/dossier_link.html.haml', champ: champ render 'users/description/champs/dossier_link.html.haml', champ: champ

View file

@ -1,7 +1,7 @@
require 'spec_helper' require 'spec_helper'
describe 'users/description/champs/engagement.html.haml', type: :view do describe 'users/description/champs/engagement.html.haml', type: :view do
let(:type_champ) { create(:type_de_champ_public, type_champ: :engagement) } let(:type_champ) { create(:type_de_champ, type_champ: :engagement) }
subject { render 'users/description/champs/engagement.html.haml', champ: champ } subject { render 'users/description/champs/engagement.html.haml', champ: champ }

View file

@ -1,5 +1,5 @@
describe 'users/description/champs/render_list_champs.html.haml', type: :view do describe 'users/description/champs/render_list_champs.html.haml', type: :view do
let(:type_champ) { create(:type_de_champ_public, :checkbox) } let(:type_champ) { create(:type_de_champ, :checkbox) }
context "with any champ" do context "with any champ" do
let!(:champ) { create(:champ, type_de_champ: type_champ, value: nil) } let!(:champ) { create(:champ, type_de_champ: type_champ, value: nil) }
@ -40,7 +40,7 @@ describe 'users/description/champs/render_list_champs.html.haml', type: :view do
end end
context 'with a dossier_link' do context 'with a dossier_link' do
let(:type_champ) { create(:type_de_champ_public, type_champ: :dossier_link) } let(:type_champ) { create(:type_de_champ, type_champ: :dossier_link) }
let!(:champ) { create(:champ, type_de_champ: type_champ, value: nil) } let!(:champ) { create(:champ, type_de_champ: type_champ, value: nil) }
before do before do

View file

@ -1,7 +1,7 @@
require 'spec_helper' require 'spec_helper'
describe 'users/description/champs/yes_no.html.haml', type: :view do describe 'users/description/champs/yes_no.html.haml', type: :view do
let(:type_champ) { create(:type_de_champ_public, type_champ: :yes_no) } let(:type_champ) { create(:type_de_champ, type_champ: :yes_no) }
before do before do
render 'users/description/champs/yes_no.html.haml', champ: champ render 'users/description/champs/yes_no.html.haml', champ: champ