Merge branch 'dev'
This commit is contained in:
commit
53191b824a
130 changed files with 1243 additions and 925 deletions
40
.rubocop.yml
40
.rubocop.yml
|
@ -83,10 +83,10 @@ Layout/ExtraSpacing:
|
||||||
- "Guardfile"
|
- "Guardfile"
|
||||||
|
|
||||||
Layout/FirstArrayElementLineBreak:
|
Layout/FirstArrayElementLineBreak:
|
||||||
Enabled: false
|
Enabled: true
|
||||||
|
|
||||||
Layout/FirstHashElementLineBreak:
|
Layout/FirstHashElementLineBreak:
|
||||||
Enabled: false
|
Enabled: true
|
||||||
|
|
||||||
Layout/FirstMethodArgumentLineBreak:
|
Layout/FirstMethodArgumentLineBreak:
|
||||||
Enabled: false
|
Enabled: false
|
||||||
|
@ -95,58 +95,64 @@ Layout/FirstMethodParameterLineBreak:
|
||||||
Enabled: false
|
Enabled: false
|
||||||
|
|
||||||
Layout/FirstParameterIndentation:
|
Layout/FirstParameterIndentation:
|
||||||
Enabled: false
|
Enabled: true
|
||||||
|
|
||||||
Layout/IndentArray:
|
Layout/IndentArray:
|
||||||
Enabled: false
|
Enabled: true
|
||||||
|
EnforcedStyle: consistent
|
||||||
|
|
||||||
Layout/IndentAssignment:
|
Layout/IndentAssignment:
|
||||||
Enabled: false
|
Enabled: true
|
||||||
|
|
||||||
Layout/IndentHash:
|
Layout/IndentHash:
|
||||||
Enabled: false
|
Enabled: true
|
||||||
|
EnforcedStyle: consistent
|
||||||
|
|
||||||
Layout/IndentHeredoc:
|
Layout/IndentHeredoc:
|
||||||
Enabled: false
|
Enabled: true
|
||||||
|
|
||||||
Layout/IndentationConsistency:
|
Layout/IndentationConsistency:
|
||||||
Enabled: false
|
Enabled: true
|
||||||
|
|
||||||
Layout/IndentationWidth:
|
Layout/IndentationWidth:
|
||||||
Enabled: true
|
Enabled: true
|
||||||
|
|
||||||
Layout/InitialIndentation:
|
Layout/InitialIndentation:
|
||||||
Enabled: false
|
Enabled: true
|
||||||
|
|
||||||
Layout/LeadingCommentSpace:
|
Layout/LeadingCommentSpace:
|
||||||
Enabled: false
|
Enabled: true
|
||||||
|
|
||||||
Layout/MultilineArrayBraceLayout:
|
Layout/MultilineArrayBraceLayout:
|
||||||
Enabled: false
|
Enabled: true
|
||||||
|
EnforcedStyle: new_line
|
||||||
|
|
||||||
Layout/MultilineAssignmentLayout:
|
Layout/MultilineAssignmentLayout:
|
||||||
Enabled: false
|
Enabled: false
|
||||||
|
|
||||||
Layout/MultilineBlockLayout:
|
Layout/MultilineBlockLayout:
|
||||||
Enabled: false
|
Enabled: true
|
||||||
|
|
||||||
Layout/MultilineHashBraceLayout:
|
Layout/MultilineHashBraceLayout:
|
||||||
Enabled: false
|
Enabled: true
|
||||||
|
EnforcedStyle: new_line
|
||||||
|
|
||||||
Layout/MultilineMethodCallBraceLayout:
|
Layout/MultilineMethodCallBraceLayout:
|
||||||
Enabled: false
|
Enabled: true
|
||||||
|
EnforcedStyle: symmetrical
|
||||||
|
|
||||||
Layout/MultilineMethodCallIndentation:
|
Layout/MultilineMethodCallIndentation:
|
||||||
Enabled: false
|
Enabled: true
|
||||||
|
EnforcedStyle: indented
|
||||||
|
|
||||||
Layout/MultilineMethodDefinitionBraceLayout:
|
Layout/MultilineMethodDefinitionBraceLayout:
|
||||||
Enabled: false
|
Enabled: true
|
||||||
|
|
||||||
Layout/MultilineOperationIndentation:
|
Layout/MultilineOperationIndentation:
|
||||||
Enabled: false
|
Enabled: false
|
||||||
|
|
||||||
Layout/RescueEnsureAlignment:
|
Layout/RescueEnsureAlignment:
|
||||||
Enabled: false
|
Enabled: true
|
||||||
|
|
||||||
Layout/SpaceAfterColon:
|
Layout/SpaceAfterColon:
|
||||||
Enabled: false
|
Enabled: false
|
||||||
|
|
|
@ -40,9 +40,11 @@ class Admin::GestionnairesController < AdminController
|
||||||
attributes = params.require(:gestionnaire).permit(:email)
|
attributes = params.require(:gestionnaire).permit(:email)
|
||||||
.merge(password: SecureRandom.hex(5))
|
.merge(password: SecureRandom.hex(5))
|
||||||
|
|
||||||
@gestionnaire = Gestionnaire.create(attributes.merge(
|
@gestionnaire = Gestionnaire.create(
|
||||||
administrateurs: [current_administrateur]
|
attributes.merge(
|
||||||
))
|
administrateurs: [current_administrateur]
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
if @gestionnaire.errors.messages.empty?
|
if @gestionnaire.errors.messages.empty?
|
||||||
User.create(attributes)
|
User.create(attributes)
|
||||||
|
@ -59,7 +61,7 @@ class Admin::GestionnairesController < AdminController
|
||||||
else
|
else
|
||||||
@gestionnaire.administrateurs.push current_administrateur
|
@gestionnaire.administrateurs.push current_administrateur
|
||||||
flash.notice = 'Accompagnateur ajouté'
|
flash.notice = 'Accompagnateur ajouté'
|
||||||
#TODO Mailer no assign_to
|
# TODO Mailer no assign_to
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -96,11 +96,13 @@ class Admin::ProceduresController < AdminController
|
||||||
procedure = current_administrateur.procedures.find(params[:procedure_id])
|
procedure = current_administrateur.procedures.find(params[:procedure_id])
|
||||||
|
|
||||||
new_procedure_path = ProcedurePath.new(
|
new_procedure_path = ProcedurePath.new(
|
||||||
{
|
{
|
||||||
path: params[:procedure_path],
|
path: params[:procedure_path],
|
||||||
procedure: procedure,
|
procedure: procedure,
|
||||||
administrateur: procedure.administrateur
|
administrateur: procedure.administrateur
|
||||||
})
|
}
|
||||||
|
)
|
||||||
|
|
||||||
if new_procedure_path.validate
|
if new_procedure_path.validate
|
||||||
new_procedure_path.delete
|
new_procedure_path.delete
|
||||||
else
|
else
|
||||||
|
@ -207,15 +209,20 @@ class Admin::ProceduresController < AdminController
|
||||||
end
|
end
|
||||||
|
|
||||||
def path_list
|
def path_list
|
||||||
render json: ProcedurePath
|
json_path_list = ProcedurePath
|
||||||
.joins(', procedures')
|
.joins(', procedures')
|
||||||
.where("procedures.id = procedure_paths.procedure_id")
|
.where("procedures.id = procedure_paths.procedure_id")
|
||||||
.where("procedures.archived_at" => nil)
|
.where("procedures.archived_at" => nil)
|
||||||
.where("path LIKE ?", "%#{params[:request]}%")
|
.where("path LIKE ?", "%#{params[:request]}%")
|
||||||
.pluck(:path, :administrateur_id)
|
.pluck(:path, :administrateur_id)
|
||||||
.inject([]) {
|
.map do |value|
|
||||||
|acc, value| acc.push({label: value.first, mine: value.second == current_administrateur.id})
|
{
|
||||||
}.to_json
|
label: value.first,
|
||||||
|
mine: value.second == current_administrateur.id
|
||||||
|
}
|
||||||
|
end.to_json
|
||||||
|
|
||||||
|
render json: json_path_list
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
34
app/controllers/administrateurs/activate_controller.rb
Normal file
34
app/controllers/administrateurs/activate_controller.rb
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
class Administrateurs::ActivateController < ApplicationController
|
||||||
|
layout "new_application"
|
||||||
|
|
||||||
|
def new
|
||||||
|
@administrateur = Administrateur.find_inactive_by_token(params[:token])
|
||||||
|
|
||||||
|
if !@administrateur
|
||||||
|
flash.alert = "Le lien de validation d'administrateur a expiré, contactez-nous à contact@tps.apientreprise.fr pour obtenir un nouveau lien."
|
||||||
|
redirect_to root_path
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def create
|
||||||
|
administrateur = Administrateur.reset_password(
|
||||||
|
update_administrateur_params[:reset_password_token],
|
||||||
|
update_administrateur_params[:password]
|
||||||
|
)
|
||||||
|
|
||||||
|
if administrateur && administrateur.errors.empty?
|
||||||
|
sign_in(administrateur, scope: :administrateur)
|
||||||
|
flash.notice = "Mot de passe enregistré"
|
||||||
|
redirect_to admin_procedures_path
|
||||||
|
else
|
||||||
|
flash.alert = administrateur.errors.full_messages
|
||||||
|
redirect_to admin_activate_path(token: update_administrateur_params[:reset_password_token])
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def update_administrateur_params
|
||||||
|
params.require(:administrateur).permit(:reset_password_token, :password)
|
||||||
|
end
|
||||||
|
end
|
|
@ -14,21 +14,26 @@ class AdministrationsController < ApplicationController
|
||||||
end
|
end
|
||||||
|
|
||||||
def create
|
def create
|
||||||
admin = Administrateur.new create_administrateur_params
|
administrateur = current_administration.invite_admin(create_administrateur_params[:email])
|
||||||
|
|
||||||
if admin.save
|
if administrateur.errors.empty?
|
||||||
flash.notice = "Administrateur créé"
|
flash.notice = "Administrateur créé"
|
||||||
AdministrationMailer.new_admin_email(admin, current_administration).deliver_now!
|
|
||||||
else
|
else
|
||||||
flash.alert = admin.errors.full_messages
|
flash.alert = administrateur.errors.full_messages
|
||||||
end
|
end
|
||||||
|
|
||||||
redirect_to administrations_path
|
redirect_to administrations_path
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def update
|
||||||
|
Administrateur.find_inactive_by_id(params[:id]).invite!
|
||||||
|
|
||||||
|
redirect_to administrations_path
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def create_administrateur_params
|
def create_administrateur_params
|
||||||
params.require(:administrateur).permit(:email, :password)
|
params.require(:administrateur).permit(:email)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
class API::StatistiquesController < ApplicationController
|
class API::StatistiquesController < ApplicationController
|
||||||
def dossiers_stats
|
def dossiers_stats
|
||||||
render json: {
|
render json: {
|
||||||
total: total_dossiers,
|
total: total_dossiers,
|
||||||
mois: dossiers_mois
|
mois: dossiers_mois
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
|
@ -34,9 +34,9 @@ class API::V1::DossiersController < APIController
|
||||||
|
|
||||||
def pagination(dossiers)
|
def pagination(dossiers)
|
||||||
{
|
{
|
||||||
page: dossiers.current_page,
|
page: dossiers.current_page,
|
||||||
resultats_par_page: dossiers.limit_value,
|
resultats_par_page: dossiers.limit_value,
|
||||||
nombre_de_page: dossiers.total_pages
|
nombre_de_page: dossiers.total_pages
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -2,9 +2,11 @@ class Ban::SearchController < ApplicationController
|
||||||
def get
|
def get
|
||||||
request = params[:request]
|
request = params[:request]
|
||||||
|
|
||||||
render json: Carto::Bano::AddressRetriever.new(request).list.inject([]) {
|
json = Carto::Bano::AddressRetriever.new(request).list.map do |value|
|
||||||
|acc, value| acc.push({label: value})
|
{ label: value }
|
||||||
}.to_json
|
end.to_json
|
||||||
|
|
||||||
|
render json: json
|
||||||
end
|
end
|
||||||
|
|
||||||
def get_address_point
|
def get_address_point
|
||||||
|
|
|
@ -1,42 +1,30 @@
|
||||||
class FranceConnect::ParticulierController < ApplicationController
|
class FranceConnect::ParticulierController < ApplicationController
|
||||||
def login
|
def login
|
||||||
client = FranceConnectParticulierClient.new
|
redirect_to FranceConnectService.authorization_uri
|
||||||
|
|
||||||
session[:state] = SecureRandom.hex(16)
|
|
||||||
session[:nonce] = SecureRandom.hex(16)
|
|
||||||
|
|
||||||
authorization_uri = client.authorization_uri(
|
|
||||||
scope: [:profile, :email],
|
|
||||||
state: session[:state],
|
|
||||||
nonce: session[:nonce]
|
|
||||||
)
|
|
||||||
redirect_to URI.parse(authorization_uri).to_s
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def callback
|
def callback
|
||||||
return redirect_to new_user_session_path if !params.has_key?(:code)
|
if params[:code].nil?
|
||||||
|
return redirect_to new_user_session_path
|
||||||
|
end
|
||||||
|
|
||||||
user_infos = FranceConnectService.retrieve_user_informations_particulier(params[:code])
|
fetched_fc_information = FranceConnectService.retrieve_user_informations_particulier(params[:code])
|
||||||
|
|
||||||
if user_infos.present?
|
france_connect_information = FranceConnectInformation
|
||||||
france_connect_information = FranceConnectInformation.find_by_france_connect_particulier user_infos
|
.find_by(france_connect_particulier_id: fetched_fc_information[:france_connect_particulier_id])
|
||||||
|
|
||||||
france_connect_information = FranceConnectInformation.create(
|
if france_connect_information.nil?
|
||||||
{gender: user_infos[:gender],
|
fetched_fc_information.save
|
||||||
given_name: user_infos[:given_name],
|
france_connect_information = fetched_fc_information
|
||||||
family_name: user_infos[:family_name],
|
end
|
||||||
email_france_connect: user_infos[:email],
|
|
||||||
birthdate: user_infos[:birthdate],
|
|
||||||
birthplace: user_infos[:birthplace],
|
|
||||||
france_connect_particulier_id: user_infos[:france_connect_particulier_id]}
|
|
||||||
) if france_connect_information.nil?
|
|
||||||
|
|
||||||
user = france_connect_information.user
|
user = france_connect_information.user
|
||||||
salt = FranceConnectSaltService.new(france_connect_information).salt
|
salt = FranceConnectSaltService.new(france_connect_information).salt
|
||||||
|
|
||||||
return redirect_to france_connect_particulier_new_path(fci_id: france_connect_information.id, salt: salt) if user.nil?
|
if user.nil?
|
||||||
|
redirect_to france_connect_particulier_new_path(fci_id: france_connect_information.id, salt: salt)
|
||||||
connect_france_connect_particulier user
|
else
|
||||||
|
connect_france_connect_particulier(user)
|
||||||
end
|
end
|
||||||
rescue Rack::OAuth2::Client::Error => e
|
rescue Rack::OAuth2::Client::Error => e
|
||||||
Rails.logger.error e.message
|
Rails.logger.error e.message
|
||||||
|
|
|
@ -240,12 +240,12 @@ module NewGestionnaire
|
||||||
when 'user', 'etablissement', 'entreprise'
|
when 'user', 'etablissement', 'entreprise'
|
||||||
if filter['column'] == 'date_creation'
|
if filter['column'] == 'date_creation'
|
||||||
dossiers
|
dossiers
|
||||||
.includes(filter['table'])
|
.includes(filter['table'])
|
||||||
.where("#{filter['table'].pluralize}.#{filter['column']} = ?", filter['value'].to_date)
|
.where("#{filter['table'].pluralize}.#{filter['column']} = ?", filter['value'].to_date)
|
||||||
else
|
else
|
||||||
dossiers
|
dossiers
|
||||||
.includes(filter['table'])
|
.includes(filter['table'])
|
||||||
.where("#{filter['table'].pluralize}.#{filter['column']} LIKE ?", "%#{filter['value']}%")
|
.where("#{filter['table'].pluralize}.#{filter['column']} LIKE ?", "%#{filter['value']}%")
|
||||||
end
|
end
|
||||||
|
|
||||||
end.pluck(:id)
|
end.pluck(:id)
|
||||||
|
|
|
@ -5,17 +5,21 @@ module NewGestionnaire
|
||||||
|
|
||||||
# exact id match?
|
# exact id match?
|
||||||
if @search_terms.to_i != 0
|
if @search_terms.to_i != 0
|
||||||
@dossiers = current_gestionnaire.dossiers.where(id: @search_terms.to_i)
|
@dossiers = current_gestionnaire.dossiers.where(id: @search_terms.to_i) +
|
||||||
|
current_gestionnaire.dossiers_from_avis.where(id: @search_terms.to_i)
|
||||||
|
@dossiers.uniq!
|
||||||
end
|
end
|
||||||
|
|
||||||
@dossiers = Dossier.none if @dossiers.nil?
|
if @dossiers.nil?
|
||||||
|
@dossiers = Dossier.none
|
||||||
|
end
|
||||||
|
|
||||||
# full text search
|
# full text search
|
||||||
if @dossiers.empty?
|
if @dossiers.empty?
|
||||||
@dossiers = Search.new(
|
@dossiers = Search.new(
|
||||||
gestionnaire: current_gestionnaire,
|
gestionnaire: current_gestionnaire,
|
||||||
query: @search_terms,
|
query: @search_terms,
|
||||||
page: params[:page]
|
page: params[:page]
|
||||||
).results
|
).results
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -35,10 +35,10 @@ class RootController < ApplicationController
|
||||||
.each do |champ|
|
.each do |champ|
|
||||||
champ.type_de_champ.drop_down_list = DropDownList.new(type_de_champ: champ.type_de_champ)
|
champ.type_de_champ.drop_down_list = DropDownList.new(type_de_champ: champ.type_de_champ)
|
||||||
champ.drop_down_list.value =
|
champ.drop_down_list.value =
|
||||||
"option A
|
"option A
|
||||||
option B
|
option B
|
||||||
-- avant l'option C --
|
-- avant l'option C --
|
||||||
option C"
|
option C"
|
||||||
champ.value = '["option B", "option C"]'
|
champ.value = '["option B", "option C"]'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -47,7 +47,7 @@ class StatsController < ApplicationController
|
||||||
def last_four_months_hash(association, date_attribute)
|
def last_four_months_hash(association, date_attribute)
|
||||||
min_date = 3.months.ago.beginning_of_month.to_date
|
min_date = 3.months.ago.beginning_of_month.to_date
|
||||||
|
|
||||||
association
|
association
|
||||||
.where(date_attribute => min_date..max_date)
|
.where(date_attribute => min_date..max_date)
|
||||||
.group("DATE_TRUNC('month', #{date_attribute.to_s})")
|
.group("DATE_TRUNC('month', #{date_attribute.to_s})")
|
||||||
.count
|
.count
|
||||||
|
|
|
@ -61,8 +61,8 @@ class Users::CarteController < UsersController
|
||||||
|
|
||||||
def self.route_authorization
|
def self.route_authorization
|
||||||
{
|
{
|
||||||
states: [:brouillon, :en_construction],
|
states: [:brouillon, :en_construction],
|
||||||
api_carto: true
|
api_carto: true
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -95,7 +95,7 @@ class Users::DescriptionController < UsersController
|
||||||
|
|
||||||
def self.route_authorization
|
def self.route_authorization
|
||||||
{
|
{
|
||||||
states: [:brouillon, :en_construction]
|
states: [:brouillon, :en_construction]
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -151,7 +151,7 @@ class Users::DossiersController < UsersController
|
||||||
|
|
||||||
def self.route_authorization
|
def self.route_authorization
|
||||||
{
|
{
|
||||||
states: [:brouillon]
|
states: [:brouillon]
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -18,7 +18,7 @@ class Users::RecapitulatifController < UsersController
|
||||||
|
|
||||||
def self.route_authorization
|
def self.route_authorization
|
||||||
{
|
{
|
||||||
states: [:en_construction, :en_instruction, :sans_suite, :accepte, :refuse]
|
states: [:en_construction, :en_instruction, :sans_suite, :accepte, :refuse]
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -12,7 +12,7 @@ class Users::SessionsController < Sessions::SessionsController
|
||||||
error_procedure
|
error_procedure
|
||||||
end
|
end
|
||||||
|
|
||||||
#POST /resource/sign_in
|
# POST /resource/sign_in
|
||||||
def create
|
def create
|
||||||
remember_me = params[:user][:remember_me] == '1'
|
remember_me = params[:user][:remember_me] == '1'
|
||||||
try_to_authenticate(User, remember_me)
|
try_to_authenticate(User, remember_me)
|
||||||
|
@ -49,11 +49,8 @@ class Users::SessionsController < Sessions::SessionsController
|
||||||
sign_out :user
|
sign_out :user
|
||||||
|
|
||||||
case connected_with_france_connect
|
case connected_with_france_connect
|
||||||
when 'entreprise'
|
|
||||||
redirect_to FRANCE_CONNECT.entreprise_logout_endpoint
|
|
||||||
return
|
|
||||||
when 'particulier'
|
when 'particulier'
|
||||||
redirect_to FRANCE_CONNECT.particulier_logout_endpoint
|
redirect_to FRANCE_CONNECT[:particulier][:logout_endpoint]
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -16,9 +16,10 @@ class UsersController < ApplicationController
|
||||||
end
|
end
|
||||||
|
|
||||||
def authorized_routes? controller
|
def authorized_routes? controller
|
||||||
redirect_to_root_path 'Le statut de votre dossier n\'autorise pas cette URL' if !UserRoutesAuthorizationService.authorized_route?(
|
if !UserRoutesAuthorizationService.authorized_route?(controller, current_user_dossier)
|
||||||
controller,
|
redirect_to_root_path 'Le statut de votre dossier n\'autorise pas cette URL'
|
||||||
current_user_dossier)
|
end
|
||||||
|
|
||||||
rescue ActiveRecord::RecordNotFound
|
rescue ActiveRecord::RecordNotFound
|
||||||
redirect_to_root_path 'Vous n’avez pas accès à ce dossier.'
|
redirect_to_root_path 'Vous n’avez pas accès à ce dossier.'
|
||||||
end
|
end
|
||||||
|
|
|
@ -2,7 +2,7 @@ class EntrepriseDecorator < Draper::Decorator
|
||||||
delegate_all
|
delegate_all
|
||||||
|
|
||||||
def raison_sociale_or_name
|
def raison_sociale_or_name
|
||||||
raison_sociale.blank? ? nom + ' ' + prenom : raison_sociale
|
raison_sociale.blank? ? "#{nom} #{prenom}" : raison_sociale
|
||||||
end
|
end
|
||||||
|
|
||||||
def effectif
|
def effectif
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
class DossierFacades
|
class DossierFacades
|
||||||
#TODO rechercher en fonction de la personne/email
|
# TODO rechercher en fonction de la personne/email
|
||||||
def initialize(dossier_id, email, champ_id = nil)
|
def initialize(dossier_id, email, champ_id = nil)
|
||||||
@dossier = Dossier.find(dossier_id)
|
@dossier = Dossier.find(dossier_id)
|
||||||
@champ_id = champ_id
|
@champ_id = champ_id
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
class InviteDossierFacades < DossierFacades
|
class InviteDossierFacades < DossierFacades
|
||||||
#TODO rechercher en fonction de la personne/email
|
# TODO rechercher en fonction de la personne/email
|
||||||
def initialize id, email
|
def initialize id, email
|
||||||
@dossier = Invite.where(email: email, id: id).first!.dossier
|
@dossier = Invite.where(email: email, id: id).first!.dossier
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,13 +1,15 @@
|
||||||
class FindDubiousProceduresJob < ApplicationJob
|
class FindDubiousProceduresJob < ApplicationJob
|
||||||
queue_as :cron
|
queue_as :cron
|
||||||
|
|
||||||
FORBIDDEN_KEYWORDS = ['IBAN', 'NIR', 'NIRPP', 'race', 'religion',
|
FORBIDDEN_KEYWORDS = [
|
||||||
'carte bancaire', 'carte bleue', 'sécurité sociale']
|
'IBAN', 'NIR', 'NIRPP', 'race', 'religion',
|
||||||
|
'carte bancaire', 'carte bleue', 'sécurité sociale'
|
||||||
|
]
|
||||||
|
|
||||||
def perform(*args)
|
def perform(*args)
|
||||||
# \\y is a word boundary
|
# \\y is a word boundary
|
||||||
forbidden_regexp = FORBIDDEN_KEYWORDS
|
forbidden_regexp = FORBIDDEN_KEYWORDS
|
||||||
.map { |keyword| '\\y' + keyword + '\\y' }
|
.map { |keyword| "\\y#{keyword}\\y" }
|
||||||
.join('|')
|
.join('|')
|
||||||
|
|
||||||
# ~* -> case insensitive regexp match
|
# ~* -> case insensitive regexp match
|
||||||
|
|
|
@ -25,8 +25,8 @@ module Carto
|
||||||
return []
|
return []
|
||||||
end
|
end
|
||||||
|
|
||||||
result['features'].inject([]) do |acc, feature|
|
result['features'].map do |feature|
|
||||||
acc.push feature['properties']['label']
|
feature['properties']['label']
|
||||||
end
|
end
|
||||||
rescue TypeError, JSON::ParserError
|
rescue TypeError, JSON::ParserError
|
||||||
[]
|
[]
|
||||||
|
|
|
@ -8,25 +8,25 @@ class CARTO::SGMAP::Cadastre::Adapter
|
||||||
end
|
end
|
||||||
|
|
||||||
def to_params
|
def to_params
|
||||||
data_source[:features].inject([]) do |acc, feature|
|
data_source[:features].map do |feature|
|
||||||
tmp = filter_properties feature[:properties]
|
tmp = filter_properties feature[:properties]
|
||||||
tmp[:geometry] = feature[:geometry]
|
tmp[:geometry] = feature[:geometry]
|
||||||
|
|
||||||
acc << tmp
|
tmp
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def filter_properties properties
|
def filter_properties properties
|
||||||
{
|
{
|
||||||
surface_intersection: properties[:surface_intersection],
|
surface_intersection: properties[:surface_intersection],
|
||||||
surface_parcelle: properties[:surface_parcelle],
|
surface_parcelle: properties[:surface_parcelle],
|
||||||
numero: properties[:numero],
|
numero: properties[:numero],
|
||||||
feuille: properties[:feuille],
|
feuille: properties[:feuille],
|
||||||
section: properties[:section],
|
section: properties[:section],
|
||||||
code_dep: properties[:code_dep],
|
code_dep: properties[:code_dep],
|
||||||
nom_com: properties[:nom_com],
|
nom_com: properties[:nom_com],
|
||||||
code_com: properties[:code_com],
|
code_com: properties[:code_com],
|
||||||
code_arr: properties[:code_arr]
|
code_arr: properties[:code_arr]
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -23,18 +23,20 @@ class SIADE::EntrepriseAdapter
|
||||||
end
|
end
|
||||||
|
|
||||||
def attr_to_fetch
|
def attr_to_fetch
|
||||||
[:siren,
|
[
|
||||||
:capital_social,
|
:siren,
|
||||||
:numero_tva_intracommunautaire,
|
:capital_social,
|
||||||
:forme_juridique,
|
:numero_tva_intracommunautaire,
|
||||||
:forme_juridique_code,
|
:forme_juridique,
|
||||||
:nom_commercial,
|
:forme_juridique_code,
|
||||||
:raison_sociale,
|
:nom_commercial,
|
||||||
:siret_siege_social,
|
:raison_sociale,
|
||||||
:code_effectif_entreprise,
|
:siret_siege_social,
|
||||||
:date_creation,
|
:code_effectif_entreprise,
|
||||||
:nom,
|
:date_creation,
|
||||||
:prenom]
|
:nom,
|
||||||
|
:prenom
|
||||||
|
]
|
||||||
end
|
end
|
||||||
|
|
||||||
def mandataires_sociaux
|
def mandataires_sociaux
|
||||||
|
|
|
@ -23,10 +23,11 @@ class SIADE::EtablissementAdapter
|
||||||
end
|
end
|
||||||
|
|
||||||
def attr_to_fetch
|
def attr_to_fetch
|
||||||
[:siret,
|
[
|
||||||
:siege_social,
|
:siret,
|
||||||
:naf,
|
:siege_social,
|
||||||
:libelle_naf
|
:naf,
|
||||||
|
:libelle_naf
|
||||||
]
|
]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -41,12 +42,14 @@ class SIADE::EtablissementAdapter
|
||||||
end
|
end
|
||||||
|
|
||||||
def address_attribut_to_fetch
|
def address_attribut_to_fetch
|
||||||
[:numero_voie,
|
[
|
||||||
:type_voie,
|
:numero_voie,
|
||||||
:nom_voie,
|
:type_voie,
|
||||||
:complement_adresse,
|
:nom_voie,
|
||||||
:code_postal,
|
:complement_adresse,
|
||||||
:localite,
|
:code_postal,
|
||||||
:code_insee_localite]
|
:localite,
|
||||||
|
:code_insee_localite
|
||||||
|
]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -23,12 +23,13 @@ class SIADE::RNAAdapter
|
||||||
end
|
end
|
||||||
|
|
||||||
def attr_to_fetch
|
def attr_to_fetch
|
||||||
[:id,
|
[
|
||||||
:titre,
|
:id,
|
||||||
:objet,
|
:titre,
|
||||||
:date_creation,
|
:objet,
|
||||||
:date_declaration,
|
:date_creation,
|
||||||
:date_publication
|
:date_declaration,
|
||||||
|
:date_publication
|
||||||
]
|
]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -9,6 +9,13 @@ class AdministrationMailer < ApplicationMailer
|
||||||
subject: "Création d'un compte Admin TPS")
|
subject: "Création d'un compte Admin TPS")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def invite_admin(admin, reset_password_token)
|
||||||
|
@reset_password_token = reset_password_token
|
||||||
|
mail(to: admin.email,
|
||||||
|
subject: "TPS - Activez votre compte administrateur",
|
||||||
|
reply_to: "equipe@tps.apientreprise.fr")
|
||||||
|
end
|
||||||
|
|
||||||
def dubious_procedures(procedures_and_type_de_champs)
|
def dubious_procedures(procedures_and_type_de_champs)
|
||||||
@procedures_and_type_de_champs = procedures_and_type_de_champs
|
@procedures_and_type_de_champs = procedures_and_type_de_champs
|
||||||
mail(to: 'equipe@tps.apientreprise.fr',
|
mail(to: 'equipe@tps.apientreprise.fr',
|
||||||
|
|
|
@ -9,6 +9,16 @@ class Administrateur < ActiveRecord::Base
|
||||||
|
|
||||||
include CredentialsSyncableConcern
|
include CredentialsSyncableConcern
|
||||||
|
|
||||||
|
scope :inactive, -> { where(active: false) }
|
||||||
|
|
||||||
|
def self.find_inactive_by_token(reset_password_token)
|
||||||
|
self.inactive.with_reset_password_token(reset_password_token)
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.find_inactive_by_id(id)
|
||||||
|
self.inactive.find(id)
|
||||||
|
end
|
||||||
|
|
||||||
def ensure_api_token
|
def ensure_api_token
|
||||||
if api_token.nil?
|
if api_token.nil?
|
||||||
self.api_token = generate_api_token
|
self.api_token = generate_api_token
|
||||||
|
@ -19,6 +29,46 @@ class Administrateur < ActiveRecord::Base
|
||||||
update_attributes(api_token: generate_api_token)
|
update_attributes(api_token: generate_api_token)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def registration_state
|
||||||
|
if active?
|
||||||
|
'Actif'
|
||||||
|
elsif reset_password_period_valid?
|
||||||
|
'En attente'
|
||||||
|
else
|
||||||
|
'Expiré'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def invite!
|
||||||
|
if active?
|
||||||
|
raise "Impossible d'inviter un utilisateur déjà actif !"
|
||||||
|
end
|
||||||
|
|
||||||
|
reset_password_token = set_reset_password_token
|
||||||
|
|
||||||
|
AdministrationMailer.invite_admin(self, reset_password_token).deliver_now!
|
||||||
|
|
||||||
|
reset_password_token
|
||||||
|
end
|
||||||
|
|
||||||
|
def invitation_expired?
|
||||||
|
!active && !reset_password_period_valid?
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.reset_password(reset_password_token, password)
|
||||||
|
administrateur = self.reset_password_by_token({
|
||||||
|
password: password,
|
||||||
|
password_confirmation: password,
|
||||||
|
reset_password_token: reset_password_token
|
||||||
|
})
|
||||||
|
|
||||||
|
if administrateur && administrateur.errors.empty?
|
||||||
|
administrateur.update_column(:active, true)
|
||||||
|
end
|
||||||
|
|
||||||
|
administrateur
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def generate_api_token
|
def generate_api_token
|
||||||
|
|
|
@ -6,4 +6,19 @@ class Administration < ActiveRecord::Base
|
||||||
def self.from_omniauth(params)
|
def self.from_omniauth(params)
|
||||||
find_by(email: params["info"]["email"])
|
find_by(email: params["info"]["email"])
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def invite_admin(email)
|
||||||
|
administrateur = Administrateur.new({
|
||||||
|
email: email,
|
||||||
|
active: false
|
||||||
|
})
|
||||||
|
administrateur.password = administrateur.password_confirmation = SecureRandom.hex
|
||||||
|
|
||||||
|
if administrateur.save
|
||||||
|
AdministrationMailer.new_admin_email(administrateur, self).deliver_now!
|
||||||
|
administrateur.invite!
|
||||||
|
end
|
||||||
|
|
||||||
|
administrateur
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -48,15 +48,15 @@ class Champ < ActiveRecord::Base
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.regions
|
def self.regions
|
||||||
JSON.parse(Carto::GeoAPI::Driver.regions).sort_by { |e| e['nom'] }.inject([]) { |acc, liste| acc.push(liste['nom']) }
|
JSON.parse(Carto::GeoAPI::Driver.regions).sort_by { |e| e['nom'] }.pluck("nom")
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.departements
|
def self.departements
|
||||||
JSON.parse(Carto::GeoAPI::Driver.departements).inject([]) { |acc, liste| acc.push(liste['code'] + ' - ' + liste['nom']) }.push('99 - Étranger')
|
JSON.parse(Carto::GeoAPI::Driver.departements).map { |liste| "#{liste['code']} - #{liste['nom']}" }.push('99 - Étranger')
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.pays
|
def self.pays
|
||||||
JSON.parse(Carto::GeoAPI::Driver.pays).inject([]) { |acc, liste| acc.push(liste['nom']) }
|
JSON.parse(Carto::GeoAPI::Driver.pays).pluck("nom")
|
||||||
end
|
end
|
||||||
|
|
||||||
def to_s
|
def to_s
|
||||||
|
|
|
@ -1,18 +1,18 @@
|
||||||
module CredentialsSyncableConcern
|
module CredentialsSyncableConcern
|
||||||
extend ActiveSupport::Concern
|
extend ActiveSupport::Concern
|
||||||
|
|
||||||
included do
|
included do
|
||||||
after_update :sync_credentials
|
after_update :sync_credentials
|
||||||
end
|
end
|
||||||
|
|
||||||
def sync_credentials
|
def sync_credentials
|
||||||
if email_changed? || encrypted_password_changed?
|
if email_changed? || encrypted_password_changed?
|
||||||
return force_sync_credentials
|
return force_sync_credentials
|
||||||
end
|
|
||||||
true
|
|
||||||
end
|
end
|
||||||
|
true
|
||||||
|
end
|
||||||
|
|
||||||
def force_sync_credentials
|
def force_sync_credentials
|
||||||
SyncCredentialsService.new(self.class, email_was, email, encrypted_password).change_credentials!
|
SyncCredentialsService.new(self.class, email_was, email, encrypted_password).change_credentials!
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -28,22 +28,32 @@ module TagsSubstitutionConcern
|
||||||
end
|
end
|
||||||
|
|
||||||
def dossier_tags
|
def dossier_tags
|
||||||
[{ libelle: 'motivation',
|
[
|
||||||
description: 'Motivation facultative associée à la décision finale d’acceptation, refus ou classement sans suite',
|
{
|
||||||
target: :motivation,
|
libelle: 'motivation',
|
||||||
dossier_termine_only: true },
|
description: 'Motivation facultative associée à la décision finale d’acceptation, refus ou classement sans suite',
|
||||||
{ libelle: 'date de dépôt',
|
target: :motivation,
|
||||||
description: 'Date du passage en construction du dossier par l’usager',
|
dossier_termine_only: true
|
||||||
lambda: -> (d) { format_date(d.en_construction_at) } },
|
},
|
||||||
{ libelle: 'date de passage en instruction',
|
{
|
||||||
description: '',
|
libelle: 'date de dépôt',
|
||||||
lambda: -> (d) { format_date(d.en_instruction_at) } },
|
description: 'Date du passage en construction du dossier par l’usager',
|
||||||
{ libelle: 'date de décision',
|
lambda: -> (d) { format_date(d.en_construction_at) }
|
||||||
description: 'Date de la décision d’acceptation, refus, ou classement sans suite',
|
},
|
||||||
lambda: -> (d) { format_date(d.processed_at) },
|
{
|
||||||
dossier_termine_only: true },
|
libelle: 'date de passage en instruction',
|
||||||
{ libelle: 'libellé procédure', description: '', lambda: -> (d) { d.procedure.libelle } },
|
description: '',
|
||||||
{ libelle: 'numéro du dossier', description: '', target: :id }]
|
lambda: -> (d) { format_date(d.en_instruction_at) }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
libelle: 'date de décision',
|
||||||
|
description: 'Date de la décision d’acceptation, refus, ou classement sans suite',
|
||||||
|
lambda: -> (d) { format_date(d.processed_at) },
|
||||||
|
dossier_termine_only: true
|
||||||
|
},
|
||||||
|
{ libelle: 'libellé procédure', description: '', lambda: -> (d) { d.procedure.libelle } },
|
||||||
|
{ libelle: 'numéro du dossier', description: '', target: :id }
|
||||||
|
]
|
||||||
end
|
end
|
||||||
|
|
||||||
def format_date(date)
|
def format_date(date)
|
||||||
|
@ -55,16 +65,20 @@ module TagsSubstitutionConcern
|
||||||
end
|
end
|
||||||
|
|
||||||
def individual_tags
|
def individual_tags
|
||||||
[{ libelle: 'civilité', description: 'M., Mme', target: :gender },
|
[
|
||||||
{ libelle: 'nom', description: "nom de l'usager", target: :nom },
|
{ libelle: 'civilité', description: 'M., Mme', target: :gender },
|
||||||
{ libelle: 'prénom', description: "prénom de l'usager", target: :prenom }]
|
{ libelle: 'nom', description: "nom de l'usager", target: :nom },
|
||||||
|
{ libelle: 'prénom', description: "prénom de l'usager", target: :prenom }
|
||||||
|
]
|
||||||
end
|
end
|
||||||
|
|
||||||
def entreprise_tags
|
def entreprise_tags
|
||||||
[{ libelle: 'SIREN', description: '', target: :siren },
|
[
|
||||||
{ libelle: 'numéro de TVA intracommunautaire', description: '', target: :numero_tva_intracommunautaire },
|
{ libelle: 'SIREN', description: '', target: :siren },
|
||||||
{ libelle: 'SIRET du siège social', description: '', target: :siret_siege_social },
|
{ libelle: 'numéro de TVA intracommunautaire', description: '', target: :numero_tva_intracommunautaire },
|
||||||
{ libelle: 'raison sociale', description: '', target: :raison_sociale }]
|
{ libelle: 'SIRET du siège social', description: '', target: :siret_siege_social },
|
||||||
|
{ libelle: 'raison sociale', description: '', target: :raison_sociale }
|
||||||
|
]
|
||||||
end
|
end
|
||||||
|
|
||||||
def etablissement_tags
|
def etablissement_tags
|
||||||
|
@ -83,7 +97,8 @@ module TagsSubstitutionConcern
|
||||||
[dossier_tags, dossier],
|
[dossier_tags, dossier],
|
||||||
[individual_tags, dossier.individual],
|
[individual_tags, dossier.individual],
|
||||||
[entreprise_tags, dossier.entreprise],
|
[entreprise_tags, dossier.entreprise],
|
||||||
[etablissement_tags, dossier.entreprise&.etablissement]]
|
[etablissement_tags, dossier.entreprise&.etablissement]
|
||||||
|
]
|
||||||
|
|
||||||
tags_and_datas
|
tags_and_datas
|
||||||
.map { |(tags, data)| [filter_tags(tags, dossier.termine?), data] }
|
.map { |(tags, data)| [filter_tags(tags, dossier.termine?), data] }
|
||||||
|
|
|
@ -11,7 +11,7 @@ class Etablissement < ActiveRecord::Base
|
||||||
end
|
end
|
||||||
|
|
||||||
def inline_adresse
|
def inline_adresse
|
||||||
#squeeze needed because of space in excess in the data
|
# squeeze needed because of space in excess in the data
|
||||||
"#{numero_voie} #{type_voie} #{nom_voie}, #{complement_adresse}, #{code_postal} #{localite}".squeeze(' ')
|
"#{numero_voie} #{type_voie} #{nom_voie}, #{complement_adresse}, #{code_postal} #{localite}".squeeze(' ')
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -2,8 +2,4 @@ class FranceConnectInformation < ActiveRecord::Base
|
||||||
belongs_to :user
|
belongs_to :user
|
||||||
|
|
||||||
validates :france_connect_particulier_id, presence: true, allow_blank: false, allow_nil: false
|
validates :france_connect_particulier_id, presence: true, allow_blank: false, allow_nil: false
|
||||||
|
|
||||||
def self.find_by_france_connect_particulier user_info
|
|
||||||
FranceConnectInformation.find_by(france_connect_particulier_id: user_info[:france_connect_particulier_id])
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,16 +1,9 @@
|
||||||
class FranceConnectParticulierClient < OpenIDConnect::Client
|
class FranceConnectParticulierClient < OpenIDConnect::Client
|
||||||
def initialize params={}
|
def initialize(code = nil)
|
||||||
super(
|
super(FRANCE_CONNECT[:particulier])
|
||||||
identifier: FRANCE_CONNECT.particulier_identifier,
|
|
||||||
secret: FRANCE_CONNECT.particulier_secret,
|
|
||||||
|
|
||||||
redirect_uri: FRANCE_CONNECT.particulier_redirect_uri,
|
if code.present?
|
||||||
|
self.authorization_code = code
|
||||||
authorization_endpoint: FRANCE_CONNECT.particulier_authorization_endpoint,
|
end
|
||||||
token_endpoint: FRANCE_CONNECT.particulier_token_endpoint,
|
|
||||||
userinfo_endpoint: FRANCE_CONNECT.particulier_userinfo_endpoint,
|
|
||||||
logout_endpoint: FRANCE_CONNECT.particulier_logout_endpoint
|
|
||||||
)
|
|
||||||
self.authorization_code = params[:code] if params.has_key? :code
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -10,6 +10,7 @@ class Gestionnaire < ActiveRecord::Base
|
||||||
has_many :followed_dossiers, through: :follows, source: :dossier
|
has_many :followed_dossiers, through: :follows, source: :dossier
|
||||||
has_many :follows
|
has_many :follows
|
||||||
has_many :avis
|
has_many :avis
|
||||||
|
has_many :dossiers_from_avis, through: :avis, source: :dossier
|
||||||
|
|
||||||
include CredentialsSyncableConcern
|
include CredentialsSyncableConcern
|
||||||
|
|
||||||
|
@ -54,8 +55,7 @@ class Gestionnaire < ActiveRecord::Base
|
||||||
procedure_ids = followed_dossiers.pluck(:procedure_id)
|
procedure_ids = followed_dossiers.pluck(:procedure_id)
|
||||||
|
|
||||||
if procedure_ids.include?(procedure.id)
|
if procedure_ids.include?(procedure.id)
|
||||||
return followed_dossiers.where(procedure_id: procedure.id)
|
return followed_dossiers.where(procedure_id: procedure.id).inject(0) do |acc, dossier|
|
||||||
.inject(0) do |acc, dossier|
|
|
||||||
acc += dossier.notifications.where(already_read: false).count
|
acc += dossier.notifications.where(already_read: false).count
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -83,9 +83,9 @@ class Gestionnaire < ActiveRecord::Base
|
||||||
start_date = DateTime.now.beginning_of_week
|
start_date = DateTime.now.beginning_of_week
|
||||||
|
|
||||||
active_procedure_overviews = procedures
|
active_procedure_overviews = procedures
|
||||||
.publiees
|
.publiees
|
||||||
.map { |procedure| procedure.procedure_overview(start_date) }
|
.map { |procedure| procedure.procedure_overview(start_date) }
|
||||||
.select(&:had_some_activities?)
|
.select(&:had_some_activities?)
|
||||||
|
|
||||||
if active_procedure_overviews.count == 0
|
if active_procedure_overviews.count == 0
|
||||||
nil
|
nil
|
||||||
|
@ -107,7 +107,7 @@ class Gestionnaire < ActiveRecord::Base
|
||||||
.find_by(gestionnaire: self, dossier: dossier)
|
.find_by(gestionnaire: self, dossier: dossier)
|
||||||
|
|
||||||
if follow.present?
|
if follow.present?
|
||||||
#retirer le seen_at.present? une fois la contrainte de presence en base (et les migrations ad hoc)
|
# retirer le seen_at.present? une fois la contrainte de presence en base (et les migrations ad hoc)
|
||||||
champs_publiques = follow.demande_seen_at.present? &&
|
champs_publiques = follow.demande_seen_at.present? &&
|
||||||
follow.dossier.champs.updated_since?(follow.demande_seen_at).any?
|
follow.dossier.champs.updated_since?(follow.demande_seen_at).any?
|
||||||
|
|
||||||
|
@ -124,8 +124,8 @@ class Gestionnaire < ActiveRecord::Base
|
||||||
|
|
||||||
messagerie = follow.messagerie_seen_at.present? &&
|
messagerie = follow.messagerie_seen_at.present? &&
|
||||||
dossier.commentaires
|
dossier.commentaires
|
||||||
.where.not(email: 'contact@tps.apientreprise.fr')
|
.where.not(email: 'contact@tps.apientreprise.fr')
|
||||||
.updated_since?(follow.messagerie_seen_at).any?
|
.updated_since?(follow.messagerie_seen_at).any?
|
||||||
|
|
||||||
annotations_hash(demande, annotations_privees, avis_notif, messagerie)
|
annotations_hash(demande, annotations_privees, avis_notif, messagerie)
|
||||||
else
|
else
|
||||||
|
@ -154,22 +154,28 @@ class Gestionnaire < ActiveRecord::Base
|
||||||
private
|
private
|
||||||
|
|
||||||
def valid_couple_table_attr? table, column
|
def valid_couple_table_attr? table, column
|
||||||
couples = [{
|
couples = [
|
||||||
table: :dossier,
|
{
|
||||||
column: :dossier_id
|
table: :dossier,
|
||||||
}, {
|
column: :dossier_id
|
||||||
table: :procedure,
|
},
|
||||||
column: :libelle
|
{
|
||||||
}, {
|
table: :procedure,
|
||||||
table: :etablissement,
|
column: :libelle
|
||||||
column: :siret
|
},
|
||||||
}, {
|
{
|
||||||
table: :entreprise,
|
table: :etablissement,
|
||||||
column: :raison_sociale
|
column: :siret
|
||||||
}, {
|
},
|
||||||
table: :dossier,
|
{
|
||||||
column: :state
|
table: :entreprise,
|
||||||
}]
|
column: :raison_sociale
|
||||||
|
},
|
||||||
|
{
|
||||||
|
table: :dossier,
|
||||||
|
column: :state
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
couples.include?({table: table, column: column})
|
couples.include?({table: table, column: column})
|
||||||
end
|
end
|
||||||
|
@ -205,10 +211,12 @@ class Gestionnaire < ActiveRecord::Base
|
||||||
.where('commentaires.updated_at > follows.messagerie_seen_at')
|
.where('commentaires.updated_at > follows.messagerie_seen_at')
|
||||||
.where.not(commentaires: { email: 'contact@tps.apientreprise.fr' })
|
.where.not(commentaires: { email: 'contact@tps.apientreprise.fr' })
|
||||||
|
|
||||||
[updated_demandes,
|
[
|
||||||
updated_pieces_justificatives,
|
updated_demandes,
|
||||||
updated_annotations,
|
updated_pieces_justificatives,
|
||||||
updated_avis,
|
updated_annotations,
|
||||||
updated_messagerie].map { |query| query.distinct.ids }.flatten.uniq
|
updated_avis,
|
||||||
|
updated_messagerie
|
||||||
|
].flat_map { |query| query.distinct.ids }.uniq
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -30,9 +30,11 @@ class ProcedureOverview
|
||||||
end
|
end
|
||||||
|
|
||||||
def had_some_activities?
|
def had_some_activities?
|
||||||
[@dossiers_en_instruction_count,
|
[
|
||||||
@dossiers_en_construction_count,
|
@dossiers_en_instruction_count,
|
||||||
@created_dossiers_count].reduce(:+) > 0
|
@dossiers_en_construction_count,
|
||||||
|
@created_dossiers_count
|
||||||
|
].reduce(:+) > 0
|
||||||
end
|
end
|
||||||
|
|
||||||
def dossiers_en_construction_description
|
def dossiers_en_construction_description
|
||||||
|
|
|
@ -65,11 +65,11 @@ class Search < ActiveRecord::Base
|
||||||
Results.new(q)
|
Results.new(q)
|
||||||
end
|
end
|
||||||
|
|
||||||
#def self.refresh
|
# def self.refresh
|
||||||
# # TODO: could be executed concurrently
|
# # TODO: could be executed concurrently
|
||||||
# # See https://github.com/thoughtbot/scenic#what-about-materialized-views
|
# # See https://github.com/thoughtbot/scenic#what-about-materialized-views
|
||||||
# Scenic.database.refresh_materialized_view(table_name, concurrently: false)
|
# Scenic.database.refresh_materialized_view(table_name, concurrently: false)
|
||||||
#end
|
# end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
|
|
|
@ -11,6 +11,6 @@ class FranceConnectSaltService
|
||||||
end
|
end
|
||||||
|
|
||||||
def salt
|
def salt
|
||||||
Digest::MD5.hexdigest(model.france_connect_particulier_id + model.given_name + model.family_name + FRANCE_CONNECT.particulier_secret + DateTime.now.to_date.to_s)
|
Digest::MD5.hexdigest(model.france_connect_particulier_id + model.given_name + model.family_name + FRANCE_CONNECT[:particulier][:secret] + DateTime.now.to_date.to_s)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,12 +1,29 @@
|
||||||
class FranceConnectService
|
class FranceConnectService
|
||||||
def self.retrieve_user_informations_particulier code
|
def self.authorization_uri
|
||||||
client = FranceConnectParticulierClient.new code: code
|
client = FranceConnectParticulierClient.new
|
||||||
|
|
||||||
access_token = client.access_token!(client_auth_method: :secret)
|
client.authorization_uri(
|
||||||
user_info = access_token.userinfo!
|
scope: [:profile, :email],
|
||||||
hash = Hashie::Mash.new user_info.raw_attributes
|
state: SecureRandom.hex(16),
|
||||||
|
nonce: SecureRandom.hex(16)
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
hash.france_connect_particulier_id = hash.sub
|
def self.retrieve_user_informations_particulier(code)
|
||||||
hash
|
client = FranceConnectParticulierClient.new(code)
|
||||||
|
|
||||||
|
user_info = client.access_token!(client_auth_method: :secret)
|
||||||
|
.userinfo!
|
||||||
|
.raw_attributes
|
||||||
|
|
||||||
|
FranceConnectInformation.new(
|
||||||
|
gender: user_info[:gender],
|
||||||
|
given_name: user_info[:given_name],
|
||||||
|
family_name: user_info[:family_name],
|
||||||
|
email_france_connect: user_info[:email],
|
||||||
|
birthdate: user_info[:birthdate],
|
||||||
|
birthplace: user_info[:birthplace],
|
||||||
|
france_connect_particulier_id: user_info[:sub]
|
||||||
|
)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
class GeojsonService
|
class GeojsonService
|
||||||
def self.to_json_polygon_for_qp coordinates
|
def self.to_json_polygon_for_qp coordinates
|
||||||
polygon = {
|
polygon = {
|
||||||
geo: {
|
geo: {
|
||||||
type: "Polygon",
|
type: "Polygon",
|
||||||
coordinates: [coordinates]
|
coordinates: [coordinates]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
polygon.to_json
|
polygon.to_json
|
||||||
|
@ -12,15 +12,15 @@ class GeojsonService
|
||||||
|
|
||||||
def self.to_json_polygon_for_cadastre coordinates
|
def self.to_json_polygon_for_cadastre coordinates
|
||||||
polygon = {
|
polygon = {
|
||||||
geom: {
|
geom: {
|
||||||
type: "Feature",
|
type: "Feature",
|
||||||
geometry: {
|
geometry: {
|
||||||
type: "Polygon",
|
type: "Polygon",
|
||||||
coordinates: [
|
coordinates: [
|
||||||
coordinates
|
coordinates
|
||||||
]
|
]
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
polygon.to_json
|
polygon.to_json
|
||||||
|
|
|
@ -26,14 +26,16 @@ class ModuleApiCartoService
|
||||||
def self.generate_qp coordinates
|
def self.generate_qp coordinates
|
||||||
coordinates.inject({}) { |acc, coordinate|
|
coordinates.inject({}) { |acc, coordinate|
|
||||||
acc.merge CARTO::SGMAP::QuartiersPrioritaires::Adapter.new(
|
acc.merge CARTO::SGMAP::QuartiersPrioritaires::Adapter.new(
|
||||||
coordinate.map { |element| [element['lng'], element['lat']] }).to_params
|
coordinate.map { |element| [element['lng'], element['lat']] }
|
||||||
|
).to_params
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.generate_cadastre coordinates
|
def self.generate_cadastre coordinates
|
||||||
(coordinates.inject([]) { |acc, coordinate|
|
coordinates.flat_map do |coordinate|
|
||||||
acc << CARTO::SGMAP::Cadastre::Adapter.new(
|
CARTO::SGMAP::Cadastre::Adapter.new(
|
||||||
coordinate.map { |element| [element['lng'], element['lat']] }).to_params
|
coordinate.map { |element| [element['lng'], element['lat']] }
|
||||||
}).flatten
|
).to_params
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -15,11 +15,11 @@ class NotificationService
|
||||||
|
|
||||||
def notification
|
def notification
|
||||||
@notification ||=
|
@notification ||=
|
||||||
begin
|
begin
|
||||||
Notification.find_by! dossier_id: @dossier_id, already_read: false, type_notif: @type_notif
|
Notification.find_by! dossier_id: @dossier_id, already_read: false, type_notif: @type_notif
|
||||||
rescue ActiveRecord::RecordNotFound
|
rescue ActiveRecord::RecordNotFound
|
||||||
Notification.new dossier_id: @dossier_id, type_notif: @type_notif, liste: []
|
Notification.new dossier_id: @dossier_id, type_notif: @type_notif, liste: []
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def text_for_notif attribut=''
|
def text_for_notif attribut=''
|
||||||
|
|
|
@ -1,32 +1,32 @@
|
||||||
class PiecesJustificativesService
|
class PiecesJustificativesService
|
||||||
def self.upload!(dossier, user, params)
|
def self.upload!(dossier, user, params)
|
||||||
tpj_contents = dossier.types_de_piece_justificative
|
tpj_contents = dossier.types_de_piece_justificative
|
||||||
.map { |tpj| [tpj, params["piece_justificative_#{tpj.id}"]] }
|
.map { |tpj| [tpj, params["piece_justificative_#{tpj.id}"]] }
|
||||||
.select { |_, content| content.present? }
|
.select { |_, content| content.present? }
|
||||||
|
|
||||||
without_virus, with_virus = tpj_contents
|
without_virus, with_virus = tpj_contents
|
||||||
.partition { |_, content| ClamavService.safe_file?(content.path) }
|
.partition { |_, content| ClamavService.safe_file?(content.path) }
|
||||||
|
|
||||||
errors = with_virus
|
errors = with_virus
|
||||||
.map { |_, content| content.original_filename + ' : virus détecté' }
|
.map { |_, content| "#{content.original_filename} : virus détecté" }
|
||||||
|
|
||||||
errors += without_virus
|
errors += without_virus
|
||||||
.map { |tpj, content| save_pj(content, dossier, tpj, user) }
|
.map { |tpj, content| save_pj(content, dossier, tpj, user) }
|
||||||
.compact()
|
.compact()
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.upload_one! dossier, user, params
|
def self.upload_one! dossier, user, params
|
||||||
content = params[:piece_justificative][:content]
|
content = params[:piece_justificative][:content]
|
||||||
if ClamavService.safe_file? content.path
|
if ClamavService.safe_file? content.path
|
||||||
pj = PieceJustificative.new(content: content,
|
pj = PieceJustificative.new(content: content,
|
||||||
dossier: dossier,
|
dossier: dossier,
|
||||||
type_de_piece_justificative: nil,
|
type_de_piece_justificative: nil,
|
||||||
user: user)
|
user: user)
|
||||||
|
|
||||||
pj.save
|
pj.save
|
||||||
else
|
else
|
||||||
pj = PieceJustificative.new
|
pj = PieceJustificative.new
|
||||||
pj.errors.add(:content, content.original_filename + ': <b>Virus détecté !!</b>')
|
pj.errors.add(:content, "#{content.original_filename} : <b>Virus détecté !!</b>")
|
||||||
end
|
end
|
||||||
|
|
||||||
pj
|
pj
|
||||||
|
@ -34,9 +34,9 @@ class PiecesJustificativesService
|
||||||
|
|
||||||
def self.save_pj(content, dossier, tpj, user)
|
def self.save_pj(content, dossier, tpj, user)
|
||||||
pj = PieceJustificative.new(content: content,
|
pj = PieceJustificative.new(content: content,
|
||||||
dossier: dossier,
|
dossier: dossier,
|
||||||
type_de_piece_justificative: tpj,
|
type_de_piece_justificative: tpj,
|
||||||
user: user)
|
user: user)
|
||||||
|
|
||||||
pj.save ? nil : "le fichier #{content.original_filename} (#{pj.libelle.truncate(200)}) n'a pas pu être sauvegardé"
|
pj.save ? nil : "le fichier #{content.original_filename} (#{pj.libelle.truncate(200)}) n'a pas pu être sauvegardé"
|
||||||
end
|
end
|
||||||
|
|
|
@ -17,7 +17,7 @@ class RenderPartialService
|
||||||
def self.left_panel_exist? left_panel_url
|
def self.left_panel_exist? left_panel_url
|
||||||
file = left_panel_url.split('/').last
|
file = left_panel_url.split('/').last
|
||||||
|
|
||||||
File.exist?(Rails.root.join('app','views', 'layouts', 'left_panels', '_' + file + '.html.haml'))
|
File.exist?(Rails.root.join('app','views', 'layouts', 'left_panels', "_#{file}.html.haml"))
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
@ -31,6 +31,6 @@ class RenderPartialService
|
||||||
end
|
end
|
||||||
|
|
||||||
def retrieve_name
|
def retrieve_name
|
||||||
controller.to_s.parameterize.underscore + '_' + method.to_s
|
"#{controller.to_s.parameterize.underscore}_#{method.to_s}"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -9,28 +9,22 @@ class SyncCredentialsService
|
||||||
def change_credentials!
|
def change_credentials!
|
||||||
if @klass != User
|
if @klass != User
|
||||||
user = User.find_by(email: @email_was)
|
user = User.find_by(email: @email_was)
|
||||||
if user
|
if user && !user.update_columns(email: @email, encrypted_password: @encrypted_password)
|
||||||
return false if !user.update_columns(
|
return false
|
||||||
email: @email,
|
|
||||||
encrypted_password: @encrypted_password)
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
if @klass != Gestionnaire
|
if @klass != Gestionnaire
|
||||||
gestionnaire = Gestionnaire.find_by(email: @email_was)
|
gestionnaire = Gestionnaire.find_by(email: @email_was)
|
||||||
if gestionnaire
|
if gestionnaire && !gestionnaire.update_columns(email: @email, encrypted_password: @encrypted_password)
|
||||||
return false if !gestionnaire.update_columns(
|
return false
|
||||||
email: @email,
|
|
||||||
encrypted_password: @encrypted_password)
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
if @klass != Administrateur
|
if @klass != Administrateur
|
||||||
administrateur = Administrateur.find_by(email: @email_was)
|
administrateur = Administrateur.find_by(email: @email_was)
|
||||||
if administrateur
|
if administrateur && !administrateur.update_columns(email: @email, encrypted_password: @encrypted_password)
|
||||||
return false if !administrateur.update_columns(
|
return false
|
||||||
email: @email,
|
|
||||||
encrypted_password: @encrypted_password)
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -5,9 +5,17 @@ class TypesDeChampService
|
||||||
params_with_ordered_champs = order_champs(params, attributes)
|
params_with_ordered_champs = order_champs(params, attributes)
|
||||||
|
|
||||||
parameters = params_with_ordered_champs
|
parameters = params_with_ordered_champs
|
||||||
.require(:procedure)
|
.require(:procedure)
|
||||||
.permit("#{attributes}" => [:libelle, :description, :order_place, :type_champ, :id, :mandatory, :type,
|
.permit("#{attributes}" => [
|
||||||
drop_down_list_attributes: [:value, :id]])
|
:libelle,
|
||||||
|
:description,
|
||||||
|
:order_place,
|
||||||
|
:type_champ,
|
||||||
|
:id,
|
||||||
|
:mandatory,
|
||||||
|
:type,
|
||||||
|
drop_down_list_attributes: [:value, :id]
|
||||||
|
])
|
||||||
|
|
||||||
parameters[attributes].each do |param_first, param_second|
|
parameters[attributes].each do |param_first, param_second|
|
||||||
if param_second[:libelle].empty?
|
if param_second[:libelle].empty?
|
||||||
|
|
|
@ -26,7 +26,7 @@ class PieceJustificativeUploader < BaseUploader
|
||||||
if original_filename.present? || model.content_secure_token
|
if original_filename.present? || model.content_secure_token
|
||||||
if Features.remote_storage
|
if Features.remote_storage
|
||||||
filename = "#{model.class.to_s.underscore}-#{secure_token}.#{file.extension.downcase}"
|
filename = "#{model.class.to_s.underscore}-#{secure_token}.#{file.extension.downcase}"
|
||||||
else original_filename
|
else
|
||||||
filename = "#{model.class.to_s.underscore}.#{file.extension.downcase}"
|
filename = "#{model.class.to_s.underscore}.#{file.extension.downcase}"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
8
app/views/administrateurs/activate/new.html.haml
Normal file
8
app/views/administrateurs/activate/new.html.haml
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
.container
|
||||||
|
= form_for @administrateur, url: { controller: 'administrateurs/activate', action: :create }, html: { class: "form" } do |f|
|
||||||
|
%br
|
||||||
|
%h1
|
||||||
|
= @administrateur.email
|
||||||
|
= f.password_field :password, placeholder: 'Mot de passe'
|
||||||
|
= f.hidden_field :reset_password_token, value: params[:token]
|
||||||
|
= f.submit 'Définir le mot de passe', class: 'button large primary expand'
|
16
app/views/administration_mailer/invite_admin.html.haml
Normal file
16
app/views/administration_mailer/invite_admin.html.haml
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
- content_for(:title, 'Activation du compte administrateur')
|
||||||
|
|
||||||
|
Bonjour,
|
||||||
|
%br
|
||||||
|
%br
|
||||||
|
L'équipe TPS vous invite à activer votre compte administrateur sur TPS.
|
||||||
|
%br
|
||||||
|
%br
|
||||||
|
Pour le faire, merci de cliquer sur le lien suivant :
|
||||||
|
= link_to admin_activate_url(token: @reset_password_token), admin_activate_url(token: @reset_password_token)
|
||||||
|
%br
|
||||||
|
%br
|
||||||
|
Bonne journée,
|
||||||
|
%br
|
||||||
|
%br
|
||||||
|
L'équipe Téléprocédures Simplifiées
|
|
@ -4,6 +4,7 @@
|
||||||
%thead
|
%thead
|
||||||
%th.col-xs-4= smart_listing.sortable 'Email', :email
|
%th.col-xs-4= smart_listing.sortable 'Email', :email
|
||||||
%th.col-xs-4= smart_listing.sortable 'Date de dernière connexion', :last_sign_in_at
|
%th.col-xs-4= smart_listing.sortable 'Date de dernière connexion', :last_sign_in_at
|
||||||
|
%th.col-xs-2 État
|
||||||
%th.col-xs-2 Procédure active
|
%th.col-xs-2 Procédure active
|
||||||
%th.col-xs-2 Dossier en cours
|
%th.col-xs-2 Dossier en cours
|
||||||
|
|
||||||
|
@ -17,6 +18,11 @@
|
||||||
(
|
(
|
||||||
= admin.last_sign_in_at.localtime.strftime('%d/%m/%Y')
|
= admin.last_sign_in_at.localtime.strftime('%d/%m/%Y')
|
||||||
)
|
)
|
||||||
|
%td
|
||||||
|
- if admin.invitation_expired?
|
||||||
|
= link_to admin.registration_state, administration_path(admin), remote: true, method: :patch
|
||||||
|
- else
|
||||||
|
= admin.registration_state
|
||||||
%td
|
%td
|
||||||
= admin.procedures.publiees.count
|
= admin.procedures.publiees.count
|
||||||
%td
|
%td
|
||||||
|
|
|
@ -3,7 +3,6 @@
|
||||||
= form_for @admin, url: { controller: 'administrations', action: :create } do |f|
|
= form_for @admin, url: { controller: 'administrations', action: :create } do |f|
|
||||||
.form-group.form-inline.text-center
|
.form-group.form-inline.text-center
|
||||||
= f.text_field :email, placeholder: :email, class: 'form-control'
|
= f.text_field :email, placeholder: :email, class: 'form-control'
|
||||||
= f.text_field :password, placeholder: :password, class: 'form-control'
|
|
||||||
|
|
||||||
= f.submit 'Créer un administrateur', class: 'btn btn-success', id: 'submit_new_administrateur'
|
= f.submit 'Créer un administrateur', class: 'btn btn-success', id: 'submit_new_administrateur'
|
||||||
|
|
||||||
|
|
26
config/brakeman.ignore
Normal file
26
config/brakeman.ignore
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
{
|
||||||
|
"ignored_warnings": [
|
||||||
|
{
|
||||||
|
"warning_type": "Redirect",
|
||||||
|
"warning_code": 18,
|
||||||
|
"fingerprint": "a0a4cede6d50308b90bd747efd0a2ebd58947fbd5d100349ccd640c60413b1a9",
|
||||||
|
"check_name": "Redirect",
|
||||||
|
"message": "Possible unprotected redirect",
|
||||||
|
"file": "app/controllers/france_connect/particulier_controller.rb",
|
||||||
|
"line": 3,
|
||||||
|
"link": "http://brakemanscanner.org/docs/warning_types/redirect/",
|
||||||
|
"code": "redirect_to(FranceConnectParticulierClient.new.authorization_uri)",
|
||||||
|
"render_path": null,
|
||||||
|
"location": {
|
||||||
|
"type": "method",
|
||||||
|
"class": "FranceConnect::ParticulierController",
|
||||||
|
"method": "login"
|
||||||
|
},
|
||||||
|
"user_input": "FranceConnectParticulierClient.new.authorization_uri",
|
||||||
|
"confidence": "High",
|
||||||
|
"note": "We trust FC OpenId implem"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"updated": "2018-01-11 15:53:22 +0100",
|
||||||
|
"brakeman_version": "3.7.0"
|
||||||
|
}
|
|
@ -45,30 +45,30 @@ set :rails_env, ENV["to"]
|
||||||
# Manually create these paths in shared/ (eg: shared/config/database.yml) in your server.
|
# Manually create these paths in shared/ (eg: shared/config/database.yml) in your server.
|
||||||
# They will be linked in the 'deploy:link_shared_paths' step.
|
# They will be linked in the 'deploy:link_shared_paths' step.
|
||||||
set :shared_paths, [
|
set :shared_paths, [
|
||||||
'log',
|
'log',
|
||||||
'bin',
|
'bin',
|
||||||
'uploads',
|
'uploads',
|
||||||
'tmp/pids',
|
'tmp/pids',
|
||||||
'tmp/cache',
|
'tmp/cache',
|
||||||
'tmp/sockets',
|
'tmp/sockets',
|
||||||
'public/system',
|
'public/system',
|
||||||
'public/uploads',
|
'public/uploads',
|
||||||
'config/database.yml',
|
'config/database.yml',
|
||||||
"config/skylight.yml",
|
"config/skylight.yml",
|
||||||
"config/fog_credentials.yml",
|
"config/fog_credentials.yml",
|
||||||
'config/initializers/secret_token.rb',
|
'config/initializers/secret_token.rb',
|
||||||
'config/initializers/features.yml',
|
'config/initializers/features.yml',
|
||||||
"config/environments/#{rails_env}.rb",
|
"config/environments/#{rails_env}.rb",
|
||||||
"config/initializers/token.rb",
|
"config/initializers/token.rb",
|
||||||
"config/initializers/urls.rb",
|
"config/initializers/urls.rb",
|
||||||
"config/initializers/super_admin.rb",
|
"config/initializers/super_admin.rb",
|
||||||
"config/unicorn.rb",
|
"config/unicorn.rb",
|
||||||
"config/initializers/raven.rb",
|
"config/initializers/raven.rb",
|
||||||
'config/france_connect.yml',
|
'config/france_connect.yml',
|
||||||
'config/github_secrets.yml',
|
'config/github_secrets.yml',
|
||||||
'config/initializers/mailjet.rb',
|
'config/initializers/mailjet.rb',
|
||||||
'config/initializers/storage_url.rb'
|
'config/initializers/storage_url.rb'
|
||||||
]
|
]
|
||||||
|
|
||||||
set :rbenv_path, "/usr/local/rbenv/bin/rbenv"
|
set :rbenv_path, "/usr/local/rbenv/bin/rbenv"
|
||||||
|
|
||||||
|
|
|
@ -10,8 +10,8 @@ Apipie.configure do |config|
|
||||||
config.namespaced_resources = true
|
config.namespaced_resources = true
|
||||||
config.show_all_examples = true
|
config.show_all_examples = true
|
||||||
|
|
||||||
config.app_info = <<-EOS
|
config.app_info = <<~EOS
|
||||||
Description
|
Description
|
||||||
|
|
||||||
EOS
|
EOS
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
BROWSER = Hashie::Mash.new ({
|
BROWSER = Hashie::Mash.new ({
|
||||||
value: nil
|
value: nil
|
||||||
})
|
})
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
CLAMAV = Hashie::Mash.new ({
|
CLAMAV = Hashie::Mash.new ({
|
||||||
mock?: true,
|
mock?: true,
|
||||||
response: true
|
response: true
|
||||||
})
|
})
|
||||||
|
|
|
@ -8,8 +8,8 @@ require 'yaml'
|
||||||
# ansible config
|
# ansible config
|
||||||
class Features
|
class Features
|
||||||
class << self
|
class << self
|
||||||
if File.exist?(File.dirname(__FILE__) + '/features.yml')
|
if File.exist?("#{File.dirname(__FILE__)}/features.yml")
|
||||||
features_map = YAML.load_file(File.dirname(__FILE__) + '/features.yml')
|
features_map = YAML.load_file("#{File.dirname(__FILE__)}/features.yml")
|
||||||
if features_map
|
if features_map
|
||||||
features_map.each do |feature, is_active|
|
features_map.each do |feature, is_active|
|
||||||
define_method("#{feature}") do
|
define_method("#{feature}") do
|
||||||
|
|
|
@ -1,14 +1,22 @@
|
||||||
FRANCE_CONNECT = if !Rails.env.test?
|
FRANCE_CONNECT = if Rails.env.test?
|
||||||
file_path = "#{Rails.root}/config/france_connect.yml"
|
{
|
||||||
Hashie::Mash.load(file_path)
|
particulier: {
|
||||||
|
identifier: 'plop',
|
||||||
|
secret: 'plip',
|
||||||
|
redirect_uri: 'https://bidon.com/endpoint',
|
||||||
|
authorization_endpoint: 'https://bidon.com/endpoint',
|
||||||
|
token_endpoint: 'https://bidon.com/endpoint',
|
||||||
|
userinfo_endpoint: 'https://bidon.com/endpoint',
|
||||||
|
logout_endpoint: 'https://bidon.com/endpoint',
|
||||||
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
Hashie::Mash.new({
|
fc_config_file_path = "#{Rails.root}/config/france_connect.yml"
|
||||||
particulier_identifier: 'plop',
|
|
||||||
particulier_secret: 'plip',
|
# FIXME: with a yaml with a { particulier: {} } structure
|
||||||
particulier_redirect_uri: 'https://bidon.com/endpoint',
|
config_hash = YAML.safe_load(File.read(fc_config_file_path))
|
||||||
particulier_authorization_endpoint: 'https://bidon.com/endpoint',
|
.reduce({}) { |acc, (key, value)| acc[key.gsub('particulier_', '')] = value; acc }
|
||||||
particulier_token_endpoint: 'https://bidon.com/endpoint',
|
.symbolize_keys
|
||||||
particulier_userinfo_endpoint: 'https://bidon.com/endpoint',
|
|
||||||
particulier_logout_endpoint: 'https://bidon.com/endpoint',
|
{ particulier: config_hash }
|
||||||
})
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
STORAGE_URL = "https://storage.apientreprise.fr/" + CarrierWave::Uploader::Base.fog_directory + '/'
|
STORAGE_URL = "https://storage.apientreprise.fr/#{CarrierWave::Uploader::Base.fog_directory}/"
|
||||||
|
|
|
@ -18,19 +18,19 @@ Rails.application.routes.draw do
|
||||||
}
|
}
|
||||||
|
|
||||||
devise_for :administrateurs, controllers: {
|
devise_for :administrateurs, controllers: {
|
||||||
sessions: 'administrateurs/sessions'
|
sessions: 'administrateurs/sessions'
|
||||||
}, skip: [:password, :registrations]
|
}, skip: [:password, :registrations]
|
||||||
|
|
||||||
devise_for :gestionnaires, controllers: {
|
devise_for :gestionnaires, controllers: {
|
||||||
sessions: 'gestionnaires/sessions',
|
sessions: 'gestionnaires/sessions',
|
||||||
passwords: 'gestionnaires/passwords'
|
passwords: 'gestionnaires/passwords'
|
||||||
}, skip: [:registrations]
|
}, skip: [:registrations]
|
||||||
|
|
||||||
devise_for :users, controllers: {
|
devise_for :users, controllers: {
|
||||||
sessions: 'users/sessions',
|
sessions: 'users/sessions',
|
||||||
registrations: 'users/registrations',
|
registrations: 'users/registrations',
|
||||||
passwords: 'users/passwords'
|
passwords: 'users/passwords'
|
||||||
}
|
}
|
||||||
|
|
||||||
devise_scope :user do
|
devise_scope :user do
|
||||||
get '/users/sign_in/demo' => redirect("/users/sign_in")
|
get '/users/sign_in/demo' => redirect("/users/sign_in")
|
||||||
|
@ -55,8 +55,7 @@ Rails.application.routes.draw do
|
||||||
get 'administrations/sign_in' => 'administrations/sessions#new'
|
get 'administrations/sign_in' => 'administrations/sessions#new'
|
||||||
delete 'administrations/sign_out' => 'administrations/sessions#destroy'
|
delete 'administrations/sign_out' => 'administrations/sessions#destroy'
|
||||||
authenticate :administration do
|
authenticate :administration do
|
||||||
resources :administrations, only: [:index, :create]
|
resources :administrations, only: [:index, :create, :update] do
|
||||||
namespace :administrations do
|
|
||||||
match "/delayed_job" => DelayedJobWeb, :anchor => false, :via => [:get, :post]
|
match "/delayed_job" => DelayedJobWeb, :anchor => false, :via => [:get, :post]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -111,6 +110,8 @@ Rails.application.routes.draw do
|
||||||
end
|
end
|
||||||
|
|
||||||
namespace :admin do
|
namespace :admin do
|
||||||
|
get 'activate' => '/administrateurs/activate#new'
|
||||||
|
patch 'activate' => '/administrateurs/activate#create'
|
||||||
get 'sign_in' => '/administrateurs/sessions#new'
|
get 'sign_in' => '/administrateurs/sessions#new'
|
||||||
get 'procedures/archived' => 'procedures#archived'
|
get 'procedures/archived' => 'procedures#archived'
|
||||||
get 'procedures/draft' => 'procedures#draft'
|
get 'procedures/draft' => 'procedures#draft'
|
||||||
|
@ -171,7 +172,7 @@ Rails.application.routes.draw do
|
||||||
end
|
end
|
||||||
|
|
||||||
namespace :accompagnateurs do
|
namespace :accompagnateurs do
|
||||||
get 'show' #delete after fixed tests admin/accompagnateurs/show_spec without this line
|
get 'show' # delete after fixed tests admin/accompagnateurs/show_spec without this line
|
||||||
end
|
end
|
||||||
|
|
||||||
resources :gestionnaires, only: [:index, :create, :destroy]
|
resources :gestionnaires, only: [:index, :create, :destroy]
|
||||||
|
|
|
@ -18,13 +18,15 @@ class CreateFranceConnectInformation < ActiveRecord::Migration
|
||||||
add_reference :france_connect_informations, :user, references: :users
|
add_reference :france_connect_informations, :user, references: :users
|
||||||
|
|
||||||
User.all.each do |user|
|
User.all.each do |user|
|
||||||
FranceConnectInformation.create({gender: user.gender,
|
FranceConnectInformation.create({
|
||||||
given_name: user.given_name,
|
gender: user.gender,
|
||||||
family_name: user.family_name,
|
given_name: user.given_name,
|
||||||
birthdate: user.birthdate,
|
family_name: user.family_name,
|
||||||
birthplace: user.birthplace,
|
birthdate: user.birthdate,
|
||||||
france_connect_particulier_id: user.france_connect_particulier_id,
|
birthplace: user.birthplace,
|
||||||
user_id: user.id}) if user.france_connect_particulier_id.present?
|
france_connect_particulier_id: user.france_connect_particulier_id,
|
||||||
|
user_id: user.id
|
||||||
|
}) if user.france_connect_particulier_id.present?
|
||||||
end
|
end
|
||||||
|
|
||||||
remove_column :users, :gender
|
remove_column :users, :gender
|
||||||
|
@ -44,12 +46,14 @@ class CreateFranceConnectInformation < ActiveRecord::Migration
|
||||||
add_column :users, :france_connect_particulier_id, :string
|
add_column :users, :france_connect_particulier_id, :string
|
||||||
|
|
||||||
FranceConnectInformation.all.each do |fci|
|
FranceConnectInformation.all.each do |fci|
|
||||||
User.find(fci.user_id).update_attributes({gender: fci.gender,
|
User.find(fci.user_id).update_attributes({
|
||||||
given_name: fci.given_name,
|
gender: fci.gender,
|
||||||
family_name: fci.family_name,
|
given_name: fci.given_name,
|
||||||
birthdate: fci.birthdate,
|
family_name: fci.family_name,
|
||||||
birthplace: fci.birthplace,
|
birthdate: fci.birthdate,
|
||||||
france_connect_particulier_id: fci.france_connect_particulier_id})
|
birthplace: fci.birthplace,
|
||||||
|
france_connect_particulier_id: fci.france_connect_particulier_id
|
||||||
|
})
|
||||||
end
|
end
|
||||||
|
|
||||||
drop_table :france_connect_informations
|
drop_table :france_connect_informations
|
||||||
|
|
|
@ -13,21 +13,21 @@ class DeleteDefaultDescriptionToDossier < ActiveRecord::Migration
|
||||||
|
|
||||||
def up
|
def up
|
||||||
Procedure.all.each do |procedure|
|
Procedure.all.each do |procedure|
|
||||||
#change all type_de_champ place_order by +1 to insert new type_de_champ description on first place
|
# change all type_de_champ place_order by +1 to insert new type_de_champ description on first place
|
||||||
TypeDeChamp.where(procedure_id: procedure.id).each do |type_de_champ|
|
TypeDeChamp.where(procedure_id: procedure.id).each do |type_de_champ|
|
||||||
type_de_champ.order_place += 1
|
type_de_champ.order_place += 1
|
||||||
type_de_champ.save
|
type_de_champ.save
|
||||||
end
|
end
|
||||||
|
|
||||||
#insert type_de_champ description on first place
|
# insert type_de_champ description on first place
|
||||||
TypeDeChamp.create(libelle: 'Description', description: 'Description de votre demande', type_champ: 'textarea', order_place: 0, procedure_id: procedure.id, mandatory: true)
|
TypeDeChamp.create(libelle: 'Description', description: 'Description de votre demande', type_champ: 'textarea', order_place: 0, procedure_id: procedure.id, mandatory: true)
|
||||||
end
|
end
|
||||||
|
|
||||||
Dossier.all.each do |dossier|
|
Dossier.all.each do |dossier|
|
||||||
#get the new type de champ
|
# get the new type de champ
|
||||||
new_type_de_champ = TypeDeChamp.where(libelle: 'Description', type_champ: 'textarea', order_place: 0, procedure_id: dossier.procedure_id, mandatory: true)
|
new_type_de_champ = TypeDeChamp.where(libelle: 'Description', type_champ: 'textarea', order_place: 0, procedure_id: dossier.procedure_id, mandatory: true)
|
||||||
|
|
||||||
#create a new champ with the actual description value
|
# create a new champ with the actual description value
|
||||||
Champ.create(value: dossier.description, type_de_champ_id: new_type_de_champ.first.id, dossier_id: dossier.id)
|
Champ.create(value: dossier.description, type_de_champ_id: new_type_de_champ.first.id, dossier_id: dossier.id)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -5,14 +5,14 @@ class BuildDefaultPreferenceListDossier < ActiveRecord::Migration
|
||||||
table.second.each do |column|
|
table.second.each do |column|
|
||||||
if valid_couple_table_attr? table.first, column.first
|
if valid_couple_table_attr? table.first, column.first
|
||||||
PreferenceListDossier.create(
|
PreferenceListDossier.create(
|
||||||
libelle: column.second[:libelle],
|
libelle: column.second[:libelle],
|
||||||
table: column.second[:table],
|
table: column.second[:table],
|
||||||
attr: column.second[:attr],
|
attr: column.second[:attr],
|
||||||
attr_decorate: column.second[:attr_decorate],
|
attr_decorate: column.second[:attr_decorate],
|
||||||
bootstrap_lg: column.second[:bootstrap_lg],
|
bootstrap_lg: column.second[:bootstrap_lg],
|
||||||
order: nil,
|
order: nil,
|
||||||
filter: nil,
|
filter: nil,
|
||||||
gestionnaire_id: self.id
|
gestionnaire_id: self.id
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -20,22 +20,28 @@ class BuildDefaultPreferenceListDossier < ActiveRecord::Migration
|
||||||
end
|
end
|
||||||
|
|
||||||
def valid_couple_table_attr? table, column
|
def valid_couple_table_attr? table, column
|
||||||
couples = [{
|
couples = [
|
||||||
table: :dossier,
|
{
|
||||||
column: :dossier_id
|
table: :dossier,
|
||||||
}, {
|
column: :dossier_id
|
||||||
table: :procedure,
|
},
|
||||||
column: :libelle
|
{
|
||||||
}, {
|
table: :procedure,
|
||||||
table: :etablissement,
|
column: :libelle
|
||||||
column: :siret
|
},
|
||||||
}, {
|
{
|
||||||
table: :entreprise,
|
table: :etablissement,
|
||||||
column: :raison_sociale
|
column: :siret
|
||||||
}, {
|
},
|
||||||
table: :dossier,
|
{
|
||||||
column: :state
|
table: :entreprise,
|
||||||
}]
|
column: :raison_sociale
|
||||||
|
},
|
||||||
|
{
|
||||||
|
table: :dossier,
|
||||||
|
column: :state
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
couples.include?({table: table, column: column})
|
couples.include?({table: table, column: column})
|
||||||
end
|
end
|
||||||
|
@ -44,11 +50,11 @@ class BuildDefaultPreferenceListDossier < ActiveRecord::Migration
|
||||||
class PreferenceListDossier < ActiveRecord::Base
|
class PreferenceListDossier < ActiveRecord::Base
|
||||||
def self.available_columns
|
def self.available_columns
|
||||||
{
|
{
|
||||||
dossier: columns_dossier,
|
dossier: columns_dossier,
|
||||||
procedure: columns_procedure,
|
procedure: columns_procedure,
|
||||||
entreprise: columns_entreprise,
|
entreprise: columns_entreprise,
|
||||||
etablissement: columns_etablissement,
|
etablissement: columns_etablissement,
|
||||||
user: columns_user
|
user: columns_user
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -56,10 +62,10 @@ class BuildDefaultPreferenceListDossier < ActiveRecord::Migration
|
||||||
table = nil
|
table = nil
|
||||||
|
|
||||||
{
|
{
|
||||||
dossier_id: create_column('ID', table, 'id', 'id', 1),
|
dossier_id: create_column('ID', table, 'id', 'id', 1),
|
||||||
created_at: create_column('Créé le', table, 'created_at', 'first_creation', 2),
|
created_at: create_column('Créé le', table, 'created_at', 'first_creation', 2),
|
||||||
updated_at: create_column('Mise à jour le', table, 'updated_at', 'last_update', 2),
|
updated_at: create_column('Mise à jour le', table, 'updated_at', 'last_update', 2),
|
||||||
state: create_column('Statut', table, 'state', 'display_state', 1)
|
state: create_column('Statut', table, 'state', 'display_state', 1)
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -67,9 +73,9 @@ class BuildDefaultPreferenceListDossier < ActiveRecord::Migration
|
||||||
table = 'procedure'
|
table = 'procedure'
|
||||||
|
|
||||||
{
|
{
|
||||||
libelle: create_column('Libellé procédure', table, 'libelle', 'libelle', 4),
|
libelle: create_column('Libellé procédure', table, 'libelle', 'libelle', 4),
|
||||||
organisation: create_column('Organisation', table, 'organisation', 'organisation', 3),
|
organisation: create_column('Organisation', table, 'organisation', 'organisation', 3),
|
||||||
direction: create_column('Direction', table, 'direction', 'direction', 3)
|
direction: create_column('Direction', table, 'direction', 'direction', 3)
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -77,12 +83,12 @@ class BuildDefaultPreferenceListDossier < ActiveRecord::Migration
|
||||||
table = 'entreprise'
|
table = 'entreprise'
|
||||||
|
|
||||||
{
|
{
|
||||||
siren: create_column('SIREN', table, 'siren', 'siren', 2),
|
siren: create_column('SIREN', table, 'siren', 'siren', 2),
|
||||||
forme_juridique: create_column('Forme juridique', table, 'forme_juridique', 'forme_juridique', 3),
|
forme_juridique: create_column('Forme juridique', table, 'forme_juridique', 'forme_juridique', 3),
|
||||||
nom_commercial: create_column('Nom commercial', table, 'nom_commercial', 'nom_commercial', 3),
|
nom_commercial: create_column('Nom commercial', table, 'nom_commercial', 'nom_commercial', 3),
|
||||||
raison_sociale: create_column('Raison sociale', table, 'raison_sociale', 'raison_sociale', 3),
|
raison_sociale: create_column('Raison sociale', table, 'raison_sociale', 'raison_sociale', 3),
|
||||||
siret_siege_social: create_column('SIRET siège social', table, 'siret_siege_social', 'siret_siege_social', 2),
|
siret_siege_social: create_column('SIRET siège social', table, 'siret_siege_social', 'siret_siege_social', 2),
|
||||||
date_creation: create_column('Date de création', table, 'date_creation', 'date_creation', 2),
|
date_creation: create_column('Date de création', table, 'date_creation', 'date_creation', 2),
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -90,9 +96,9 @@ class BuildDefaultPreferenceListDossier < ActiveRecord::Migration
|
||||||
table = 'etablissement'
|
table = 'etablissement'
|
||||||
|
|
||||||
{
|
{
|
||||||
siret: create_column('SIRET', table, 'siret', 'siret', 2),
|
siret: create_column('SIRET', table, 'siret', 'siret', 2),
|
||||||
libelle: create_column('Nom établissement', table, 'libelle_naf', 'libelle_naf', 3),
|
libelle: create_column('Nom établissement', table, 'libelle_naf', 'libelle_naf', 3),
|
||||||
code_postal: create_column('Code postal', table, 'code_postal', 'code_postal', 1)
|
code_postal: create_column('Code postal', table, 'code_postal', 'code_postal', 1)
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -100,19 +106,19 @@ class BuildDefaultPreferenceListDossier < ActiveRecord::Migration
|
||||||
table = 'user'
|
table = 'user'
|
||||||
|
|
||||||
{
|
{
|
||||||
email: create_column('Email', table, 'email', 'email', 2)
|
email: create_column('Email', table, 'email', 'email', 2)
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.create_column libelle, table, attr, attr_decorate, bootstrap_lg
|
def self.create_column libelle, table, attr, attr_decorate, bootstrap_lg
|
||||||
{
|
{
|
||||||
libelle: libelle,
|
libelle: libelle,
|
||||||
table: table,
|
table: table,
|
||||||
attr: attr,
|
attr: attr,
|
||||||
attr_decorate: attr_decorate,
|
attr_decorate: attr_decorate,
|
||||||
bootstrap_lg: bootstrap_lg,
|
bootstrap_lg: bootstrap_lg,
|
||||||
order: nil,
|
order: nil,
|
||||||
filter: nil
|
filter: nil
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -5,12 +5,12 @@ class ResetAllPreferenceListDossier < ActiveRecord::Migration
|
||||||
|
|
||||||
def self.available_columns_for procedure_id = nil
|
def self.available_columns_for procedure_id = nil
|
||||||
columns = {
|
columns = {
|
||||||
dossier: columns_dossier,
|
dossier: columns_dossier,
|
||||||
procedure: columns_procedure,
|
procedure: columns_procedure,
|
||||||
entreprise: columns_entreprise,
|
entreprise: columns_entreprise,
|
||||||
etablissement: columns_etablissement,
|
etablissement: columns_etablissement,
|
||||||
user: columns_user,
|
user: columns_user,
|
||||||
france_connect: columns_france_connect
|
france_connect: columns_france_connect
|
||||||
}
|
}
|
||||||
columns
|
columns
|
||||||
end
|
end
|
||||||
|
@ -21,10 +21,10 @@ class ResetAllPreferenceListDossier < ActiveRecord::Migration
|
||||||
table = nil
|
table = nil
|
||||||
|
|
||||||
{
|
{
|
||||||
dossier_id: create_column('ID', table, 'id', 'id', 1),
|
dossier_id: create_column('ID', table, 'id', 'id', 1),
|
||||||
created_at: create_column('Créé le', table, 'created_at', 'first_creation', 2),
|
created_at: create_column('Créé le', table, 'created_at', 'first_creation', 2),
|
||||||
updated_at: create_column('Mise à jour le', table, 'updated_at', 'last_update', 2),
|
updated_at: create_column('Mise à jour le', table, 'updated_at', 'last_update', 2),
|
||||||
state: create_column('Statut', table, 'state', 'display_state', 1)
|
state: create_column('Statut', table, 'state', 'display_state', 1)
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -32,9 +32,9 @@ class ResetAllPreferenceListDossier < ActiveRecord::Migration
|
||||||
table = 'procedure'
|
table = 'procedure'
|
||||||
|
|
||||||
{
|
{
|
||||||
libelle: create_column('Libellé procédure', table, 'libelle', 'libelle', 4),
|
libelle: create_column('Libellé procédure', table, 'libelle', 'libelle', 4),
|
||||||
organisation: create_column('Organisation', table, 'organisation', 'organisation', 3),
|
organisation: create_column('Organisation', table, 'organisation', 'organisation', 3),
|
||||||
direction: create_column('Direction', table, 'direction', 'direction', 3)
|
direction: create_column('Direction', table, 'direction', 'direction', 3)
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -42,12 +42,12 @@ class ResetAllPreferenceListDossier < ActiveRecord::Migration
|
||||||
table = 'entreprise'
|
table = 'entreprise'
|
||||||
|
|
||||||
{
|
{
|
||||||
siren: create_column('SIREN', table, 'siren', 'siren', 2),
|
siren: create_column('SIREN', table, 'siren', 'siren', 2),
|
||||||
forme_juridique: create_column('Forme juridique', table, 'forme_juridique', 'forme_juridique', 3),
|
forme_juridique: create_column('Forme juridique', table, 'forme_juridique', 'forme_juridique', 3),
|
||||||
nom_commercial: create_column('Nom commercial', table, 'nom_commercial', 'nom_commercial', 3),
|
nom_commercial: create_column('Nom commercial', table, 'nom_commercial', 'nom_commercial', 3),
|
||||||
raison_sociale: create_column('Raison sociale', table, 'raison_sociale', 'raison_sociale', 3),
|
raison_sociale: create_column('Raison sociale', table, 'raison_sociale', 'raison_sociale', 3),
|
||||||
siret_siege_social: create_column('SIRET siège social', table, 'siret_siege_social', 'siret_siege_social', 2),
|
siret_siege_social: create_column('SIRET siège social', table, 'siret_siege_social', 'siret_siege_social', 2),
|
||||||
date_creation: create_column('Date de création', table, 'date_creation', 'date_creation', 2),
|
date_creation: create_column('Date de création', table, 'date_creation', 'date_creation', 2),
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -55,16 +55,16 @@ class ResetAllPreferenceListDossier < ActiveRecord::Migration
|
||||||
table = 'etablissement'
|
table = 'etablissement'
|
||||||
|
|
||||||
{
|
{
|
||||||
siret: create_column('SIRET', table, 'siret', 'siret', 2),
|
siret: create_column('SIRET', table, 'siret', 'siret', 2),
|
||||||
libelle: create_column('Nom établissement', table, 'libelle_naf', 'libelle_naf', 3),
|
libelle: create_column('Nom établissement', table, 'libelle_naf', 'libelle_naf', 3),
|
||||||
code_postal: create_column('Code postal', table, 'code_postal', 'code_postal', 1)
|
code_postal: create_column('Code postal', table, 'code_postal', 'code_postal', 1)
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.columns_user
|
def self.columns_user
|
||||||
table = 'user'
|
table = 'user'
|
||||||
{
|
{
|
||||||
email: create_column('Email', table, 'email', 'email', 2)
|
email: create_column('Email', table, 'email', 'email', 2)
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -72,21 +72,21 @@ class ResetAllPreferenceListDossier < ActiveRecord::Migration
|
||||||
table = 'france_connect_information'
|
table = 'france_connect_information'
|
||||||
|
|
||||||
{
|
{
|
||||||
gender: create_column('Civilité (FC)', table, 'gender', 'gender_fr', 1),
|
gender: create_column('Civilité (FC)', table, 'gender', 'gender_fr', 1),
|
||||||
given_name: create_column('Prénom (FC)', table, 'given_name', 'given_name', 2),
|
given_name: create_column('Prénom (FC)', table, 'given_name', 'given_name', 2),
|
||||||
family_name: create_column('Nom (FC)', table, 'family_name', 'family_name', 2)
|
family_name: create_column('Nom (FC)', table, 'family_name', 'family_name', 2)
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.create_column libelle, table, attr, attr_decorate, bootstrap_lg
|
def self.create_column libelle, table, attr, attr_decorate, bootstrap_lg
|
||||||
{
|
{
|
||||||
libelle: libelle,
|
libelle: libelle,
|
||||||
table: table,
|
table: table,
|
||||||
attr: attr,
|
attr: attr,
|
||||||
attr_decorate: attr_decorate,
|
attr_decorate: attr_decorate,
|
||||||
bootstrap_lg: bootstrap_lg,
|
bootstrap_lg: bootstrap_lg,
|
||||||
order: nil,
|
order: nil,
|
||||||
filter: nil
|
filter: nil
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -100,15 +100,15 @@ class ResetAllPreferenceListDossier < ActiveRecord::Migration
|
||||||
table.second.each do |column|
|
table.second.each do |column|
|
||||||
if valid_couple_table_attr? table.first, column.first
|
if valid_couple_table_attr? table.first, column.first
|
||||||
PreferenceListDossier.create(
|
PreferenceListDossier.create(
|
||||||
libelle: column.second[:libelle],
|
libelle: column.second[:libelle],
|
||||||
table: column.second[:table],
|
table: column.second[:table],
|
||||||
attr: column.second[:attr],
|
attr: column.second[:attr],
|
||||||
attr_decorate: column.second[:attr_decorate],
|
attr_decorate: column.second[:attr_decorate],
|
||||||
bootstrap_lg: column.second[:bootstrap_lg],
|
bootstrap_lg: column.second[:bootstrap_lg],
|
||||||
order: nil,
|
order: nil,
|
||||||
filter: nil,
|
filter: nil,
|
||||||
procedure_id: procedure_id,
|
procedure_id: procedure_id,
|
||||||
gestionnaire: self
|
gestionnaire: self
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -118,22 +118,28 @@ class ResetAllPreferenceListDossier < ActiveRecord::Migration
|
||||||
private
|
private
|
||||||
|
|
||||||
def valid_couple_table_attr? table, column
|
def valid_couple_table_attr? table, column
|
||||||
couples = [{
|
couples = [
|
||||||
table: :dossier,
|
{
|
||||||
column: :dossier_id
|
table: :dossier,
|
||||||
}, {
|
column: :dossier_id
|
||||||
table: :procedure,
|
},
|
||||||
column: :libelle
|
{
|
||||||
}, {
|
table: :procedure,
|
||||||
table: :etablissement,
|
column: :libelle
|
||||||
column: :siret
|
},
|
||||||
}, {
|
{
|
||||||
table: :entreprise,
|
table: :etablissement,
|
||||||
column: :raison_sociale
|
column: :siret
|
||||||
}, {
|
},
|
||||||
table: :dossier,
|
{
|
||||||
column: :state
|
table: :entreprise,
|
||||||
}]
|
column: :raison_sociale
|
||||||
|
},
|
||||||
|
{
|
||||||
|
table: :dossier,
|
||||||
|
column: :state
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
couples.include?({table: table, column: column})
|
couples.include?({table: table, column: column})
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
class RemoveDuplicateEmailReceived < ActiveRecord::Migration[5.0]
|
class RemoveDuplicateEmailReceived < ActiveRecord::Migration[5.0]
|
||||||
def change
|
def change
|
||||||
all_mails = MailReceived.all
|
all_mails = MailReceived.all
|
||||||
groupped = all_mails.group_by { |m| m.procedure_id }
|
groupped = all_mails.group_by { |m| m.procedure_id }
|
||||||
filtered = groupped.reject { |k, v| v.length < 2 }
|
filtered = groupped.reject { |k, v| v.length < 2 }
|
||||||
filtered.each do |k, duplicate_mails|
|
filtered.each do |k, duplicate_mails|
|
||||||
duplicate_mails.pop
|
duplicate_mails.pop
|
||||||
duplicate_mails.each(&:destroy)
|
duplicate_mails.each(&:destroy)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
class AddActiveToAdministrateurs < ActiveRecord::Migration[5.0]
|
||||||
|
def change
|
||||||
|
add_column :administrateurs, :active, :boolean, default: false
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,5 @@
|
||||||
|
class DropPreferenceDeviseProfils < ActiveRecord::Migration[5.0]
|
||||||
|
def change
|
||||||
|
drop_table :preference_devise_profils
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,5 @@
|
||||||
|
class DropPreferenceListDossiers < ActiveRecord::Migration[5.0]
|
||||||
|
def change
|
||||||
|
drop_table :preference_list_dossiers
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,5 @@
|
||||||
|
class DropPreferenceSmartListingPages < ActiveRecord::Migration[5.0]
|
||||||
|
def change
|
||||||
|
drop_table :preference_smart_listing_pages
|
||||||
|
end
|
||||||
|
end
|
35
db/schema.rb
35
db/schema.rb
|
@ -10,19 +10,19 @@
|
||||||
#
|
#
|
||||||
# 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: 20180108152958) do
|
ActiveRecord::Schema.define(version: 20180111153308) 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", 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"
|
||||||
|
@ -30,6 +30,7 @@ ActiveRecord::Schema.define(version: 20180108152958) do
|
||||||
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.index ["email"], name: "index_administrateurs_on_email", unique: true, using: :btree
|
t.index ["email"], name: "index_administrateurs_on_email", unique: true, using: :btree
|
||||||
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, using: :btree
|
||||||
end
|
end
|
||||||
|
@ -354,32 +355,6 @@ ActiveRecord::Schema.define(version: 20180108152958) do
|
||||||
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", using: :btree
|
||||||
end
|
end
|
||||||
|
|
||||||
create_table "preference_devise_profils", force: :cascade do |t|
|
|
||||||
t.string "last_current_devise_profil"
|
|
||||||
t.integer "administrateurs_id"
|
|
||||||
t.integer "gestionnaires_id"
|
|
||||||
t.integer "users_id"
|
|
||||||
end
|
|
||||||
|
|
||||||
create_table "preference_list_dossiers", force: :cascade do |t|
|
|
||||||
t.string "libelle"
|
|
||||||
t.string "table"
|
|
||||||
t.string "attr"
|
|
||||||
t.string "attr_decorate"
|
|
||||||
t.string "bootstrap_lg"
|
|
||||||
t.string "order"
|
|
||||||
t.string "filter"
|
|
||||||
t.integer "gestionnaire_id"
|
|
||||||
t.integer "procedure_id"
|
|
||||||
end
|
|
||||||
|
|
||||||
create_table "preference_smart_listing_pages", force: :cascade do |t|
|
|
||||||
t.string "liste"
|
|
||||||
t.integer "page"
|
|
||||||
t.integer "procedure_id"
|
|
||||||
t.integer "gestionnaire_id"
|
|
||||||
end
|
|
||||||
|
|
||||||
create_table "procedure_paths", force: :cascade do |t|
|
create_table "procedure_paths", force: :cascade do |t|
|
||||||
t.string "path"
|
t.string "path"
|
||||||
t.integer "procedure_id"
|
t.integer "procedure_id"
|
||||||
|
|
|
@ -23,7 +23,8 @@ namespace :'2017_10_06_set_follow_date' do
|
||||||
demande_seen_at: gestionnaire.current_sign_in_at,
|
demande_seen_at: gestionnaire.current_sign_in_at,
|
||||||
annotations_privees_seen_at: gestionnaire.current_sign_in_at,
|
annotations_privees_seen_at: gestionnaire.current_sign_in_at,
|
||||||
avis_seen_at: gestionnaire.current_sign_in_at,
|
avis_seen_at: gestionnaire.current_sign_in_at,
|
||||||
messagerie_seen_at: gestionnaire.current_sign_in_at)
|
messagerie_seen_at: gestionnaire.current_sign_in_at
|
||||||
|
)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
namespace :'2018_01_11_add_active_state_to_administrators' do
|
||||||
|
task set: :environment do
|
||||||
|
Administrateur.find_each do |administrateur|
|
||||||
|
administrateur.update_column(:active, true)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -2,15 +2,15 @@ namespace :cloudstorage do
|
||||||
task init: :environment do
|
task init: :environment do
|
||||||
os_config = (YAML.load_file(Fog.credentials_path))['default']
|
os_config = (YAML.load_file(Fog.credentials_path))['default']
|
||||||
@os = OpenStack::Connection.create(
|
@os = OpenStack::Connection.create(
|
||||||
{
|
{
|
||||||
username: os_config['openstack_username'],
|
username: os_config['openstack_username'],
|
||||||
api_key: os_config['openstack_api_key'],
|
api_key: os_config['openstack_api_key'],
|
||||||
auth_method: "password",
|
auth_method: "password",
|
||||||
auth_url: "https://auth.cloud.ovh.net/v2.0/",
|
auth_url: "https://auth.cloud.ovh.net/v2.0/",
|
||||||
authtenant_name: os_config['openstack_tenant'],
|
authtenant_name: os_config['openstack_tenant'],
|
||||||
service_type: "object-store",
|
service_type: "object-store",
|
||||||
region: os_config['openstack_region']
|
region: os_config['openstack_region']
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
@cont = @os.container(CarrierWave::Uploader::Base.fog_directory)
|
@cont = @os.container(CarrierWave::Uploader::Base.fog_directory)
|
||||||
end
|
end
|
||||||
|
|
|
@ -14,40 +14,37 @@ namespace :dev do
|
||||||
puts 'creating token.rb file'
|
puts 'creating token.rb file'
|
||||||
res = `rake secret`.delete("\n")
|
res = `rake secret`.delete("\n")
|
||||||
file = File.new('config/initializers/token.rb', 'w+')
|
file = File.new('config/initializers/token.rb', 'w+')
|
||||||
comment = <<EOF
|
|
||||||
EOF
|
|
||||||
file.write(comment)
|
|
||||||
file.write("TPS::Application.config.SIADETOKEN = '#{res}'")
|
file.write("TPS::Application.config.SIADETOKEN = '#{res}'")
|
||||||
file.close
|
file.close
|
||||||
end
|
end
|
||||||
|
|
||||||
task :generate_franceconnect_file do
|
task :generate_franceconnect_file do
|
||||||
file = File.new('config/france_connect.yml', 'w+')
|
file = File.new('config/france_connect.yml', 'w+')
|
||||||
comment = <<EOF
|
comment = <<~EOF
|
||||||
particulier_identifier: plop
|
particulier_identifier: plop
|
||||||
particulier_secret: plip
|
particulier_secret: plip
|
||||||
|
|
||||||
particulier_redirect_uri: 'http://localhost:3000/france_connect/particulier/callback'
|
particulier_redirect_uri: 'http://localhost:3000/france_connect/particulier/callback'
|
||||||
|
|
||||||
particulier_authorization_endpoint: 'https://fcp.integ01.dev-franceconnect.fr/api/v1/authorize'
|
particulier_authorization_endpoint: 'https://fcp.integ01.dev-franceconnect.fr/api/v1/authorize'
|
||||||
particulier_token_endpoint: 'https://fcp.integ01.dev-franceconnect.fr/api/v1/token'
|
particulier_token_endpoint: 'https://fcp.integ01.dev-franceconnect.fr/api/v1/token'
|
||||||
particulier_userinfo_endpoint: 'https://fcp.integ01.dev-franceconnect.fr/api/v1/userinfo'
|
particulier_userinfo_endpoint: 'https://fcp.integ01.dev-franceconnect.fr/api/v1/userinfo'
|
||||||
particulier_logout_endpoint: 'https://fcp.integ01.dev-franceconnect.fr/api/v1/logout'
|
particulier_logout_endpoint: 'https://fcp.integ01.dev-franceconnect.fr/api/v1/logout'
|
||||||
EOF
|
EOF
|
||||||
file.write(comment)
|
file.write(comment)
|
||||||
file.close
|
file.close
|
||||||
end
|
end
|
||||||
|
|
||||||
task :generate_fog_credentials_file do
|
task :generate_fog_credentials_file do
|
||||||
puts 'creating fog_credentials.test.yml file'
|
puts 'creating fog_credentials.test.yml file'
|
||||||
content = <<EOF
|
content = <<~EOF
|
||||||
default:
|
default:
|
||||||
openstack_tenant: "ovh_fake_tenant_name"
|
openstack_tenant: "ovh_fake_tenant_name"
|
||||||
openstack_api_key: "ovh_fake_password"
|
openstack_api_key: "ovh_fake_password"
|
||||||
openstack_username: "ovh_fake_username"
|
openstack_username: "ovh_fake_username"
|
||||||
openstack_auth_url: "https://auth.cloud.ovh.net/v2.0/tokens"
|
openstack_auth_url: "https://auth.cloud.ovh.net/v2.0/tokens"
|
||||||
openstack_region: "SBG1"
|
openstack_region: "SBG1"
|
||||||
EOF
|
EOF
|
||||||
file = File.new("config/fog_credentials.test.yml", "w+")
|
file = File.new("config/fog_credentials.test.yml", "w+")
|
||||||
file.write(content)
|
file.write(content)
|
||||||
file.close
|
file.close
|
||||||
|
@ -55,9 +52,9 @@ EOF
|
||||||
|
|
||||||
task :generate_features_file do
|
task :generate_features_file do
|
||||||
puts 'creating features.yml file'
|
puts 'creating features.yml file'
|
||||||
content = <<EOF
|
content = <<~EOF
|
||||||
remote_storage: true
|
remote_storage: true
|
||||||
EOF
|
EOF
|
||||||
file = File.new("config/initializers/features.yml", "w+")
|
file = File.new("config/initializers/features.yml", "w+")
|
||||||
file.write(content)
|
file.write(content)
|
||||||
file.close
|
file.close
|
||||||
|
|
|
@ -19,8 +19,10 @@ describe Admin::AttestationTemplatesController, type: :controller do
|
||||||
|
|
||||||
before do
|
before do
|
||||||
post :preview,
|
post :preview,
|
||||||
params: { procedure_id: procedure.id,
|
params: {
|
||||||
attestation_template: upload_params }
|
procedure_id: procedure.id,
|
||||||
|
attestation_template: upload_params
|
||||||
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'with an interlaced png' do
|
context 'with an interlaced png' do
|
||||||
|
@ -73,8 +75,10 @@ describe Admin::AttestationTemplatesController, type: :controller do
|
||||||
context 'nominal' do
|
context 'nominal' do
|
||||||
before do
|
before do
|
||||||
post :create,
|
post :create,
|
||||||
params: { procedure_id: procedure.id,
|
params: {
|
||||||
attestation_template: attestation_params.merge(logo: logo, signature: signature) }
|
procedure_id: procedure.id,
|
||||||
|
attestation_template: attestation_params.merge(logo: logo, signature: signature)
|
||||||
|
}
|
||||||
procedure.reload
|
procedure.reload
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -96,8 +100,10 @@ describe Admin::AttestationTemplatesController, type: :controller do
|
||||||
.and_return(double(full_messages: ['nop']))
|
.and_return(double(full_messages: ['nop']))
|
||||||
|
|
||||||
post :create,
|
post :create,
|
||||||
params: { procedure_id: procedure.id,
|
params: {
|
||||||
attestation_template: attestation_params }
|
procedure_id: procedure.id,
|
||||||
|
attestation_template: attestation_params
|
||||||
|
}
|
||||||
procedure.reload
|
procedure.reload
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -113,8 +119,10 @@ describe Admin::AttestationTemplatesController, type: :controller do
|
||||||
context 'nominal' do
|
context 'nominal' do
|
||||||
before do
|
before do
|
||||||
patch :update,
|
patch :update,
|
||||||
params: { procedure_id: procedure.id,
|
params: {
|
||||||
attestation_template: attestation_params_with_images }
|
procedure_id: procedure.id,
|
||||||
|
attestation_template: attestation_params_with_images
|
||||||
|
}
|
||||||
procedure.reload
|
procedure.reload
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -134,8 +142,10 @@ describe Admin::AttestationTemplatesController, type: :controller do
|
||||||
.and_return(double(full_messages: ['nop']))
|
.and_return(double(full_messages: ['nop']))
|
||||||
|
|
||||||
patch :update,
|
patch :update,
|
||||||
params: { procedure_id: procedure.id,
|
params: {
|
||||||
attestation_template: attestation_params_with_images }
|
procedure_id: procedure.id,
|
||||||
|
attestation_template: attestation_params_with_images
|
||||||
|
}
|
||||||
procedure.reload
|
procedure.reload
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -24,10 +24,11 @@ describe Admin::MailTemplatesController, type: :controller do
|
||||||
|
|
||||||
before :each do
|
before :each do
|
||||||
patch :update,
|
patch :update,
|
||||||
params: { procedure_id: procedure.id,
|
params: {
|
||||||
id: initiated_mail.class.const_get(:SLUG),
|
procedure_id: procedure.id,
|
||||||
mail_template: { subject: mail_subject, body: mail_body }
|
id: initiated_mail.class.const_get(:SLUG),
|
||||||
}
|
mail_template: { subject: mail_subject, body: mail_body }
|
||||||
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
it { expect(response).to redirect_to admin_procedure_mail_templates_path(procedure) }
|
it { expect(response).to redirect_to admin_procedure_mail_templates_path(procedure) }
|
||||||
|
|
|
@ -36,14 +36,14 @@ describe Admin::PiecesJustificativesController, type: :controller do
|
||||||
let(:description) { "relevé d'identité bancaire" }
|
let(:description) { "relevé d'identité bancaire" }
|
||||||
let(:update_params) do
|
let(:update_params) do
|
||||||
{
|
{
|
||||||
types_de_piece_justificative_attributes:
|
types_de_piece_justificative_attributes:
|
||||||
|
{
|
||||||
|
'0' =>
|
||||||
{
|
{
|
||||||
'0' =>
|
libelle: libelle,
|
||||||
{
|
description: description
|
||||||
libelle: libelle,
|
|
||||||
description: description
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -18,17 +18,17 @@ describe Admin::ProceduresController, type: :controller do
|
||||||
|
|
||||||
let(:procedure_params) {
|
let(:procedure_params) {
|
||||||
{
|
{
|
||||||
libelle: libelle,
|
libelle: libelle,
|
||||||
description: description,
|
description: description,
|
||||||
organisation: organisation,
|
organisation: organisation,
|
||||||
direction: direction,
|
direction: direction,
|
||||||
lien_demarche: lien_demarche,
|
lien_demarche: lien_demarche,
|
||||||
cerfa_flag: cerfa_flag,
|
cerfa_flag: cerfa_flag,
|
||||||
module_api_carto_attributes: {
|
module_api_carto_attributes: {
|
||||||
use_api_carto: use_api_carto,
|
use_api_carto: use_api_carto,
|
||||||
quartiers_prioritaires: quartiers_prioritaires,
|
quartiers_prioritaires: quartiers_prioritaires,
|
||||||
cadastre: cadastre
|
cadastre: cadastre
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -41,27 +41,26 @@ describe Admin::TypesDeChampController, type: :controller do
|
||||||
let(:mandatory) { 'on' }
|
let(:mandatory) { 'on' }
|
||||||
|
|
||||||
let(:procedure_params) do
|
let(:procedure_params) do
|
||||||
{types_de_champ_attributes:
|
{
|
||||||
{'0' =>
|
types_de_champ_attributes: {
|
||||||
{
|
'0' => {
|
||||||
libelle: libelle,
|
libelle: libelle,
|
||||||
type_champ: type_champ,
|
type_champ: type_champ,
|
||||||
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
|
||||||
},
|
},
|
||||||
'1' =>
|
'1' => {
|
||||||
{
|
libelle: '',
|
||||||
libelle: '',
|
type_champ: 'text',
|
||||||
type_champ: 'text',
|
description: '',
|
||||||
description: '',
|
order_place: '1',
|
||||||
order_place: '1',
|
id: '',
|
||||||
id: '',
|
mandatory: false,
|
||||||
mandatory: false,
|
type: 'TypeDeChampPublic'
|
||||||
type: 'TypeDeChampPublic'
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -41,28 +41,27 @@ describe Admin::TypesDeChampPrivateController, type: :controller do
|
||||||
let(:mandatory) { 'on' }
|
let(:mandatory) { 'on' }
|
||||||
|
|
||||||
let(:procedure_params) do
|
let(:procedure_params) do
|
||||||
{types_de_champ_private_attributes:
|
{
|
||||||
{'0' =>
|
types_de_champ_private_attributes: {
|
||||||
{
|
'0' => {
|
||||||
libelle: libelle,
|
libelle: libelle,
|
||||||
type_champ: type_champ,
|
type_champ: type_champ,
|
||||||
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'
|
type: 'TypeDeChampPrivate'
|
||||||
},
|
},
|
||||||
'1' =>
|
'1' => {
|
||||||
{
|
libelle: '',
|
||||||
libelle: '',
|
type_champ: 'text',
|
||||||
type_champ: 'text',
|
description: '',
|
||||||
description: '',
|
order_place: '1',
|
||||||
order_place: '1',
|
id: '',
|
||||||
id: '',
|
mandatory: false,
|
||||||
mandatory: false,
|
type: 'TypeDeChampPrivate'
|
||||||
type: 'TypeDeChampPrivate'
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -27,7 +27,7 @@ describe AdministrationsController, type: :controller do
|
||||||
sign_in administration
|
sign_in administration
|
||||||
end
|
end
|
||||||
|
|
||||||
subject { post :create, administrateur: {email: email, password: password} }
|
subject { post :create, administrateur: {email: email } }
|
||||||
|
|
||||||
context 'when email and password are correct' do
|
context 'when email and password are correct' do
|
||||||
it 'add new administrateur in database' do
|
it 'add new administrateur in database' do
|
||||||
|
@ -37,6 +37,8 @@ describe AdministrationsController, type: :controller do
|
||||||
it 'alert new mail are send' do
|
it 'alert new mail are send' do
|
||||||
expect(AdministrationMailer).to receive(:new_admin_email).and_return(AdministrationMailer)
|
expect(AdministrationMailer).to receive(:new_admin_email).and_return(AdministrationMailer)
|
||||||
expect(AdministrationMailer).to receive(:deliver_now!)
|
expect(AdministrationMailer).to receive(:deliver_now!)
|
||||||
|
expect(AdministrationMailer).to receive(:invite_admin).and_return(AdministrationMailer)
|
||||||
|
expect(AdministrationMailer).to receive(:deliver_now!)
|
||||||
subject
|
subject
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -132,7 +132,8 @@ describe API::V1::DossiersController do
|
||||||
it { expect(subject.keys).to match_array(field_list) }
|
it { expect(subject.keys).to match_array(field_list) }
|
||||||
|
|
||||||
describe 'entreprise' do
|
describe 'entreprise' do
|
||||||
let(:field_list) { [
|
let(:field_list) {
|
||||||
|
[
|
||||||
:siren,
|
:siren,
|
||||||
:capital_social,
|
:capital_social,
|
||||||
:numero_tva_intracommunautaire,
|
:numero_tva_intracommunautaire,
|
||||||
|
@ -144,7 +145,8 @@ describe API::V1::DossiersController do
|
||||||
:code_effectif_entreprise,
|
:code_effectif_entreprise,
|
||||||
:date_creation,
|
:date_creation,
|
||||||
:nom,
|
:nom,
|
||||||
:prenom]
|
:prenom
|
||||||
|
]
|
||||||
}
|
}
|
||||||
subject { super()[:entreprise] }
|
subject { super()[:entreprise] }
|
||||||
|
|
||||||
|
@ -162,11 +164,7 @@ describe API::V1::DossiersController do
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'types_de_piece_justificative' do
|
describe 'types_de_piece_justificative' do
|
||||||
let(:field_list) { [
|
let(:field_list) { [:id, :libelle, :description] }
|
||||||
:id,
|
|
||||||
:libelle,
|
|
||||||
:description]
|
|
||||||
}
|
|
||||||
subject { super()[:types_de_piece_justificative] }
|
subject { super()[:types_de_piece_justificative] }
|
||||||
|
|
||||||
it { expect(subject.length).to eq 2 }
|
it { expect(subject.length).to eq 2 }
|
||||||
|
@ -185,9 +183,7 @@ describe API::V1::DossiersController do
|
||||||
create :piece_justificative, :rib, dossier: dossier, type_de_piece_justificative: dossier.procedure.types_de_piece_justificative.first, user: dossier.user
|
create :piece_justificative, :rib, dossier: dossier, type_de_piece_justificative: dossier.procedure.types_de_piece_justificative.first, user: dossier.user
|
||||||
end
|
end
|
||||||
|
|
||||||
let(:field_list) { [
|
let(:field_list) { [:url, :created_at, :type_de_piece_justificative_id] }
|
||||||
:url, :created_at, :type_de_piece_justificative_id]
|
|
||||||
}
|
|
||||||
subject { super()[:pieces_justificatives].first }
|
subject { super()[:pieces_justificatives].first }
|
||||||
|
|
||||||
it { expect(subject.keys.include?(:content_url)).to be_truthy }
|
it { expect(subject.keys.include?(:content_url)).to be_truthy }
|
||||||
|
@ -204,9 +200,7 @@ describe API::V1::DossiersController do
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'champs' do
|
describe 'champs' do
|
||||||
let(:field_list) { [
|
let(:field_list) { [:url] }
|
||||||
:url]
|
|
||||||
}
|
|
||||||
subject { super()[:champs] }
|
subject { super()[:champs] }
|
||||||
|
|
||||||
it { expect(subject.length).to eq 1 }
|
it { expect(subject.length).to eq 1 }
|
||||||
|
@ -218,12 +212,14 @@ describe API::V1::DossiersController do
|
||||||
it { expect(subject.keys.include?(:type_de_champ)).to be_truthy }
|
it { expect(subject.keys.include?(:type_de_champ)).to be_truthy }
|
||||||
|
|
||||||
describe 'type de champ' do
|
describe 'type de champ' do
|
||||||
let(:field_list) { [
|
let(:field_list) {
|
||||||
|
[
|
||||||
:id,
|
:id,
|
||||||
:libelle,
|
:libelle,
|
||||||
:description,
|
:description,
|
||||||
:order_place,
|
:order_place,
|
||||||
:type]
|
:type
|
||||||
|
]
|
||||||
}
|
}
|
||||||
subject { super()[:type_de_champ] }
|
subject { super()[:type_de_champ] }
|
||||||
|
|
||||||
|
@ -277,9 +273,7 @@ describe API::V1::DossiersController do
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'champs_private' do
|
describe 'champs_private' do
|
||||||
let(:field_list) { [
|
let(:field_list) { [:url] }
|
||||||
:url]
|
|
||||||
}
|
|
||||||
subject { super()[:champs_private] }
|
subject { super()[:champs_private] }
|
||||||
|
|
||||||
it { expect(subject.length).to eq 1 }
|
it { expect(subject.length).to eq 1 }
|
||||||
|
@ -291,12 +285,14 @@ describe API::V1::DossiersController do
|
||||||
it { expect(subject.keys.include?(:type_de_champ)).to be_truthy }
|
it { expect(subject.keys.include?(:type_de_champ)).to be_truthy }
|
||||||
|
|
||||||
describe 'type de champ' do
|
describe 'type de champ' do
|
||||||
let(:field_list) { [
|
let(:field_list) {
|
||||||
|
[
|
||||||
:id,
|
:id,
|
||||||
:libelle,
|
:libelle,
|
||||||
:description,
|
:description,
|
||||||
:order_place,
|
:order_place,
|
||||||
:type]
|
:type
|
||||||
|
]
|
||||||
}
|
}
|
||||||
subject { super()[:type_de_champ] }
|
subject { super()[:type_de_champ] }
|
||||||
|
|
||||||
|
@ -343,9 +339,7 @@ describe API::V1::DossiersController do
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'user' do
|
describe 'user' do
|
||||||
let(:field_list) { [
|
let(:field_list) { [:url, :created_at, :type_de_piece_justificative_id] }
|
||||||
:url, :created_at, :type_de_piece_justificative_id]
|
|
||||||
}
|
|
||||||
subject { super()[:user] }
|
subject { super()[:user] }
|
||||||
|
|
||||||
it { expect(subject[:email]).not_to be_nil }
|
it { expect(subject[:email]).not_to be_nil }
|
||||||
|
@ -353,7 +347,8 @@ describe API::V1::DossiersController do
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'etablissement' do
|
describe 'etablissement' do
|
||||||
let(:field_list) { [
|
let(:field_list) {
|
||||||
|
[
|
||||||
:siret,
|
:siret,
|
||||||
:siege_social,
|
:siege_social,
|
||||||
:naf,
|
:naf,
|
||||||
|
|
|
@ -11,7 +11,7 @@ describe FranceConnect::ParticulierController, type: :controller do
|
||||||
let(:email) { 'test@test.com' }
|
let(:email) { 'test@test.com' }
|
||||||
let(:password) { '' }
|
let(:password) { '' }
|
||||||
|
|
||||||
let(:user_info) { Hashie::Mash.new(france_connect_particulier_id: france_connect_particulier_id, given_name: given_name, family_name: family_name, birthdate: birthdate, birthplace: birthplace, gender: gender, email: email, password: password) }
|
let(:user_info) { { france_connect_particulier_id: france_connect_particulier_id, given_name: given_name, family_name: family_name, birthdate: birthdate, birthplace: birthplace, gender: gender, email_france_connect: email } }
|
||||||
|
|
||||||
describe '.auth' do
|
describe '.auth' do
|
||||||
it 'redirect to france connect serveur' do
|
it 'redirect to france connect serveur' do
|
||||||
|
@ -31,7 +31,8 @@ describe FranceConnect::ParticulierController, type: :controller do
|
||||||
context 'when params code is present' do
|
context 'when params code is present' do
|
||||||
context 'when code is correct' do
|
context 'when code is correct' do
|
||||||
before do
|
before do
|
||||||
allow(FranceConnectService).to receive(:retrieve_user_informations_particulier).and_return(user_info)
|
allow(FranceConnectService).to receive(:retrieve_user_informations_particulier)
|
||||||
|
.and_return(FranceConnectInformation.new(user_info))
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when france_connect_particulier_id exist in database' do
|
context 'when france_connect_particulier_id exist in database' do
|
||||||
|
|
|
@ -18,21 +18,25 @@ describe Gestionnaires::PasswordsController, type: :controller do
|
||||||
end
|
end
|
||||||
|
|
||||||
it "also signs user in" do
|
it "also signs user in" do
|
||||||
put :update, params: {gestionnaire: {
|
put :update, params: {
|
||||||
reset_password_token: @token,
|
gestionnaire: {
|
||||||
password: "supersecret",
|
reset_password_token: @token,
|
||||||
password_confirmation: "supersecret",
|
password: "supersecret",
|
||||||
}}
|
password_confirmation: "supersecret"
|
||||||
|
}
|
||||||
|
}
|
||||||
expect(subject.current_gestionnaire).to eq(gestionnaire)
|
expect(subject.current_gestionnaire).to eq(gestionnaire)
|
||||||
expect(subject.current_user).to eq(user)
|
expect(subject.current_user).to eq(user)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "also signs administrateur in" do
|
it "also signs administrateur in" do
|
||||||
put :update, params: {gestionnaire: {
|
put :update, params: {
|
||||||
reset_password_token: @token,
|
gestionnaire: {
|
||||||
password: "supersecret",
|
reset_password_token: @token,
|
||||||
password_confirmation: "supersecret",
|
password: "supersecret",
|
||||||
}}
|
password_confirmation: "supersecret"
|
||||||
|
}
|
||||||
|
}
|
||||||
expect(subject.current_administrateur).to eq(administrateur)
|
expect(subject.current_administrateur).to eq(administrateur)
|
||||||
expect(subject.current_user).to eq(user)
|
expect(subject.current_user).to eq(user)
|
||||||
end
|
end
|
||||||
|
|
|
@ -220,11 +220,13 @@ describe NewGestionnaire::AvisController, type: :controller do
|
||||||
.with(avis_id.to_s, invited_email)
|
.with(avis_id.to_s, invited_email)
|
||||||
.and_return(invitations_email)
|
.and_return(invitations_email)
|
||||||
|
|
||||||
post :create_gestionnaire, params: { id: avis_id,
|
post :create_gestionnaire, params: {
|
||||||
email: invited_email,
|
id: avis_id,
|
||||||
gestionnaire: {
|
email: invited_email,
|
||||||
password: password
|
gestionnaire: {
|
||||||
} }
|
password: password
|
||||||
|
}
|
||||||
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when the email does not belong to the invitation' do
|
context 'when the email does not belong to the invitation' do
|
||||||
|
|
|
@ -230,10 +230,12 @@ describe NewGestionnaire::DossiersController, type: :controller do
|
||||||
let(:procedure) { create(:procedure, :published, attestation_template: template, gestionnaires: [gestionnaire]) }
|
let(:procedure) { create(:procedure, :published, attestation_template: template, gestionnaires: [gestionnaire]) }
|
||||||
|
|
||||||
subject do
|
subject do
|
||||||
post :terminer, params: { process_action: "accepter",
|
post :terminer, params: {
|
||||||
procedure_id: procedure.id,
|
process_action: "accepter",
|
||||||
dossier_id: dossier.id,
|
procedure_id: procedure.id,
|
||||||
dossier: { motivation: "Yallah" }}
|
dossier_id: dossier.id,
|
||||||
|
dossier: { motivation: "Yallah" }
|
||||||
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
before do
|
before do
|
||||||
|
|
|
@ -45,7 +45,7 @@ describe RootController, type: :controller do
|
||||||
|
|
||||||
before do
|
before do
|
||||||
stub_request(:get, "https://api.github.com/repos/betagouv/tps/releases/latest")
|
stub_request(:get, "https://api.github.com/repos/betagouv/tps/releases/latest")
|
||||||
.to_return(:status => 200, :body => '{"tag_name": "plip", "body": "blabla", "published_at": "2016-02-09T16:46:47Z"}', :headers => {})
|
.to_return(:status => 200, :body => '{"tag_name": "plip", "body": "blabla", "published_at": "2016-02-09T16:46:47Z"}', :headers => {})
|
||||||
|
|
||||||
subject
|
subject
|
||||||
end
|
end
|
||||||
|
|
|
@ -18,11 +18,12 @@ describe StatsController, type: :controller do
|
||||||
|
|
||||||
subject { @controller.send(:last_four_months_hash, association, :updated_at) }
|
subject { @controller.send(:last_four_months_hash, association, :updated_at) }
|
||||||
|
|
||||||
it { expect(subject).to match_array([
|
it do
|
||||||
[I18n.l(62.days.ago.beginning_of_month, format: "%B %Y"), 2],
|
expect(subject).to match_array([
|
||||||
[I18n.l(31.days.ago.beginning_of_month, format: "%B %Y"), 1]
|
[I18n.l(62.days.ago.beginning_of_month, format: "%B %Y"), 2],
|
||||||
|
[I18n.l(31.days.ago.beginning_of_month, format: "%B %Y"), 1]
|
||||||
])
|
])
|
||||||
}
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context "while a super admin is logged in" do
|
context "while a super admin is logged in" do
|
||||||
|
@ -41,11 +42,12 @@ describe StatsController, type: :controller do
|
||||||
|
|
||||||
subject { @controller.send(:last_four_months_hash, association, :updated_at) }
|
subject { @controller.send(:last_four_months_hash, association, :updated_at) }
|
||||||
|
|
||||||
it { expect(subject).to eq([
|
it do
|
||||||
[I18n.l(45.days.ago.beginning_of_month, format: "%B %Y"), 1],
|
expect(subject).to eq([
|
||||||
[I18n.l(1.days.ago.beginning_of_month, format: "%B %Y"), 2]
|
[I18n.l(45.days.ago.beginning_of_month, format: "%B %Y"), 1],
|
||||||
|
[I18n.l(1.days.ago.beginning_of_month, format: "%B %Y"), 2]
|
||||||
])
|
])
|
||||||
}
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -68,12 +70,13 @@ describe StatsController, type: :controller do
|
||||||
|
|
||||||
subject { @controller.send(:cumulative_hash, association, :updated_at) }
|
subject { @controller.send(:cumulative_hash, association, :updated_at) }
|
||||||
|
|
||||||
it { expect(subject).to eq({
|
it do
|
||||||
|
expect(subject).to eq({
|
||||||
2.month.ago.beginning_of_month => 2,
|
2.month.ago.beginning_of_month => 2,
|
||||||
1.month.ago.beginning_of_month => 4,
|
1.month.ago.beginning_of_month => 4,
|
||||||
1.hour.ago.beginning_of_month => 5
|
1.hour.ago.beginning_of_month => 5
|
||||||
})
|
})
|
||||||
}
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context "while a super admin is not logged in" do
|
context "while a super admin is not logged in" do
|
||||||
|
@ -81,11 +84,12 @@ describe StatsController, type: :controller do
|
||||||
|
|
||||||
subject { @controller.send(:cumulative_hash, association, :updated_at) }
|
subject { @controller.send(:cumulative_hash, association, :updated_at) }
|
||||||
|
|
||||||
it { expect(subject).to eq({
|
it do
|
||||||
|
expect(subject).to eq({
|
||||||
2.month.ago.beginning_of_month => 2,
|
2.month.ago.beginning_of_month => 2,
|
||||||
1.month.ago.beginning_of_month => 4
|
1.month.ago.beginning_of_month => 4
|
||||||
})
|
})
|
||||||
}
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -82,8 +82,8 @@ shared_examples 'carte_controller_spec' do
|
||||||
|
|
||||||
before do
|
before do
|
||||||
allow_any_instance_of(CARTO::SGMAP::QuartiersPrioritaires::Adapter)
|
allow_any_instance_of(CARTO::SGMAP::QuartiersPrioritaires::Adapter)
|
||||||
.to receive(:to_params)
|
.to receive(:to_params)
|
||||||
.and_return({"QPCODE1234" => {:code => "QPCODE1234", :nom => "QP de test", :commune => "Paris", :geometry => {:type => "MultiPolygon", :coordinates => [[[[2.38715792094576, 48.8723062632126], [2.38724851642619, 48.8721392348061]]]]}}})
|
.and_return({"QPCODE1234" => {:code => "QPCODE1234", :nom => "QP de test", :commune => "Paris", :geometry => {:type => "MultiPolygon", :coordinates => [[[[2.38715792094576, 48.8723062632126], [2.38724851642619, 48.8721392348061]]]]}}})
|
||||||
|
|
||||||
post :save, params: {dossier_id: dossier.id, json_latlngs: json_latlngs}
|
post :save, params: {dossier_id: dossier.id, json_latlngs: json_latlngs}
|
||||||
end
|
end
|
||||||
|
@ -129,8 +129,8 @@ shared_examples 'carte_controller_spec' do
|
||||||
|
|
||||||
before do
|
before do
|
||||||
allow_any_instance_of(CARTO::SGMAP::Cadastre::Adapter)
|
allow_any_instance_of(CARTO::SGMAP::Cadastre::Adapter)
|
||||||
.to receive(:to_params)
|
.to receive(:to_params)
|
||||||
.and_return([{:surface_intersection => "0.0006", :surface_parcelle => 11252.692583090324, :numero => "0013", :feuille => 1, :section => "CD", :code_dep => "30", :nom_com => "Le Grau-du-Roi", :code_com => "133", :code_arr => "000", :geometry => {:type => "MultiPolygon", :coordinates => [[[[4.134084, 43.5209193], [4.1346615, 43.5212035], [4.1346984, 43.521189], [4.135096, 43.5213848], [4.1350839, 43.5214122], [4.1352697, 43.521505], [4.1356278, 43.5211065], [4.1357402, 43.5207188], [4.1350935, 43.5203936], [4.135002, 43.5204366], [4.1346051, 43.5202412], [4.134584, 43.5202472], [4.1345572, 43.5202551], [4.134356, 43.5203137], [4.1342488, 43.5203448], [4.134084, 43.5209193]]]]}}])
|
.and_return([{:surface_intersection => "0.0006", :surface_parcelle => 11252.692583090324, :numero => "0013", :feuille => 1, :section => "CD", :code_dep => "30", :nom_com => "Le Grau-du-Roi", :code_com => "133", :code_arr => "000", :geometry => {:type => "MultiPolygon", :coordinates => [[[[4.134084, 43.5209193], [4.1346615, 43.5212035], [4.1346984, 43.521189], [4.135096, 43.5213848], [4.1350839, 43.5214122], [4.1352697, 43.521505], [4.1356278, 43.5211065], [4.1357402, 43.5207188], [4.1350935, 43.5203936], [4.135002, 43.5204366], [4.1346051, 43.5202412], [4.134584, 43.5202472], [4.1345572, 43.5202551], [4.134356, 43.5203137], [4.1342488, 43.5203448], [4.134084, 43.5209193]]]]}}])
|
||||||
|
|
||||||
post :save, params: {dossier_id: dossier.id, json_latlngs: json_latlngs}
|
post :save, params: {dossier_id: dossier.id, json_latlngs: json_latlngs}
|
||||||
end
|
end
|
||||||
|
@ -184,7 +184,7 @@ shared_examples 'carte_controller_spec' do
|
||||||
dossier.update etablissement: nil
|
dossier.update etablissement: nil
|
||||||
|
|
||||||
stub_request(:get, /http:\/\/api-adresse[.]data[.]gouv[.]fr\/search[?]limit=1&q=/)
|
stub_request(:get, /http:\/\/api-adresse[.]data[.]gouv[.]fr\/search[?]limit=1&q=/)
|
||||||
.to_return(status: 200, body: '{"query": "babouba", "version": "draft", "licence": "ODbL 1.0", "features": [], "type": "FeatureCollection", "attribution": "BAN"}', headers: {})
|
.to_return(status: 200, body: '{"query": "babouba", "version": "draft", "licence": "ODbL 1.0", "features": [], "type": "FeatureCollection", "attribution": "BAN"}', headers: {})
|
||||||
get :get_position, params: {dossier_id: dossier.id}
|
get :get_position, params: {dossier_id: dossier.id}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -202,7 +202,7 @@ shared_examples 'carte_controller_spec' do
|
||||||
|
|
||||||
before do
|
before do
|
||||||
stub_request(:get, /http:\/\/api-adresse[.]data[.]gouv[.]fr\/search[?]limit=1&q=/)
|
stub_request(:get, /http:\/\/api-adresse[.]data[.]gouv[.]fr\/search[?]limit=1&q=/)
|
||||||
.to_return(status: 200, body: '{"query": "babouba", "version": "draft", "licence": "ODbL 1.0", "features": [], "type": "FeatureCollection", "attribution": "BAN"}', headers: {})
|
.to_return(status: 200, body: '{"query": "babouba", "version": "draft", "licence": "ODbL 1.0", "features": [], "type": "FeatureCollection", "attribution": "BAN"}', headers: {})
|
||||||
get :get_position, params: {dossier_id: dossier.id}
|
get :get_position, params: {dossier_id: dossier.id}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -217,7 +217,7 @@ shared_examples 'carte_controller_spec' do
|
||||||
context 'retour d\'un fichier JSON avec 3 attributs' do
|
context 'retour d\'un fichier JSON avec 3 attributs' do
|
||||||
before do
|
before do
|
||||||
stub_request(:get, "http://api-adresse.data.gouv.fr/search?limit=1&q=#{adresse}")
|
stub_request(:get, "http://api-adresse.data.gouv.fr/search?limit=1&q=#{adresse}")
|
||||||
.to_return(status: 200, body: '{"query": "50 avenue des champs u00e9lysu00e9es Paris 75008", "version": "draft", "licence": "ODbL 1.0", "features": [{"geometry": {"coordinates": [2.306888, 48.870374], "type": "Point"}, "type": "Feature", "properties": {"city": "Paris", "label": "50 Avenue des Champs u00c9lysu00e9es 75008 Paris", "housenumber": "50", "id": "ADRNIVX_0000000270748251", "postcode": "75008", "name": "50 Avenue des Champs u00c9lysu00e9es", "citycode": "75108", "context": "75, u00cele-de-France", "score": 0.9054545454545454, "type": "housenumber"}}], "type": "FeatureCollection", "attribution": "BAN"}', headers: {})
|
.to_return(status: 200, body: '{"query": "50 avenue des champs u00e9lysu00e9es Paris 75008", "version": "draft", "licence": "ODbL 1.0", "features": [{"geometry": {"coordinates": [2.306888, 48.870374], "type": "Point"}, "type": "Feature", "properties": {"city": "Paris", "label": "50 Avenue des Champs u00c9lysu00e9es 75008 Paris", "housenumber": "50", "id": "ADRNIVX_0000000270748251", "postcode": "75008", "name": "50 Avenue des Champs u00c9lysu00e9es", "citycode": "75108", "context": "75, u00cele-de-France", "score": 0.9054545454545454, "type": "housenumber"}}], "type": "FeatureCollection", "attribution": "BAN"}', headers: {})
|
||||||
|
|
||||||
get :get_position, params: {dossier_id: dossier.id}
|
get :get_position, params: {dossier_id: dossier.id}
|
||||||
end
|
end
|
||||||
|
@ -244,8 +244,8 @@ shared_examples 'carte_controller_spec' do
|
||||||
describe 'POST #get_qp' do
|
describe 'POST #get_qp' do
|
||||||
before do
|
before do
|
||||||
allow_any_instance_of(CARTO::SGMAP::QuartiersPrioritaires::Adapter)
|
allow_any_instance_of(CARTO::SGMAP::QuartiersPrioritaires::Adapter)
|
||||||
.to receive(:to_params)
|
.to receive(:to_params)
|
||||||
.and_return({"QPCODE1234" => {:code => "QPCODE1234", :geometry => {:type => "MultiPolygon", :coordinates => [[[[2.38715792094576, 48.8723062632126], [2.38724851642619, 48.8721392348061]]]]}}})
|
.and_return({"QPCODE1234" => {:code => "QPCODE1234", :geometry => {:type => "MultiPolygon", :coordinates => [[[[2.38715792094576, 48.8723062632126], [2.38724851642619, 48.8721392348061]]]]}}})
|
||||||
|
|
||||||
post :get_qp, params: {dossier_id: dossier.id, coordinates: coordinates}
|
post :get_qp, params: {dossier_id: dossier.id, coordinates: coordinates}
|
||||||
end
|
end
|
||||||
|
|
|
@ -279,7 +279,7 @@ shared_examples 'description_controller_spec' do
|
||||||
it { expect(response).to redirect_to users_dossier_recapitulatif_path }
|
it { expect(response).to redirect_to users_dossier_recapitulatif_path }
|
||||||
|
|
||||||
context 'when champs is type_de_champ datetime' do
|
context 'when champs is type_de_champ datetime' do
|
||||||
it { expect(dossier.champs.find(dossier_datetime_champ_id).value).to eq(dossier_date_value + ' ' + dossier_hour_value + ':' + dossier_minute_value) }
|
it { expect(dossier.champs.find(dossier_datetime_champ_id).value).to eq("#{dossier_date_value} #{dossier_hour_value}:#{dossier_minute_value}") }
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when champs value is empty' do
|
context 'when champs value is empty' do
|
||||||
|
@ -300,9 +300,11 @@ shared_examples 'description_controller_spec' do
|
||||||
context 'Sauvegarde des pièces justificatives', vcr: { cassette_name: 'controllers_users_description_controller_sauvegarde_pj' } do
|
context 'Sauvegarde des pièces justificatives', vcr: { cassette_name: 'controllers_users_description_controller_sauvegarde_pj' } do
|
||||||
let(:all_pj_type) { dossier.procedure.type_de_piece_justificative_ids }
|
let(:all_pj_type) { dossier.procedure.type_de_piece_justificative_ids }
|
||||||
before do
|
before do
|
||||||
post :update, params: { dossier_id: dossier_id,
|
post :update, params: {
|
||||||
'piece_justificative_' + all_pj_type[0].to_s => piece_justificative_0,
|
dossier_id: dossier_id,
|
||||||
'piece_justificative_' + all_pj_type[1].to_s => piece_justificative_1 }
|
'piece_justificative_' + all_pj_type[0].to_s => piece_justificative_0,
|
||||||
|
'piece_justificative_' + all_pj_type[1].to_s => piece_justificative_1
|
||||||
|
}
|
||||||
dossier.reload
|
dossier.reload
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -310,9 +312,11 @@ shared_examples 'description_controller_spec' do
|
||||||
it 'ClamavService safe_file? is call' do
|
it 'ClamavService safe_file? is call' do
|
||||||
expect(ClamavService).to receive(:safe_file?).twice
|
expect(ClamavService).to receive(:safe_file?).twice
|
||||||
|
|
||||||
post :update, params: { dossier_id: dossier_id,
|
post :update, params: {
|
||||||
'piece_justificative_' + all_pj_type[0].to_s => piece_justificative_0,
|
dossier_id: dossier_id,
|
||||||
'piece_justificative_' + all_pj_type[1].to_s => piece_justificative_1 }
|
'piece_justificative_' + all_pj_type[0].to_s => piece_justificative_0,
|
||||||
|
'piece_justificative_' + all_pj_type[1].to_s => piece_justificative_1
|
||||||
|
}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -348,9 +352,12 @@ shared_examples 'description_controller_spec' do
|
||||||
describe 'POST #pieces_justificatives', vcr: { cassette_name: 'controllers_users_description_controller_pieces_justificatives' } do
|
describe 'POST #pieces_justificatives', vcr: { cassette_name: 'controllers_users_description_controller_pieces_justificatives' } do
|
||||||
let(:all_pj_type) { dossier.procedure.type_de_piece_justificative_ids }
|
let(:all_pj_type) { dossier.procedure.type_de_piece_justificative_ids }
|
||||||
|
|
||||||
subject { patch :pieces_justificatives, params: { dossier_id: dossier.id,
|
subject {
|
||||||
'piece_justificative_' + all_pj_type[0].to_s => piece_justificative_0,
|
patch :pieces_justificatives, params: {
|
||||||
'piece_justificative_' + all_pj_type[1].to_s => piece_justificative_1 }
|
dossier_id: dossier.id,
|
||||||
|
'piece_justificative_' + all_pj_type[0].to_s => piece_justificative_0,
|
||||||
|
'piece_justificative_' + all_pj_type[1].to_s => piece_justificative_1
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
context 'when user is a guest' do
|
context 'when user is a guest' do
|
||||||
|
@ -424,9 +431,12 @@ end
|
||||||
shared_examples 'description_controller_spec_POST_piece_justificatives_for_owner' do
|
shared_examples 'description_controller_spec_POST_piece_justificatives_for_owner' do
|
||||||
let(:all_pj_type) { dossier.procedure.type_de_piece_justificative_ids }
|
let(:all_pj_type) { dossier.procedure.type_de_piece_justificative_ids }
|
||||||
|
|
||||||
subject { patch :pieces_justificatives, params: { dossier_id: dossier.id,
|
subject {
|
||||||
'piece_justificative_' + all_pj_type[0].to_s => piece_justificative_0,
|
patch :pieces_justificatives, params: {
|
||||||
'piece_justificative_' + all_pj_type[1].to_s => piece_justificative_1 }
|
dossier_id: dossier.id,
|
||||||
|
'piece_justificative_' + all_pj_type[0].to_s => piece_justificative_0,
|
||||||
|
'piece_justificative_' + all_pj_type[1].to_s => piece_justificative_1
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
context 'when user is the owner', vcr: { cassette_name: 'controllers_users_description_controller_pieces_justificatives' } do
|
context 'when user is the owner', vcr: { cassette_name: 'controllers_users_description_controller_pieces_justificatives' } do
|
||||||
|
|
|
@ -179,19 +179,19 @@ describe Users::DossiersController, type: :controller do
|
||||||
|
|
||||||
before do
|
before do
|
||||||
stub_request(:get, "https://staging.entreprise.api.gouv.fr/v2/etablissements/#{siret_not_found}?token=#{SIADETOKEN}")
|
stub_request(:get, "https://staging.entreprise.api.gouv.fr/v2/etablissements/#{siret_not_found}?token=#{SIADETOKEN}")
|
||||||
.to_return(status: 404, body: 'fake body')
|
.to_return(status: 404, body: 'fake body')
|
||||||
|
|
||||||
stub_request(:get, "https://staging.entreprise.api.gouv.fr/v2/etablissements/#{siret}?token=#{SIADETOKEN}")
|
stub_request(:get, "https://staging.entreprise.api.gouv.fr/v2/etablissements/#{siret}?token=#{SIADETOKEN}")
|
||||||
.to_return(status: status_entreprise_call, body: File.read('spec/support/files/etablissement.json'))
|
.to_return(status: status_entreprise_call, body: File.read('spec/support/files/etablissement.json'))
|
||||||
|
|
||||||
stub_request(:get, "https://staging.entreprise.api.gouv.fr/v2/entreprises/#{siren}?token=#{SIADETOKEN}")
|
stub_request(:get, "https://staging.entreprise.api.gouv.fr/v2/entreprises/#{siren}?token=#{SIADETOKEN}")
|
||||||
.to_return(status: status_entreprise_call, body: File.read('spec/support/files/entreprise.json'))
|
.to_return(status: status_entreprise_call, body: File.read('spec/support/files/entreprise.json'))
|
||||||
|
|
||||||
stub_request(:get, "https://staging.entreprise.api.gouv.fr/v2/exercices/#{siret}?token=#{SIADETOKEN}")
|
stub_request(:get, "https://staging.entreprise.api.gouv.fr/v2/exercices/#{siret}?token=#{SIADETOKEN}")
|
||||||
.to_return(status: exercices_status, body: exercices_body)
|
.to_return(status: exercices_status, body: exercices_body)
|
||||||
|
|
||||||
stub_request(:get, "https://staging.entreprise.api.gouv.fr/v2/associations/#{siret}?token=#{SIADETOKEN}")
|
stub_request(:get, "https://staging.entreprise.api.gouv.fr/v2/associations/#{siret}?token=#{SIADETOKEN}")
|
||||||
.to_return(status: rna_status, body: rna_body)
|
.to_return(status: rna_status, body: rna_body)
|
||||||
|
|
||||||
dossier
|
dossier
|
||||||
end
|
end
|
||||||
|
|
|
@ -18,21 +18,25 @@ describe Users::PasswordsController, type: :controller do
|
||||||
end
|
end
|
||||||
|
|
||||||
it "also signs gestionnaire in" do
|
it "also signs gestionnaire in" do
|
||||||
put :update, params: {user: {
|
put :update, params: {
|
||||||
reset_password_token: @token,
|
user: {
|
||||||
password: "supersecret",
|
reset_password_token: @token,
|
||||||
password_confirmation: "supersecret",
|
password: "supersecret",
|
||||||
}}
|
password_confirmation: "supersecret",
|
||||||
|
}
|
||||||
|
}
|
||||||
expect(subject.current_user).to eq(user)
|
expect(subject.current_user).to eq(user)
|
||||||
expect(subject.current_gestionnaire).to eq(gestionnaire)
|
expect(subject.current_gestionnaire).to eq(gestionnaire)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "also signs administrateur in" do
|
it "also signs administrateur in" do
|
||||||
put :update, params: {user: {
|
put :update, params: {
|
||||||
reset_password_token: @token,
|
user: {
|
||||||
password: "supersecret",
|
reset_password_token: @token,
|
||||||
password_confirmation: "supersecret",
|
password: "supersecret",
|
||||||
}}
|
password_confirmation: "supersecret",
|
||||||
|
}
|
||||||
|
}
|
||||||
expect(subject.current_user).to eq(user)
|
expect(subject.current_user).to eq(user)
|
||||||
expect(subject.current_administrateur).to eq(administrateur)
|
expect(subject.current_administrateur).to eq(administrateur)
|
||||||
end
|
end
|
||||||
|
|
|
@ -118,7 +118,7 @@ describe Users::SessionsController, type: :controller do
|
||||||
let(:loged_in_with_france_connect) { 'particulier' }
|
let(:loged_in_with_france_connect) { 'particulier' }
|
||||||
|
|
||||||
it 'redirect to france connect logout page' do
|
it 'redirect to france connect logout page' do
|
||||||
expect(response).to redirect_to(FRANCE_CONNECT.particulier_logout_endpoint)
|
expect(response).to redirect_to(FRANCE_CONNECT[:particulier][:logout_endpoint])
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -161,7 +161,7 @@ describe Users::SessionsController, type: :controller do
|
||||||
user.update_attributes(loged_in_with_france_connect: 'particulier')
|
user.update_attributes(loged_in_with_france_connect: 'particulier')
|
||||||
sign_in user
|
sign_in user
|
||||||
delete :destroy
|
delete :destroy
|
||||||
expect(@response.headers["Location"]).to eq(FRANCE_CONNECT.particulier_logout_endpoint)
|
expect(@response.headers["Location"]).to eq(FRANCE_CONNECT[:particulier][:logout_endpoint])
|
||||||
end
|
end
|
||||||
|
|
||||||
context "when associated administrateur" do
|
context "when associated administrateur" do
|
||||||
|
|
|
@ -7,12 +7,11 @@ describe EntrepriseDecorator do
|
||||||
let(:prenom) { 'mon prenom' }
|
let(:prenom) { 'mon prenom' }
|
||||||
let(:entreprise_params) do
|
let(:entreprise_params) do
|
||||||
{
|
{
|
||||||
capital_social: 123_000,
|
capital_social: 123_000,
|
||||||
code_effectif_entreprise: code_effectif,
|
code_effectif_entreprise: code_effectif,
|
||||||
raison_sociale: raison_sociale,
|
raison_sociale: raison_sociale,
|
||||||
nom: nom,
|
nom: nom,
|
||||||
prenom: prenom
|
prenom: prenom
|
||||||
|
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
let(:entreprise) { create(:entreprise, entreprise_params) }
|
let(:entreprise) { create(:entreprise, entreprise_params) }
|
||||||
|
@ -28,7 +27,7 @@ describe EntrepriseDecorator do
|
||||||
context 'when raison_sociale is nil' do
|
context 'when raison_sociale is nil' do
|
||||||
let(:raison_sociale) { nil }
|
let(:raison_sociale) { nil }
|
||||||
it 'display nom and prenom' do
|
it 'display nom and prenom' do
|
||||||
expect(subject).to eq(nom + ' ' + prenom)
|
expect(subject).to eq("#{nom} #{prenom}")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -30,7 +30,7 @@ feature 'Administrator connection' do
|
||||||
context 'when clicking on sign-out' do
|
context 'when clicking on sign-out' do
|
||||||
before do
|
before do
|
||||||
stub_request(:get, "https://api.github.com/repos/betagouv/tps/releases/latest")
|
stub_request(:get, "https://api.github.com/repos/betagouv/tps/releases/latest")
|
||||||
.to_return(:status => 200, :body => '{"tag_name": "plip", "body": "blabla", "published_at": "2016-02-09T16:46:47Z"}', :headers => {})
|
.to_return(:status => 200, :body => '{"tag_name": "plip", "body": "blabla", "published_at": "2016-02-09T16:46:47Z"}', :headers => {})
|
||||||
|
|
||||||
page.find_by_id('sign-out').find('a').click
|
page.find_by_id('sign-out').find('a').click
|
||||||
end
|
end
|
||||||
|
|
|
@ -10,14 +10,17 @@ feature 'France Connect Particulier Connexion' do
|
||||||
let(:email) { 'plop@plop.com' }
|
let(:email) { 'plop@plop.com' }
|
||||||
let(:france_connect_particulier_id) { 'blabla' }
|
let(:france_connect_particulier_id) { 'blabla' }
|
||||||
|
|
||||||
let(:user_info) { Hashie::Mash.new(france_connect_particulier_id: france_connect_particulier_id,
|
let(:user_info) do
|
||||||
given_name: given_name,
|
{
|
||||||
family_name: family_name,
|
france_connect_particulier_id: france_connect_particulier_id,
|
||||||
birthdate: birthdate,
|
given_name: given_name,
|
||||||
birthplace: birthplace,
|
family_name: family_name,
|
||||||
gender: gender,
|
birthdate: birthdate,
|
||||||
email: email)
|
birthplace: birthplace,
|
||||||
}
|
gender: gender,
|
||||||
|
email_france_connect: email
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
context 'when user is on login page' do
|
context 'when user is on login page' do
|
||||||
before do
|
before do
|
||||||
|
@ -32,19 +35,20 @@ feature 'France Connect Particulier Connexion' do
|
||||||
let(:code) { 'plop' }
|
let(:code) { 'plop' }
|
||||||
|
|
||||||
context 'when authentification is ok' do
|
context 'when authentification is ok' do
|
||||||
let(:france_connect_information) { create(:france_connect_information,
|
let(:france_connect_information) do
|
||||||
france_connect_particulier_id: france_connect_particulier_id,
|
create(:france_connect_information,
|
||||||
given_name: given_name,
|
france_connect_particulier_id: france_connect_particulier_id,
|
||||||
family_name: family_name,
|
given_name: given_name,
|
||||||
birthdate: birthdate,
|
family_name: family_name,
|
||||||
birthplace: birthplace,
|
birthdate: birthdate,
|
||||||
gender: gender,
|
birthplace: birthplace,
|
||||||
email_france_connect: email)
|
gender: gender,
|
||||||
}
|
email_france_connect: email)
|
||||||
|
end
|
||||||
|
|
||||||
before do
|
before do
|
||||||
allow_any_instance_of(FranceConnectParticulierClient).to receive(:authorization_uri).and_return(france_connect_particulier_callback_path(code: code))
|
allow_any_instance_of(FranceConnectParticulierClient).to receive(:authorization_uri).and_return(france_connect_particulier_callback_path(code: code))
|
||||||
allow(FranceConnectService).to receive(:retrieve_user_informations_particulier).and_return(user_info)
|
allow(FranceConnectService).to receive(:retrieve_user_informations_particulier).and_return(FranceConnectInformation.new(user_info))
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when is the first connexion' do
|
context 'when is the first connexion' do
|
||||||
|
|
|
@ -162,7 +162,8 @@ feature 'The gestionnaire part' do
|
||||||
"suivi #{suivi}",
|
"suivi #{suivi}",
|
||||||
"traité #{traite}",
|
"traité #{traite}",
|
||||||
"tous les dossiers #{tous_les_dossiers}",
|
"tous les dossiers #{tous_les_dossiers}",
|
||||||
"archivé #{archive}"]
|
"archivé #{archive}"
|
||||||
|
]
|
||||||
|
|
||||||
texts.each { |text| expect(page).to have_text(text) }
|
texts.each { |text| expect(page).to have_text(text) }
|
||||||
end
|
end
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue