Merge branch 'develop' of github.com:sgmap/tps into develop

Conflicts:
	.gitignore
This commit is contained in:
Tanguy PATTE 2016-01-12 15:32:13 +01:00
commit 0df5324891
106 changed files with 1687 additions and 636 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

View file

@ -24,3 +24,5 @@
//= require concavehull.min
//= require graham_scan.min
//= require leaflet.freedraw
//= require smart_listing
//= require franceconnect_kit

View file

@ -0,0 +1,133 @@
$(document).on('page:load', franceconnect_kit);
$(document).ready(franceconnect_kit);
function franceconnect_kit() {
init_franceconnect_kit();
}
var fconnect = {
tracesUrl: '/traces',
aboutUrl: ''
};
function init_franceconnect_kit() {
initCurrentHostnameSource();
includeFCCss();
var fconnectProfile = document.getElementById('fconnect-profile');
if (fconnectProfile) {
var fcLogoutUrl = fconnectProfile.getAttribute('data-fc-logout-url');
var access = createFCAccessElement(fcLogoutUrl);
fconnectProfile.parentNode.appendChild(access);
fconnectProfile.onclick = toogleElement.bind(access);
}
}
function initCurrentHostnameSource() {
var currentScript = 'https://fcp.integ01.dev-franceconnect.fr/js/franceconnect.js';
var parseUrl = currentScript.split('/');
fconnect.currentHost = parseUrl[2];
}
function includeFCCss() {
var linkCss = document.createElement('link');
linkCss.rel = 'stylesheet';
linkCss.href = '//' + fconnect.currentHost + '/stylesheets/franceconnect.css';
linkCss.type = 'text/css';
linkCss.media = 'screen';
document.getElementsByTagName('head')[0].appendChild(linkCss);
}
function toogleElement(event) {
event.preventDefault();
if (this.style.display === "block") {
this.style.display = "none";
} else {
this.style.display = "block";
}
}
function closeFCPopin(event) {
event.preventDefault();
fconnect.popin.className = 'fade-out';
setTimeout(function() {
document.body.removeChild(fconnect.popin);
}, 200);
}
function openFCPopin() {
fconnect.popin = document.createElement('div');
fconnect.popin.id = 'fc-background';
var iframe = createFCIframe();
document.body.appendChild(fconnect.popin);
fconnect.popin.appendChild(iframe);
setTimeout(function() {
fconnect.popin.className = 'fade-in';
}, 200);
}
function createFCIframe() {
var iframe = document.createElement("iframe");
iframe.setAttribute('id', 'fconnect-iframe');
iframe.frameBorder = 0;
iframe.name = 'fconnect-iframe';
return iframe;
}
function createFCAccessElement(logoutUrl) {
var access = document.createElement('div');
access.id = 'fconnect-access';
access.innerHTML = '<h5>Vous êtes identifié grâce à FranceConnect</h5>';
access.appendChild(createAboutLink());
access.appendChild(document.createElement('hr'));
access.appendChild(createHistoryLink());
access.appendChild(createLogoutElement(logoutUrl));
return access;
}
function createHistoryLink() {
var historyLink = document.createElement('a');
historyLink.target = 'fconnect-iframe';
historyLink.href = '//' + fconnect.currentHost + fconnect.tracesUrl;
historyLink.onclick = openFCPopin;
historyLink.innerHTML = 'Historique des connexions/échanges de données';
return historyLink;
}
function createAboutLink() {
var aboutLink = document.createElement('a');
aboutLink.href = fconnect.aboutUrl ? '//' + fconnect.currentHost + fconnect.aboutUrl : '#';
if (fconnect.aboutUrl) {
aboutLink.target = 'fconnect-iframe';
aboutLink.onclick = openFCPopin;
}
aboutLink.innerHTML = 'Qu\'est-ce-que FranceConnect ?';
return aboutLink;
}
function createLogoutElement(logoutUrl) {
var elm = document.createElement('div');
elm.className = 'logout';
elm.innerHTML = '<a class="btn btn-default" href="' + logoutUrl + '">Se déconnecter</a>'
return elm;
}
var eventMethod = window.addEventListener ? "addEventListener" : "attachEvent";
var eventer = window[eventMethod];
var messageEvent = eventMethod == "attachEvent" ? "onmessage" : "message";
// Listen to message from child window
eventer(messageEvent,function(e) {
var key = e.message ? "message" : "data";
var data = e[key];
if(data === 'close_popup'){
closeFCPopin(e);
}
},false);

View file

@ -61,7 +61,7 @@ body {
box-shadow: none;
float: right;
margin-top: 8px;
margin-right: 80px;
margin-right: 105px;
}
.alert.alert-success,
@ -184,4 +184,35 @@ div.pagination {
.fa {
width: 15px;
text-align: center;
}
.off-fc-link {
font-size: 15px !important;
margin-top: -4px;
}
#fconnect-access {
right: 50px;
}
#fconnect-access:before {
left: 22.7% !important;
}
#fconnect-access:after {
left: 23% !important;
}
#fconnect-profile {
margin-top: 5px;
display: inline-block;
a {
color: #3471A9 !important;
text-decoration: none;
font-size: 16px !important;
margin-right: 0px !important;
}
}

View file

@ -0,0 +1,5 @@
#france_connect_particulier_email{
width: 300px;
margin-left:auto;
margin-right:auto;
}

View file

@ -7,15 +7,12 @@
padding: 20px;
#btn_fc {
margin-top:8%;
background-image: image-url('logo_FC_02.png');
background-repeat: no-repeat;
background-size: 38px;
background-position-x: 5px;
background-position-y: 1px;
}
.btn_fc {
img {
height: 100px;
}
}
#new_user{
width: 80%;
@ -24,7 +21,6 @@
}
hr {
margin-top: 50px;
margin-bottom: 40px;
border: 0;
height: 1px;

View file

@ -1,5 +1,6 @@
class Admin::PiecesJustificativesController < AdminController
before_action :retrieve_procedure
before_action :procedure_locked?
def show
end

View file

@ -1,27 +1,38 @@
class Admin::ProceduresController < AdminController
include SmartListing::Helper::ControllerExtensions
helper SmartListing::Helper
before_action :retrieve_procedure, only: :edit
before_action :retrieve_procedure, only: [:show, :edit]
before_action :procedure_locked?, only: [:edit]
def index
@procedures = current_administrateur.procedures.where(archived: false)
.paginate(:page => params[:page]).decorate
@procedures = smart_listing_create :procedures,
current_administrateur.procedures.where(archived: false),
partial: "admin/procedures/list",
array: true
@page = 'active'
active_class
end
def archived
@procedures = current_administrateur.procedures.where(archived: true)
.paginate(:page => params[:page]).decorate
@procedures = smart_listing_create :procedures,
current_administrateur.procedures.where(archived: true),
partial: "admin/procedures/list",
array: true
@page = 'archived'
archived_class
render 'index'
end
def show
informations
@facade = AdminProceduresShowFacades.new @procedure
@facade = AdminProceduresShowFacades.new @procedure.decorate
end
def edit
informations
end
def new
@ -66,6 +77,14 @@ class Admin::ProceduresController < AdminController
redirect_to admin_procedures_path
end
def active_class
@active_class = 'active' if @page == 'active'
end
def archived_class
@archived_class = 'active' if @page == 'archived'
end
private
def create_procedure_params
@ -75,12 +94,4 @@ class Admin::ProceduresController < AdminController
def create_module_api_carto_params
params.require(:procedure).require(:module_api_carto_attributes).permit(:id, :use_api_carto, :quartiers_prioritaires, :cadastre)
end
def informations
@procedure = current_administrateur.procedures.find(params[:id]).decorate
rescue ActiveRecord::RecordNotFound
flash.alert = 'Procédure inéxistante'
redirect_to admin_procedures_path
end
end

View file

@ -1,6 +1,7 @@
class Admin::TypesDeChampController < AdminController
before_action :retrieve_procedure
before_action :procedure_locked?
def destroy
@procedure.types_de_champ.destroy(params[:id])
render 'show', format: :js

View file

@ -6,15 +6,19 @@ class AdminController < ApplicationController
end
def retrieve_procedure
id = params[:procedure_id] || params[:id ]
id = params[:procedure_id] || params[:id]
@procedure = current_administrateur.procedures.find(id)
if @procedure.locked?
render json: {message: 'Procedure locked'}, status: 403
end
rescue ActiveRecord::RecordNotFound
render json: {message: 'Procedure not found'}, status: 404
flash.alert = 'Procédure inéxistante'
redirect_to admin_procedures_path, status: 404
end
def procedure_locked?
if @procedure.locked?
flash.alert = 'Procédure verrouillée'
redirect_to admin_procedure_path(id: @procedure.id)
end
end
end

View file

@ -1,38 +1,26 @@
class Backoffice::DossiersController < ApplicationController
include SmartListing::Helper::ControllerExtensions
helper SmartListing::Helper
before_action :authenticate_gestionnaire!
def index
if params[:liste] == 'a_traiter' || params[:liste].nil?
@dossiers = current_gestionnaire.dossiers.waiting_for_gestionnaire
@dossiers_a_traiter = @dossiers
@liste = params[:liste] || 'a_traiter'
@liste = 'a_traiter'
@dossiers = smart_listing_create :dossiers,
dossiers_to_display,
partial: "backoffice/dossiers/list",
array: true
elsif params[:liste] == 'en_attente'
@dossiers = current_gestionnaire.dossiers.waiting_for_user
@dossiers_en_attente = @dossiers
@liste = 'en_attente'
elsif params[:liste] == 'termine'
@dossiers = current_gestionnaire.dossiers.termine
@dossiers_termine = @dossiers
@liste = 'termine'
end
@dossiers = @dossiers.paginate(:page => (params[:page] || 1)).decorate
total_dossiers_per_state
end
def show
initialize_instance_params params[:id]
create_dossier_facade params[:id]
end
def search
@search_terms = params[:q]
@dossiers_search, @dossier = Dossier.search(current_gestionnaire, @search_terms)
unless @dossiers_search.empty?
@ -47,20 +35,20 @@ class Backoffice::DossiersController < ApplicationController
end
def valid
initialize_instance_params params[:dossier_id]
create_dossier_facade params[:dossier_id]
@dossier.next_step! 'gestionnaire', 'valid'
@facade.dossier.next_step! 'gestionnaire', 'valid'
flash.notice = 'Dossier confirmé avec succès.'
NotificationMailer.dossier_validated(@dossier).deliver_now!
NotificationMailer.dossier_validated(@facade.dossier).deliver_now!
render 'show'
end
def close
initialize_instance_params params[:dossier_id]
create_dossier_facade params[:dossier_id]
@dossier.next_step! 'gestionnaire', 'close'
@facade.dossier.next_step! 'gestionnaire', 'close'
flash.notice = 'Dossier traité avec succès.'
render 'show'
@ -68,25 +56,36 @@ class Backoffice::DossiersController < ApplicationController
private
def total_dossiers_per_state
@dossiers_a_traiter_total = !@dossiers_a_traiter.nil? ? @dossiers_a_traiter.size : current_gestionnaire.dossiers.waiting_for_gestionnaire.size
@dossiers_en_attente_total = !@dossiers_en_attente.nil? ? @dossiers_en_attente.size : current_gestionnaire.dossiers.waiting_for_user.size
@dossiers_termine_total = !@dossiers_termine.nil? ? @dossiers_termine.size : current_gestionnaire.dossiers.termine.size
def dossiers_to_display
{'a_traiter' => waiting_for_gestionnaire,
'en_attente' => waiting_for_user,
'termine' => termine}[@liste]
end
def initialize_instance_params dossier_id
@dossier = Dossier.where(archived: false).find(dossier_id)
@entreprise = @dossier.entreprise.decorate
@etablissement = @dossier.etablissement
@pieces_justificatives = @dossier.pieces_justificatives
@commentaires = @dossier.ordered_commentaires
@commentaires = @commentaires.all.decorate
@commentaire_email = current_gestionnaire.email
def waiting_for_gestionnaire
@a_traiter_class = (@liste == 'a_traiter' ? 'active' : '')
@waiting_for_gestionnaire ||= current_gestionnaire.dossiers.waiting_for_gestionnaire
end
@procedure = @dossier.procedure
def waiting_for_user
@en_attente_class = (@liste == 'en_attente' ? 'active' : '')
@waiting_for_user ||= current_gestionnaire.dossiers.waiting_for_user
end
def termine
@termine_class = (@liste == 'termine' ? 'active' : '')
@termine ||= current_gestionnaire.dossiers.termine
end
def total_dossiers_per_state
@dossiers_a_traiter_total = waiting_for_gestionnaire.count
@dossiers_en_attente_total = waiting_for_user.count
@dossiers_termine_total = termine.count
end
def create_dossier_facade dossier_id
@facade = DossierFacades.new dossier_id, current_gestionnaire.email
@dossier = @dossier.decorate
@champs = @dossier.ordered_champs
rescue ActiveRecord::RecordNotFound
flash.alert = t('errors.messages.dossier_not_found')
redirect_to url_for(controller: '/backoffice')

View file

@ -1,7 +1,11 @@
class DemoController < ApplicationController
include SmartListing::Helper::ControllerExtensions
helper SmartListing::Helper
def index
@procedures = Procedure.where(archived: false).order('libelle ASC').decorate
smart_listing_create :procedures,
Procedure.where(archived: false),
partial: "demo/list",
array: true
end
end

View file

@ -23,7 +23,7 @@ class FranceConnect::EntrepriseController < ApplicationController
sign_in @user
@user.loged_in_with_france_connect = true
@user.loged_in_with_france_connect = 'entreprise'
@user.save
redirect_to stored_location_for(current_user) || signed_in_root_path(current_user)

View file

@ -0,0 +1,91 @@
class FranceConnect::ParticulierController < ApplicationController
def login
client = FranceConnectParticulierClient.new
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 authorization_uri
end
def new
return redirect_to root_path if france_connect_particulier_id_blank?
@user = (User.new create_user_params).decorate
end
def create
user = User.new create_user_params
user.password = Devise.friendly_token[0, 20]
unless user.valid?
flash.alert = 'Email non valide'
return redirect_to france_connect_particulier_new_path user: params[:user]
end
user.save
connect_france_connect_particulier user
end
def check_email
return create if User.find_by_email(params[:user][:email]).nil?
return redirect_to root_path if france_connect_particulier_id_blank?
unless params[:user][:password].nil?
user = User.find_by_email(params[:user][:email])
valid_password = user.valid_password?(params[:user][:password])
if valid_password
user.update_attributes create_user_params
return connect_france_connect_particulier user
else
flash.now.alert = 'Mot de passe invalide'
end
end
@user = (User.new create_user_params).decorate
end
def callback
return redirect_to new_user_session_path unless params.has_key?(:code)
user_infos = FranceConnectService.retrieve_user_informations_particulier(params[:code])
unless user_infos.nil?
user = User.find_for_france_connect_particulier user_infos
if user.nil?
return redirect_to france_connect_particulier_new_path(user: user_infos)
end
connect_france_connect_particulier user
end
rescue Rack::OAuth2::Client::Error => e
Rails.logger.error e.message
flash.alert = t('errors.messages.france_connect.connexion')
redirect_to(new_user_session_path)
end
private
def create_user_params
params.require(:user).permit(:france_connect_particulier_id, :gender, :given_name, :family_name, :birthdate, :birthplace, :email)
end
def france_connect_particulier_id_blank?
redirect_to root_path if params[:user][:france_connect_particulier_id].blank?
end
def connect_france_connect_particulier user
sign_in user
user.loged_in_with_france_connect = 'particulier'
user.save
redirect_to stored_location_for(current_user) || signed_in_root_path(current_user)
end
end

View file

@ -45,7 +45,7 @@ class Users::CarteController < UsersController
end
def get_position
tmp_position = Carto::Geocodeur.convert_adresse_to_point(current_user_dossier.etablissement.adresse.gsub("\r\n", ' '))
tmp_position = Carto::Geocodeur.convert_adresse_to_point(current_user_dossier.etablissement.geo_adresse)
if !tmp_position.point.nil?
render json: {lon: tmp_position.point.x.to_s, lat: tmp_position.point.y.to_s, dossier_id: params[:dossier_id]}

View file

@ -1,31 +1,20 @@
class Users::DossiersController < UsersController
include SmartListing::Helper::ControllerExtensions
helper SmartListing::Helper
before_action :authenticate_user!
before_action :check_siret, only: :create
def index
order = 'DESC'
if params[:liste] == 'a_traiter' || params[:liste].nil?
@dossiers = current_user.dossiers.waiting_for_user order
@dossiers_a_traiter = @dossiers
@liste = params[:liste] || 'a_traiter'
@liste = 'a_traiter'
@dossiers = smart_listing_create :dossiers,
dossiers_to_display,
partial: "users/dossiers/list",
array: true
elsif params[:liste] == 'en_attente'
@dossiers = current_user.dossiers.waiting_for_gestionnaire order
@dossiers_en_attente = @dossiers
@liste = 'en_attente'
elsif params[:liste] == 'termine'
@dossiers = current_user.dossiers.termine order
@dossiers_termine = @dossiers
@liste = 'termine'
end
@dossiers = @dossiers.paginate(:page => (params[:page] || 1)).decorate
total_dossiers_per_state
end
@ -40,46 +29,53 @@ class Users::DossiersController < UsersController
end
def show
@dossier = current_user_dossier params[:id]
@facade = DossierFacades.new params[:id], current_user.email
@etablissement = @dossier.etablissement
@entreprise = @dossier.entreprise.decorate
rescue ActiveRecord::RecordNotFound
flash.alert = t('errors.messages.dossier_not_found')
redirect_to url_for users_dossiers_path
end
def create
@etablissement = Etablissement.new(SIADE::EtablissementAdapter.new(siret).to_params)
@entreprise = Entreprise.new(SIADE::EntrepriseAdapter.new(siren).to_params)
etablissement = Etablissement.new(SIADE::EtablissementAdapter.new(siret).to_params)
entreprise = Entreprise.new(SIADE::EntrepriseAdapter.new(siren).to_params)
rna_information = SIADE::RNAAdapter.new(siret).to_params
exercices = SIADE::ExercicesAdapter.new(siret).to_params
mandataires_sociaux = SIADE::MandatairesSociauxAdapter.new(siren).to_params
unless exercices.nil?
exercices.each_value do |exercice|
exercice = Exercice.new(exercice)
exercice.etablissement = @etablissement
exercice.etablissement = etablissement
exercice.save
end
end
mandataire_social = false
@dossier = Dossier.create(user: current_user, state: 'draft', procedure_id: create_params[:procedure_id])
mandataires_sociaux.each do |k, mandataire|
break mandataire_social = true if !current_user.france_connect_particulier_id.nil? &&
mandataire[:nom] == current_user.family_name &&
mandataire[:prenom] == current_user.given_name &&
mandataire[:date_naissance_timestamp] == current_user.birthdate.to_time.to_i
@entreprise.dossier = @dossier
@entreprise.save
end
dossier = Dossier.create(user: current_user, state: 'draft', procedure_id: create_params[:procedure_id], mandataire_social: mandataire_social)
entreprise.dossier = dossier
entreprise.save
unless rna_information.nil?
rna_information = RNAInformation.new(rna_information)
rna_information.entreprise = @entreprise
rna_information.entreprise = entreprise
rna_information.save
end
@etablissement.dossier = @dossier
@etablissement.entreprise = @entreprise
@etablissement.save
etablissement.dossier = dossier
etablissement.entreprise = entreprise
etablissement.save
redirect_to url_for(controller: :dossiers, action: :show, id: @dossier.id)
redirect_to url_for(controller: :dossiers, action: :show, id: dossier.id)
rescue RestClient::ResourceNotFound
errors_valid_siret
@ -90,27 +86,25 @@ class Users::DossiersController < UsersController
end
def update
@facade = DossierFacades.new params[:id], current_user.email
@dossier = current_user_dossier params[:id]
if checked_autorisation_donnees?
@dossier.update_attributes(update_params)
@facade.dossier.update_attributes(update_params)
if @dossier.procedure.module_api_carto.use_api_carto
redirect_to url_for(controller: :carte, action: :show, dossier_id: @dossier.id)
if @facade.dossier.procedure.module_api_carto.use_api_carto
redirect_to url_for(controller: :carte, action: :show, dossier_id: @facade.dossier.id)
else
redirect_to url_for(controller: :description, action: :show, dossier_id: @dossier.id)
redirect_to url_for(controller: :description, action: :show, dossier_id: @facade.dossier.id)
end
else
@etablissement = @dossier.etablissement
@entreprise = @dossier.entreprise.decorate
flash.now.alert = 'Les conditions sont obligatoires.'
render 'show'
end
end
def archive
@dossier = current_user.dossiers.find(params[:dossier_id])
@dossier.update_attributes({archived: true})
dossier = current_user.dossiers.find(params[:dossier_id])
dossier.update_attributes({archived: true})
flash.notice = 'Dossier archivé'
redirect_to users_dossiers_path
@ -122,6 +116,33 @@ class Users::DossiersController < UsersController
private
def dossiers_to_display
{'a_traiter' => waiting_for_user,
'en_attente' => waiting_for_gestionnaire,
'termine' => termine}[@liste]
end
def waiting_for_user
@a_traiter_class = (@liste == 'a_traiter' ? 'active' : '')
@waiting_for_user ||= current_user.dossiers.waiting_for_user 'DESC'
end
def waiting_for_gestionnaire
@en_attente_class = (@liste == 'en_attente' ? 'active' : '')
@waiting_for_gestionnaire ||= current_user.dossiers.waiting_for_gestionnaire 'DESC'
end
def termine
@termine_class = (@liste == 'termine' ? 'active' : '')
@termine ||= current_user.dossiers.termine 'DESC'
end
def total_dossiers_per_state
@dossiers_a_traiter_total = waiting_for_user.count
@dossiers_en_attente_total = waiting_for_gestionnaire.count
@dossiers_termine_total = termine.count
end
def check_siret
errors_valid_siret unless Siret.new(siret: siret).valid?
end
@ -135,10 +156,6 @@ class Users::DossiersController < UsersController
params.require(:dossier).permit(:autorisation_donnees)
end
def dossier_id_is_present?
@dossier_id != ''
end
def checked_autorisation_donnees?
update_params[:autorisation_donnees] == '1'
end
@ -151,17 +168,13 @@ class Users::DossiersController < UsersController
siret[0..8]
end
def total_dossiers_per_state
@dossiers_a_traiter_total = !@dossiers_a_traiter.nil? ? @dossiers_a_traiter.size : current_user.dossiers.waiting_for_user.size
@dossiers_en_attente_total = !@dossiers_en_attente.nil? ? @dossiers_en_attente.size : current_user.dossiers.waiting_for_gestionnaire.size
@dossiers_termine_total = !@dossiers_termine.nil? ? @dossiers_termine.size : current_user.dossiers.termine.size
end
def create_params
params.require(:dossier).permit(:siret, :procedure_id)
end
def error_procedure
render :file => "#{Rails.root}/public/404_procedure_not_found.html", :status => 404
flash.alert = t('errors.messages.procedure_not_found')
redirect_to url_for users_dossiers_path
end
end

View file

@ -1,36 +1,35 @@
class Users::RecapitulatifController < UsersController
def show
@dossier = current_user_dossier
@dossier = @dossier.decorate
@procedure = @dossier.procedure
@champs = @dossier.ordered_champs
@commentaires = @dossier.ordered_commentaires
@commentaires = @commentaires.all.decorate
@commentaire_email = current_user.email
rescue ActiveRecord::RecordNotFound
flash.alert = t('errors.messages.dossier_not_found')
redirect_to url_for(root_path)
create_dossier_facade
end
def initiate
show
create_dossier_facade
@dossier.next_step! 'user', 'initiate'
@facade.dossier.next_step! 'user', 'initiate'
flash.notice = 'Dossier soumis avec succès.'
render 'show'
end
def submit
show
create_dossier_facade
@dossier.next_step! 'user', 'submit'
@facade.dossier.next_step! 'user', 'submit'
flash.notice = 'Dossier déposé avec succès.'
NotificationMailer.dossier_submitted(@dossier).deliver_now!
NotificationMailer.dossier_submitted(@facade.dossier).deliver_now!
render 'show'
end
private
def create_dossier_facade
@facade = DossierFacades.new current_user_dossier.id, current_user.email
rescue ActiveRecord::RecordNotFound
flash.alert = t('errors.messages.dossier_not_found')
redirect_to url_for(root_path)
end
end

View file

@ -2,6 +2,11 @@ class Users::RegistrationsController < Devise::RegistrationsController
# before_filter :configure_sign_up_params, only: [:create]
# before_filter :configure_account_update_params, only: [:update]
def after_sign_up_path_for(resource_or_scope)
WelcomeMailer.welcome_email(User.last).deliver_now!
super
end
# GET /resource/sign_up
# def new
# super
@ -9,9 +14,7 @@ class Users::RegistrationsController < Devise::RegistrationsController
# POST /resource
def create
retour = super
WelcomeMailer.welcome_email(User.last).deliver_now!
retour
super
end
# GET /resource/edit

View file

@ -1,38 +1,40 @@
class Users::SessionsController < Sessions::SessionsController
# before_filter :configure_sign_in_params, only: [:create]
# GET /resource/sign_in
# def new
# super
# end
# GET /resource/sign_in
# def new
# super
# end
#POST /resource/sign_in
#POST /resource/sign_in
def create
super
current_user.update_attributes(loged_in_with_france_connect: false)
current_user.update_attributes(loged_in_with_france_connect: '')
end
# DELETE /resource/sign_out
def destroy
connected_with_france_connect = current_user.loged_in_with_france_connect
current_user.update_attributes(loged_in_with_france_connect: false)
current_user.update_attributes(loged_in_with_france_connect: '')
signed_out = (Devise.sign_out_all_scopes ? sign_out : sign_out(resource_name))
set_flash_message :notice, :signed_out if signed_out && is_flashing_format?
yield if block_given?
if connected_with_france_connect
if connected_with_france_connect == 'entreprise'
redirect_to FRANCE_CONNECT.entreprise_logout_endpoint
elsif connected_with_france_connect == 'particulier'
redirect_to FRANCE_CONNECT.particulier_logout_endpoint
else
respond_to_on_destroy
end
end
# protected
# protected
# You can put the params you want to permit in the empty array.
# def configure_sign_in_params
# devise_parameter_sanitizer.for(:sign_in) << :attribute
# end
# You can put the params you want to permit in the empty array.
# def configure_sign_in_params
# devise_parameter_sanitizer.for(:sign_in) << :attribute
# end
end

View file

@ -2,7 +2,7 @@ class DossierDecorator < Draper::Decorator
delegate :current_page, :per_page, :offset, :total_entries, :total_pages
delegate_all
def date_fr
def display_date
date_previsionnelle.to_date.strftime('%d/%m/%Y')
rescue
'dd/mm/YYYY'
@ -12,7 +12,7 @@ class DossierDecorator < Draper::Decorator
updated_at.localtime.strftime('%d/%m/%Y %H:%M')
end
def state_fr
def display_state
DossierDecorator.case_state_fr state
end
@ -27,23 +27,6 @@ class DossierDecorator < Draper::Decorator
end
def self.case_state_fr state=self.state
case state
when 'draft'
'Brouillon'
when 'initiated'
'Soumis'
when 'replied'
'Répondu'
when 'updated'
'Mis à jour'
when 'validated'
'Validé'
when 'submitted'
'Déposé'
when 'closed'
'Traité'
else
fail 'State not valid'
end
h.t("activerecord.attributes.dossier.state.#{state}")
end
end

View file

@ -0,0 +1,12 @@
class UserDecorator < Draper::Decorator
delegate_all
def gender_fr
return 'Mr' if gender == 'male'
return 'Mme' if gender == 'female'
end
def birthdate_fr
birthdate.strftime('%d/%m/%Y')
end
end

View file

@ -0,0 +1,40 @@
class DossierFacades
#TODO rechercher en fonction de la personne/email
def initialize dossier_id, email
@dossier = Dossier.where(archived: false).find(dossier_id)
@email = email
end
def dossier
@dossier.decorate
end
def champs
@dossier.ordered_champs
end
def entreprise
@dossier.entreprise.decorate
end
def etablissement
@dossier.etablissement
end
def pieces_justificatives
@dossier.pieces_justificatives
end
def commentaires
@dossier.ordered_commentaires.all.decorate
end
def commentaire_email
@email
end
def procedure
@dossier.procedure
end
end

View file

@ -3,4 +3,8 @@ class Etablissement < ActiveRecord::Base
belongs_to :entreprise
has_many :exercices
def geo_adresse
numero_voie.to_s << ' ' << type_voie.to_s << ' ' << nom_voie.to_s << ' ' << complement_adresse.to_s << ' ' << code_postal.to_s << ' ' << localite.to_s
end
end

View file

@ -0,0 +1,17 @@
class FranceConnectParticulierClient < OpenIDConnect::Client
def initialize params={}
super(
identifier: FRANCE_CONNECT.particulier_identifier,
secret: FRANCE_CONNECT.particulier_secret,
redirect_uri: FRANCE_CONNECT.particulier_redirect_uri,
authorization_endpoint: FRANCE_CONNECT.particulier_authorization_endpoint,
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

View file

@ -1,4 +1,7 @@
class User < ActiveRecord::Base
enum loged_in_with_france_connect: {particulier: 'particulier',
entreprise: 'entreprise'}
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
@ -6,13 +9,22 @@ class User < ActiveRecord::Base
has_many :dossiers
def self.find_for_france_connect_particulier user_info
User.find_by(france_connect_particulier_id: user_info[:france_connect_particulier_id])
end
def self.find_for_france_connect email, siret
user = User.find_by_email(email)
if user.nil?
return User.create(email: email, password: Devise.friendly_token[0,20], siret: siret)
return User.create(email: email, password: Devise.friendly_token[0, 20], siret: siret)
else
user.update_attributes(siret: siret)
user
end
end
def loged_in_with_france_connect?
!loged_in_with_france_connect.nil?
end
end

View file

@ -6,4 +6,15 @@ class FranceConnectService
user_info = access_token.userinfo!
Hashie::Mash.new user_info.raw_attributes
end
def self.retrieve_user_informations_particulier code
client = FranceConnectParticulierClient.new code: code
access_token = client.access_token!(client_auth_method: :secret)
user_info = access_token.userinfo!
hash = Hashie::Mash.new user_info.raw_attributes
hash.france_connect_particulier_id = hash.sub
hash
end
end

View file

@ -0,0 +1,41 @@
require 'securerandom'
class Downloader
BASE_PATH_DISK = File.join(Rails.root, "public/downloads/")
def initialize(filename, filename_suffix = '')
@filename = filename.to_s
@filename_suffix = filename_suffix.empty? ? '' : "_#{filename_suffix}"
@extension = @filename.split(/[.]/).last
generate_random_base_path!
FileUtils.ln_s @filename, "#{@base_path}/#{@filename_suffix}.#{@extension}"
end
def url
@url ||= File.join(TPS::Application::URL, 'downloads', random_folder_name, "#{@filename_suffix}.#{@extension}")
end
protected
attr_accessor :random_folder_name
def generate_random_base_path!
@base_path ||= begin
loop do
self.random_folder_name = SecureRandom.hex
base_path = File.join(BASE_PATH_DISK, self.random_folder_name)
unless File.directory?(BASE_PATH_DISK)
Dir.mkdir(BASE_PATH_DISK)
end
unless File.directory?(base_path)
Dir.mkdir(base_path)
break base_path
end
end
end
end
end

View file

@ -1,14 +1,21 @@
%table.table
%thead
%th#id ID
%th#libelle Libellé
%th#lien Lien
- @procedures.each do |procedure|
%tr
%td.col-md-1.col-lg-1= procedure.id
%td.col-md-6.col-lg-6
= link_to(procedure.libelle, "/admin/procedures/#{procedure.id}")
%td= link_to procedure.lien, procedure.lien
- unless smart_listing.empty?
%table.table
%thead
%th#ID= smart_listing.sortable 'ID', 'id'
%th#libelle= smart_listing.sortable 'Libellé', 'libelle'
%th#lien Lien
.pagination
= will_paginate @procedures, renderer: BootstrapPagination::Rails
- @procedures.each do |procedure|
- procedure = procedure.decorate
%tr
%td.col-md-1.col-lg-1= procedure.id
%td.col-md-6.col-lg-6
= link_to(procedure.libelle, "/admin/procedures/#{procedure.id}")
%td= link_to procedure.lien, procedure.lien
= smart_listing.paginate
= smart_listing.pagination_per_page_links
- else
%h4.center
Aucune procédure

View file

@ -1,11 +1,11 @@
#onglets
%ul.nav.nav-tabs
%li{class: "#{'active' if @page == 'active' }"}
%li{class: @active_class}
%a{:href => "#{url_for :admin_procedures}"}
%h5.text-success
= "Actives"
%li{class: "#{'active' if @page == 'archived' }"}
%li{class: @archived_class}
%a{:href => "#{url_for :admin_procedures_archived}"}
%h5{style: 'color: black'}
="Archivées"

View file

@ -1,7 +0,0 @@
= link_to("Nouvelle procédure", "/admin/procedures/new", class: 'btn btn-success', style: 'float:right; margin-top:2%;')
%h1 Gestion des procédures
%br
= render partial: 'onglets'
= render partial: 'list'

View file

@ -4,4 +4,4 @@
= render partial: 'onglets'
= render partial: 'list'
= smart_listing_render :procedures

View file

@ -0,0 +1 @@
<%= smart_listing_update :procedures %>

View file

@ -1,30 +1,30 @@
#procedure_show
%h2.text-info
=@procedure.libelle
=@facade.procedure.libelle
%br
%ul.nav.nav-tabs
%li.active
= link_to('Informations', admin_procedure_path(@procedure))
= link_to('Informations', admin_procedure_path(@facade.procedure))
%li{ class: ('disabled' if @procedure.locked?) }
= link_to_unless(@procedure.locked?, 'Description', edit_admin_procedure_path(@procedure)) do
%li{ class: ('disabled' if @facade.procedure.locked?) }
= link_to_unless(@facade.procedure.locked?, 'Description', edit_admin_procedure_path(@facade.procedure)) do
= link_to('Description', '#')
%li{ class: ('disabled' if @procedure.locked?) }
= link_to_unless(@procedure.locked?, 'Champs', admin_procedure_types_de_champ_path(@procedure)) do
%li{ class: ('disabled' if @facade.procedure.locked?) }
= link_to_unless(@facade.procedure.locked?, 'Champs', admin_procedure_types_de_champ_path(@facade.procedure)) do
= link_to('Champs', '#')
%li{ class: ('disabled' if @procedure.locked?) }
= link_to_unless(@procedure.locked?, 'Pièces justificatives', admin_procedure_pieces_justificatives_path(@procedure)) do
%li{ class: ('disabled' if @facade.procedure.locked?) }
= link_to_unless(@facade.procedure.locked?, 'Pièces justificatives', admin_procedure_pieces_justificatives_path(@facade.procedure)) do
= link_to('Pièces justificatives', '#')
%li{style:'float:right'}
= form_tag admin_procedure_archive_path(procedure_id: @procedure.id, archive: !@procedure.archived?), method: :put do
= form_tag admin_procedure_archive_path(procedure_id: @facade.procedure.id, archive: !@facade.procedure.archived?), method: :put do
%button#archive.btn.btn-nav.text-info{type: :button}
%i.fa.fa-eraser
- if @procedure.archived
- if @facade.procedure.archived
= 'Réactiver'
- else
= 'Archiver'
@ -36,7 +36,7 @@
%i.fa.fa-remove
Annuler
- if @procedure.locked?
- if @facade.procedure.locked?
#procedure_locked.center
%h5
.label.label-info La procédure ne peut plus être modifiée car un usagé a déjà déposé un dossier
@ -44,9 +44,35 @@
%div
%h3 Lien procédure
%div{style:'margin-left:3%'}
= @procedure.lien
= @facade.procedure.lien
%br
%h3 Détails
.row{style:'margin-right:3%; margin-left:3%;'}
.description.col-md-4.col-lg-4
%h4.text-info
= @facade.procedure.libelle
= @facade.procedure.description
.champs.col-md-4.col-lg-4
%h4.text-info
Champs
.badge.progress-bar-info
= @facade.procedure.types_de_champ.size
- @facade.procedure.types_de_champ.each do |champ|
= champ.libelle
%br
.pieces_justificatives.col-md-4.col-lg-4
%h4.text-info
Pièces justificatives
.badge.progress-bar-info
= @facade.procedure.types_de_piece_justificative.size
- @facade.procedure.types_de_piece_justificative.each do |piece_justificative|
= piece_justificative.libelle
%br
%br
%h3 Dossiers
.row
@ -73,7 +99,7 @@
%ul
- @facade.dossiers_archived_by_state_total.each do |dossier|
%li
= dossier.state_fr
= dossier.display_state
\:
= dossier.total
- else

View file

@ -1,16 +1,22 @@
%table.table
%thead.row
%th.col-md-4.col-lg-4 Procédure
%th.col-md-4.col-lg-4 Dossier
%th.col-md-2.col-lg-2 État
%th.col-md-2.col-lg-2 Date de mise à jour
- @dossiers.each do |dossier|
%tr
%td= dossier.procedure.libelle
%td
= link_to(dossier.nom_projet, "/backoffice/dossiers/#{dossier.id}")
%td= dossier.state_fr
%td= dossier.last_update
- unless smart_listing.empty?
%table.table
%thead.row
%th.col-md-4.col-lg-4= smart_listing.sortable 'Procédure', 'procedure.libelle'
%th.col-md-4.col-lg-4= smart_listing.sortable 'Dossier', 'nom_projet'
%th.col-md-2.col-lg-2= smart_listing.sortable 'État', 'state'
%th.col-md-2.col-lg-2= smart_listing.sortable 'Date de mise à jour', 'updated_at'
.pagination
= will_paginate @dossiers, renderer: BootstrapPagination::Rails
- @dossiers.each do |dossier|
- dossier = dossier.decorate
%tr
%td= dossier.procedure.libelle
%td
= link_to(dossier.nom_projet, "/backoffice/dossiers/#{dossier.id}")
%td= dossier.display_state
%td= dossier.last_update
= smart_listing.paginate
= smart_listing.pagination_per_page_links
- else
%h4.center
Aucun dossier

View file

@ -3,24 +3,27 @@
#onglets
%ul.nav.nav-tabs
%li{ class: (@dossiers.active_class_a_traiter(@liste) unless @dossiers.nil?) }
%li{ class: (@a_traiter_class) }
%a{:href => "#{url_for backoffice_dossiers_path(liste: 'a_traiter')}"}
%h5.text-danger
= "À traiter "
.badge.progress-bar-danger
=@dossiers_a_traiter_total
%li{ class: (@dossiers.active_class_en_attente(@liste) unless @dossiers.nil?) }
%li{ class: (@en_attente_class) }
%a{:href => "#{url_for backoffice_dossiers_path(liste: 'en_attente')}"}
%h5.text-info
="En attente "
.badge.progress-bar-info
=@dossiers_en_attente_total
%li{ class: (@dossiers.active_class_termine(@liste) unless @dossiers.nil?) }
%li{ class: (@termine_class) }
%a{:href => "#{url_for backoffice_dossiers_path(liste: 'termine')}"}
%h5.text-success
= "Terminé"
.badge.progress-bar-success
=@dossiers_termine_total
%li#search{class: "#{'active' unless @dossiers_search.nil?}", style:'float:right'}
%a
= form_tag(backoffice_dossiers_search_url, method: :get) do

View file

@ -1,4 +1,4 @@
#backoffice_index
= render partial: 'onglets'
= render partial: 'list'
= smart_listing_render :dossiers

View file

@ -0,0 +1 @@
<%= smart_listing_update :dossiers %>

View file

@ -19,7 +19,7 @@
%td.col-md-2.col-lg-2
= @dossier.etablissement.siret
%td.col-md-1.col-lg-1{class: @dossier.state_color_class}
= @dossier.state_fr
= @dossier.display_state
%br
- if @dossiers_search.empty? && @dossier.nil?
@ -44,7 +44,7 @@
%td= dossier.entreprise.raison_sociale
%td= dossier.user.email
%td= dossier.etablissement.siret
%td{class: dossier.state_color_class}= dossier.state_fr
%td{class: dossier.state_color_class}= dossier.display_state
.pagination
= will_paginate @dossiers_search, renderer: BootstrapPagination::Rails

View file

@ -1,9 +1,9 @@
#backoffice_dossier_show
%h1#dossier_id.text-info{ :style => 'text-align:right'}
= "Dossier n°#{@dossier.id}"
= "Dossier n°#{@facade.dossier.id}"
%h3{:class => 'text-success', :style => 'text-align:right'}
= @dossier.state_fr
= @facade.dossier.display_state
= render partial: '/dossiers/infos_entreprise'
@ -17,5 +17,5 @@
%br
-#%script{type: 'text/javascript'}
-# ="url_carte = '#{@dossier.id}/'"
-# ="ref_dossier = '#{@dossier.ref_dossier_carto}'"
-# ="url_carte = '#{@facade.dossier.id}/'"
-# ="ref_dossier = '#{@facade.dossier.ref_dossier_carto}'"

View file

@ -0,0 +1,27 @@
- unless smart_listing.empty?
%table.table
%tr
%th{colspan: 4}
%h4 Lien vers les procédures TPS
%tr
%th= smart_listing.sortable 'ID', 'id'
%th= smart_listing.sortable 'Titre', 'libelle'
%th Description
%th= smart_listing.sortable 'Organisation', 'organisation'
- smart_listing.collection.each do |procedure|
- procedure = procedure.decorate
%tr
%td
= procedure.id
%td.col-md-4.col-lg-4
= link_to procedure.libelle, procedure.lien
%td
= procedure.description
%td.col-md-3.col-lg-3
= procedure.organisation
= smart_listing.paginate
= smart_listing.pagination_per_page_links
- else
%p Aucune procédure trouvée

View file

@ -1,20 +1 @@
%table.table
%tr
%th{colspan: 4}
%h4 Lien vers les procédures TPS
%tr
%th ID
%th Titre
%th Description
%th Organisation
- @procedures.each do |procedure|
%tr
%td
= procedure.id
%td.col-md-4.col-lg-4
= link_to procedure.libelle, procedure.lien
%td
= procedure.description
%td.col-md-3.col-lg-3
= procedure.organisation
= smart_listing_render :procedures

View file

@ -0,0 +1 @@
<%= smart_listing_update :procedures %>

View file

@ -3,33 +3,43 @@
%div.row
.col-lg-6.col-md-6
%h3.text-info
= @dossier.nom_projet
= @facade.dossier.nom_projet
%h4
= @dossier.procedure.libelle
= @facade.dossier.procedure.libelle
.description
- begin
- @dossier.description.split(/(?:\n\r?|\r\n?')/).each do |line|
- @facade.dossier.description.split(/(?:\n\r?|\r\n?')/).each do |line|
= line
%br
- rescue
=''
- if @dossier.procedure.module_api_carto.use_api_carto
- if @facade.dossier.mandataire_social && gestionnaire_signed_in?
.mandataire_social.text-success.center
%br
="Il est probable que le soumissionnaire du dossier soit un des mandataire social de l'entreprise ("
%b
="#{@facade.dossier.user.given_name} #{@facade.dossier.user.family_name}"
=")"
- if @facade.dossier.procedure.module_api_carto.use_api_carto
.col-lg-6.col-md-6
#map.mini{class: @dossier.class_qp_active}
#map.mini{class: @facade.dossier.class_qp_active}
%input{id: 'json_latlngs', type:'hidden', value: "#{@dossier.json_latlngs}"}
%input{id: 'quartier_prioritaires', type:'hidden', value: "#{@dossier.quartier_prioritaires.to_json}"}
%input{id: 'json_latlngs', type:'hidden', value: "#{@facade.dossier.json_latlngs}"}
%input{id: 'quartier_prioritaires', type:'hidden', value: "#{@facade.dossier.quartier_prioritaires.to_json}"}
%script{type: 'text/javascript'}
= "var dossier_id =#{@dossier.id}"
= "var dossier_id =#{@facade.dossier.id}"
initCarto();
%br
-unless @champs.nil?
-unless @facade.champs.nil?
.row
.col-lg-6.col-md-6
%table.table#liste_champs
-@champs.each do |champ|
-@facade.champs.each do |champ|
%tr
%th{ style: 'width:25%' }
=champ.libelle
@ -41,20 +51,20 @@
%div.row{style: 'text-align:right'}
-unless gestionnaire_signed_in?
-if !@dossier.validated? && !@dossier.submitted? && !@dossier.closed?
-if @dossier.procedure.module_api_carto.use_api_carto
%a#maj_carte.btn.btn-primary{href: "/users/dossiers/#{@dossier.id}/carte"}
-if !@facade.dossier.validated? && !@facade.dossier.submitted? && !@facade.dossier.closed?
-if @facade.dossier.procedure.module_api_carto.use_api_carto
%a#maj_carte.btn.btn-primary{href: "/users/dossiers/#{@facade.dossier.id}/carte"}
= 'Editer ma carte'
%a#maj_infos.btn.btn-info{href: "/users/dossiers/#{@dossier.id}/description"}
%a#maj_infos.btn.btn-info{href: "/users/dossiers/#{@facade.dossier.id}/description"}
= 'Editer mon dossier'
-unless user_signed_in?
-if !@dossier.validated? && !@dossier.submitted? && !@dossier.closed?
= form_tag(url_for({controller: 'backoffice/dossiers', action: :valid, dossier_id: @dossier.id}), class: 'form-inline', method: 'POST') do
-if !@facade.dossier.validated? && !@facade.dossier.submitted? && !@facade.dossier.closed?
= form_tag(url_for({controller: 'backoffice/dossiers', action: :valid, dossier_id: @facade.dossier.id}), class: 'form-inline', method: 'POST') do
%button#action_button.btn.btn-success
= 'Valider le dossier'
-elsif @dossier.submitted?
= form_tag(url_for({controller: 'backoffice/dossiers', action: :close, dossier_id: @dossier.id}), class: 'form-inline', method: 'POST') do
-elsif @facade.dossier.submitted?
= form_tag(url_for({controller: 'backoffice/dossiers', action: :close, dossier_id: @facade.dossier.id}), class: 'form-inline', method: 'POST') do
%button#action_button.btn.btn-success
= 'Traiter le dossier'

View file

@ -1,37 +1,37 @@
.col-md-12
%h4
= @entreprise.raison_sociale_or_name
= @facade.entreprise.raison_sociale_or_name
.row#infos_entreprise
.col-lg-6.col-md-6
%dl.dl-horizontal
%dt Siret :
%dd.text-success= @etablissement.siret
%dd.text-success= @facade.etablissement.siret
- if @etablissement.siret != @entreprise.siret_siege_social
- if @facade.etablissement.siret != @facade.entreprise.siret_siege_social
%dt SIRET siège social :
%dd= @entreprise.siret_siege_social
%dd= @facade.entreprise.siret_siege_social
%dt Forme juridique :
%dd= @entreprise.forme_juridique
%dd= @facade.entreprise.forme_juridique
%dt Libellé naf :
%dd= @etablissement.libelle_naf
%dd= @facade.etablissement.libelle_naf
%dt Code naf :
%dd= @etablissement.naf
%dd= @facade.etablissement.naf
%dt Date de création :
%dd= Time.at(@entreprise.date_creation).strftime "%d-%m-%Y"
%dd= Time.at(@facade.entreprise.date_creation).strftime "%d-%m-%Y"
%dt Effectif organisation :
%dd= @entreprise.effectif
%dd= @facade.entreprise.effectif
%dt Code effectif :
%dd= @entreprise.code_effectif_entreprise
%dd= @facade.entreprise.code_effectif_entreprise
%dt Numéro TVA intracommunautaire :
%dd= @entreprise.numero_tva_intracommunautaire
%dd= @facade.entreprise.numero_tva_intracommunautaire
.col-lg-6.col-md-6
@ -39,21 +39,21 @@
%dt Adresse :
%dd
%address
- @etablissement.adresse.split("\n").each do |line|
- @facade.etablissement.adresse.split("\n").each do |line|
= line
%br
%dt Capital social :
%dd= @entreprise.pretty_capital_social
%dd= @facade.entreprise.pretty_capital_social
%dt Exercices :
%dd
%address
- @etablissement.exercices.each_with_index do |exercice, index|
- @facade.etablissement.exercices.each_with_index do |exercice, index|
%strong
= "#{exercice.dateFinExercice.year} : "
= number_to_currency(exercice.ca)
%br
- unless @entreprise.rna_information.nil?
- unless @facade.entreprise.rna_information.nil?
= render partial: '/dossiers/infos_rna'

View file

@ -2,22 +2,22 @@
.col-lg-6.col-md-6
%dl.dl-horizontal
%dt Association ID :
%dd.text-success= @entreprise.rna_information.association_id
%dd.text-success= @facade.entreprise.rna_information.association_id
%dt Titre :
%dd= @entreprise.rna_information.titre
%dd= @facade.entreprise.rna_information.titre
%dt Objet :
%dd= @entreprise.rna_information.objet
%dd= @facade.entreprise.rna_information.objet
.col-lg-6.col-md-6
%dl.dl-horizontal
%dt Date création :
%dd= @entreprise.rna_information.date_creation
%dd= @facade.entreprise.rna_information.date_creation
%dt Capital publication :
%dd= @entreprise.rna_information.date_publication
%dd= @facade.entreprise.rna_information.date_publication
%dt Capital déclaration :
%dd= @entreprise.rna_information.date_declaration
%dd= @facade.entreprise.rna_information.date_declaration

View file

@ -1,23 +1,22 @@
#pieces_justificatives
-#%h3.text-info Liste des pièces justificatives
-#%br
%table.table
-if @procedure.lien_demarche != nil
-if @facade.procedure.lien_demarche != nil
%tr{id: "piece_justificative_0"}
%th{class:'col-lg-6'}
='CERFA'
-if @procedure.lien_demarche != nil
%a{style:'font-size:0.9em; padding-left:3px', id: 'lien_cerfa' ,href: "#{@procedure.lien_demarche}", :target => '_blank'} Lien CERFA
='Formulaire'
%td.col-lg-6.col-md-6
- if !@dossier.cerfa.empty?
- if !@facade.dossier.cerfa.empty?
- if user_signed_in?
= 'Pièce fournie'
- elsif gestionnaire_signed_in?
%a{ href: "#{@dossier.cerfa.content}", target: '_blank' } Consulter
%a{ href: "#{(Downloader.new @facade.dossier.cerfa.content, 'CERFA').url}", target: '_blank' } Consulter
- else
= 'Pièce non fournie'
- @dossier.pieces_justificatives.each do |piece_justificative|
- @facade.dossier.pieces_justificatives.each do |piece_justificative|
%tr{ id: "piece_justificative_#{piece_justificative.type}" }
%th.col-lg-6
= piece_justificative.libelle
@ -25,7 +24,10 @@
- if piece_justificative.api_entreprise
%span.text-success Nous l'avons récupéré pour vous.
- elsif !piece_justificative.empty?
%a{ href: "#{piece_justificative.content}", target: '_blank' } Consulter
- if user_signed_in?
= 'Pièce fournie'
- elsif gestionnaire_signed_in?
%a{ href: "#{(Downloader.new piece_justificative.content, piece_justificative.type_de_piece_justificative.libelle).url}", target: '_blank' } Consulter
- else
= 'Pièce non fournie'

View file

@ -5,7 +5,7 @@
%div.row
= render partial: '/dossiers/infos_entreprise'
%br
= form_for @dossier, url: { controller: '/users/dossiers', action: :update } do |f|
= form_for @facade.dossier, url: { controller: '/users/dossiers', action: :update } do |f|
%label{ style:'font-weight:normal' }
= f.check_box :autorisation_donnees
J'autorise les décideurs publics à vérifier les informations de mon organisation auprès des administrations concernées. Ces informations resteront strictement confidentielles.

View file

@ -0,0 +1,28 @@
%h2.text-info
= image_tag('logo_FC_02_small.png', style: 'height: 55px')
&nbsp;France Connect - Particulier
%h3 Nouvelle connexion
%h4.text-warning{style:'margin-left: 20px'} Email déjà utilisé
%br
%p
%h4.center Nous vous avons trouvé un compte qui utilise déjà cette adresse email.
%p.center
Afin d'associer ce compte à votre identifiant France Connect, merci de saisir votre mot de passe TPS.
%br
.center
#france_connect_particulier_email
= form_for @user, url: {controller: 'france_connect/particulier', action: :check_email}, method: :post do |f|
.form-group.form-group-lg
= f.text_field :email, class: "form-control", placeholder: "Entrez votre email", readonly: 'readonly'
%br
= f.password_field :password, class: "form-control", placeholder: "Entrez votre mot de passe"
= f.hidden_field :email
= f.hidden_field :gender
= f.hidden_field :given_name
= f.hidden_field :family_name
= f.hidden_field :birthdate
= f.hidden_field :birthplace
= f.hidden_field :france_connect_particulier_id
= f.submit 'Terminer', class: %w(btn btn-lg btn-success), style: 'margin-top:20px;', id: 'valid_new_fcp'

View file

@ -0,0 +1,36 @@
%h2.text-info
= image_tag('logo_FC_02_small.png', style: 'height: 55px')
&nbsp;France Connect - Particulier
%h3 Nouvelle connexion
%br
%p
Nous vous avons correctement identifié comme étant
%h4.text-info.center
%strong
= @user.gender_fr
= @user.given_name
= @user.family_name
né le
%strong
= @user.birthdate_fr
%br
%h4
Afin de finaliser votre première connexion à TPS, merci de saisir un email valide :
%br
.center
#france_connect_particulier_email
= form_for @user, url: {controller: 'france_connect/particulier', action: :check_email}, method: :post do |f|
.form-group.form-group-lg
= f.text_field :email, class: "form-control", placeholder: "Entrez votre email"
= f.hidden_field :gender
= f.hidden_field :given_name
= f.hidden_field :family_name
= f.hidden_field :birthdate
= f.hidden_field :birthplace
= f.hidden_field :france_connect_particulier_id
= f.submit 'Terminer', class: %w(btn btn-lg btn-success), style: 'margin-top:20px;', id: 'valid_new_fcp'

View file

@ -25,12 +25,18 @@
= render partial: 'administrateurs/login_banner'
- elsif user_signed_in?
%div.user
-if current_user.loged_in_with_france_connect
= image_tag('logo_FC_02_small.png', class: 'logo_fc_small')
-if current_user.loged_in_with_france_connect?
%div{ id: "fconnect-profile", "data-fc-logout-url" => '/users/sign_out" data-method="delete' }
%a.text-info{ href: "#" }
= "#{current_user.given_name} #{current_user.family_name}"
= link_to "", '/users/sign_out', method: :delete, :class => 'btn fa fa-power-off off-fc-link'
-else
%i.fa.fa-user
= current_user.email
= link_to "Déconnexion", '/users/sign_out', method: :delete, :class => 'btn btn-md'
= current_user.email
= link_to "Déconnexion", '/users/sign_out', method: :delete, :class => 'btn btn-md'
#flash_message.center
- if flash.notice
@ -42,3 +48,4 @@
%div{:style => 'margin-left:10%; margin-right:10%;'}
= yield

View file

@ -40,15 +40,18 @@
%br
%h3 Documents administratifs
-if @procedure.lien_demarche != nil
%p
Formulaire / documentation de la démarche :
%a{style:'font-size:0.9em; padding-left:3px', id: 'lien_cerfa' ,href: "#{@procedure.lien_demarche}", :target => '_blank'} Accéder
%br
//TODO a refactorer
%table{class:'table', style:'width:55%; margin-left:5%'}
%tr
%th{class:'col-lg-6'}
='Charger votre CERFA (.pdf)'
-if @procedure.lien_demarche != nil
%a{style:'font-size:0.9em; padding-left:3px', id: 'lien_cerfa' ,href: "#{@procedure.lien_demarche}", :target => '_blank'} Lien CERFA
='Formulaire (.pdf / .doc)'
%td{class:'col-lg-5'}
-if !@dossier.cerfa.empty?

View file

@ -1,17 +1,23 @@
%table.table
%thead
%th Procédure
%th Nom du Projet
%th Etat
%th Mise à jour
- @dossiers.each do |dossier|
%tr
%td
= dossier.procedure.libelle
%td
= link_to(dossier.nom_projet, users_dossier_recapitulatif_path(dossier))
%td{id: "dossier_#{dossier.id}_state"}= dossier.state_fr
%td= dossier.last_update
- unless smart_listing.empty?
%table.table
%thead
%th.col-md-4.col-lg-4= smart_listing.sortable 'Procédure', 'procedure.libelle'
%th.col-md-4.col-lg-4= smart_listing.sortable 'Nom du Projet', 'nom_projet'
%th.col-md-2.col-lg-2= smart_listing.sortable 'État', 'state'
%th.col-md-2.col-lg-2= smart_listing.sortable 'Date de mise à jour', 'updated_at'
- @dossiers.each do |dossier|
- dossier = dossier.decorate
%tr
%td
= dossier.procedure.libelle
%td
= link_to(dossier.nom_projet, users_dossier_recapitulatif_path(dossier))
%td{id: "dossier_#{dossier.id}_state"}= dossier.display_state
%td= dossier.last_update
.pagination
= will_paginate @dossiers, renderer: BootstrapPagination::Rails
= smart_listing.paginate
= smart_listing.pagination_per_page_links
- else
%h4.center
Aucun dossier

View file

@ -3,21 +3,21 @@
#onglets
%ul.nav.nav-tabs
%li{ class: (@dossiers.active_class_a_traiter(@liste) unless @dossiers.nil?) }
%li{ class: @a_traiter_class }
%a{:href => "#{url_for users_dossiers_path(liste: 'a_traiter')}"}
%h5.text-danger
= "À traiter "
.badge.progress-bar-danger
= @dossiers_a_traiter_total
%li{ class: (@dossiers.active_class_en_attente(@liste) unless @dossiers.nil?) }
%li{ class: @en_attente_class }
%a{:href => "#{url_for users_dossiers_path(liste: 'en_attente')}"}
%h5.text-info
="En attente "
.badge.progress-bar-info
= @dossiers_en_attente_total
%li{ class: (@dossiers.active_class_termine(@liste) unless @dossiers.nil?) }
%li{ class: @termine_class }
%a{:href => "#{url_for users_dossiers_path(liste: 'termine')}"}
%h5.text-success
= "Terminé"

View file

@ -1,4 +1,4 @@
#users_index
= render partial: 'onglets'
= render partial: 'list'
= smart_listing_render :dossiers

View file

@ -0,0 +1 @@
<%= smart_listing_update :dossiers %>

View file

@ -1,12 +1,12 @@
.content#commentaires_flux{style:'width:100%;'}
%div#commentaire_new{style: 'width:80%; margin-left:auto; margin-right:auto'}
= form_tag(url_for({ controller: :commentaires, action: :create, dossier_id: @dossier.id }), class: 'form-inline', method: 'POST') do
= form_tag(url_for({ controller: :commentaires, action: :create, dossier_id: @facade.dossier.id }), class: 'form-inline', method: 'POST') do
%textarea.form-control{id: 'texte_commentaire', name: 'texte_commentaire', style: 'width: 100%; margin-bottom:2%', rows: '5', maxlength: '255', placeholder:"Dialoguer avec votre interlocuteur privilégié en charge de votre dossier."}
%input.form-control.btn.btn-success{:type => 'submit', :value => 'Poster', style: 'float:right'}
%br
%br
-@commentaires.each do |com|
-@facade.commentaires.each do |com|
%span.text-info#email_contact{style: 'font-weight:bold'}
=com.email
%span#created_at

View file

@ -4,7 +4,7 @@
.col-md-6.col-lg-6
%h2 Récapitulatif
.col-md-6.col-lg-6
= form_tag "/users/dossiers/#{@dossier.id}/archive", style:'margin-top:21px', action: :archive, method: :put do
= form_tag "/users/dossiers/#{@facade.dossier.id}/archive", style:'margin-top:21px', action: :archive, method: :put do
%button#archive.btn.btn-sm.btn-default.text-info{type: :button}
%i.fa.fa-eraser
Archiver
@ -20,17 +20,17 @@
.col-md-3.col-lg-3
%h2#dossier_id{:class => 'text-info', :style => 'text-align:right; margin-bottom:15px'}
= "Dossier n°#{@dossier.id}"
= "Dossier n°#{@facade.dossier.id}"
- unless gestionnaire_signed_in?
-if @dossier.validated?
-if @facade.dossier.validated?
%br
= form_tag(url_for({controller: :recapitulatif, action: :submit, dossier_id: @dossier.id}), method: 'POST') do
= form_tag(url_for({controller: :recapitulatif, action: :submit, dossier_id: @facade.dossier.id}), method: 'POST') do
%button#validate_button.btn.btn-success
= 'Déposer mon dossier'
-else
%h3{:class => 'text-success', :style => 'text-align:right'}
= @dossier.state_fr
= @facade.dossier.display_state
%br

View file

@ -3,14 +3,15 @@
%br
%h2#login_user Connexion
-#%a.btn.btn-default.btn-lg.btn-primary#btn_fc{href: '/france_connect'}
-# %div{style:'margin-left:35px'}
-# S'identifier avec
-# France Connect
-#%hr
%a.btn_fc#btn_fcp{href: '/france_connect/particulier'}
= image_tag 'franceconnect_logo.png'
%br
%br
%a.text-info{href: 'https://fcp.integ01.dev-franceconnect.fr/a-propos', target: '_blank'}
Quest-ce que FranceConnect ?
%hr
= form_for(resource, as: resource_name, url: session_path(resource_name)) do |f|
%h4
= f.label :email