Merge branch 'dev'

This commit is contained in:
gregoirenovel 2018-01-15 11:27:12 +01:00
commit aa12eb2c49
180 changed files with 251 additions and 12249 deletions

View file

@ -579,7 +579,7 @@ Rails/PluralizationGrammar:
Enabled: false Enabled: false
Rails/Present: Rails/Present:
Enabled: false Enabled: true
Rails/ReadWriteAttribute: Rails/ReadWriteAttribute:
Enabled: false Enabled: false
@ -1029,7 +1029,7 @@ Style/TrivialAccessors:
Enabled: false Enabled: false
Style/UnlessElse: Style/UnlessElse:
Enabled: false Enabled: true
Style/UnneededCapitalW: Style/UnneededCapitalW:
Enabled: false Enabled: false

View file

@ -17,7 +17,6 @@
// = require _turbolinks // = require _turbolinks
// = require admin_procedures_modal // = require admin_procedures_modal
// = require admin_type_de_champ // = require admin_type_de_champ
// = require backoffice
// = require carte // = require carte
// = require custom_mails // = require custom_mails
// = require default_data_block // = require default_data_block

View file

@ -1,54 +0,0 @@
#backoffice-index,
#backoffice-search {
margin-left: 2rem;
margin-right: 2rem;
.default-data-block {
background-color: #FFFFFF;
margin-top: 20px;
.show-block {
width: 100%;
}
.body {
height: auto;
}
}
.fixed-right {
position: fixed;
right: 20px;
}
}
#onglets {
ul {
li,
li.active {
a {
margin-top: 12px;
height: 45px;
h5 {
margin-top: 5px;
}
}
}
#search {
a {
margin-top: 0px;
height: 57px;
}
}
#search:not(.active) {
a:hover {
background-color: transparent;
border: none;
padding: 11px 16px;
}
}
}
}

View file

@ -1,4 +1,3 @@
#backoffice-dossier-show,
#users-recapitulatif-dossier-show { #users-recapitulatif-dossier-show {
#messages { #messages {

View file

@ -0,0 +1,8 @@
.types-de-champs-table {
table-layout: fixed;
td {
white-space: normal;
vertical-align: top;
}
}

View file

@ -12,10 +12,6 @@
margin-bottom: -70px; margin-bottom: -70px;
} }
#backoffice-dossier-show .nav-tabs {
display: none;
}
#left-panel { #left-panel {
margin-top: 0; margin-top: 0;
height: auto; height: auto;

View file

@ -30,7 +30,6 @@ class Admin::AccompagnateursController < AdminController
accompagnateur_service = AccompagnateurService.new gestionnaire, procedure, to accompagnateur_service = AccompagnateurService.new gestionnaire, procedure, to
accompagnateur_service.change_assignement! accompagnateur_service.change_assignement!
accompagnateur_service.build_default_column
flash.notice = "Assignement effectué" flash.notice = "Assignement effectué"
redirect_to admin_procedure_accompagnateurs_path, procedure_id: params[:procedure_id] redirect_to admin_procedure_accompagnateurs_path, procedure_id: params[:procedure_id]

View file

@ -11,7 +11,7 @@ class Admin::ChangeDossierStateController < AdminController
def check def check
@dossier = Dossier.find(params[:dossier][:id]) @dossier = Dossier.find(params[:dossier][:id])
unless @dossier.procedure.administrateur.email == current_administrateur.email if @dossier.procedure.administrateur.email != current_administrateur.email
flash.alert = 'Dossier introuvable' flash.alert = 'Dossier introuvable'
return redirect_to admin_change_dossier_state_path return redirect_to admin_change_dossier_state_path
end end

View file

@ -71,7 +71,7 @@ class Admin::ProceduresController < AdminController
@procedure = Procedure.new(procedure_params) @procedure = Procedure.new(procedure_params)
@procedure.module_api_carto = ModuleAPICarto.new(create_module_api_carto_params) if @procedure.valid? @procedure.module_api_carto = ModuleAPICarto.new(create_module_api_carto_params) if @procedure.valid?
unless @procedure.save if !@procedure.save
flash.now.alert = @procedure.errors.full_messages flash.now.alert = @procedure.errors.full_messages
return render 'new' return render 'new'
end end
@ -83,7 +83,7 @@ class Admin::ProceduresController < AdminController
def update def update
@procedure = current_administrateur.procedures.find(params[:id]) @procedure = current_administrateur.procedures.find(params[:id])
unless @procedure.update_attributes(procedure_params) if !@procedure.update_attributes(procedure_params)
flash.now.alert = @procedure.errors.full_messages flash.now.alert = @procedure.errors.full_messages
return render 'edit' return render 'edit'
end end

View file

@ -3,13 +3,13 @@ class APIController < ApplicationController
before_action :default_format_json before_action :default_format_json
def authenticate_user def authenticate_user
render json: {}, status: 401 unless valid_token? render json: {}, status: 401 if !valid_token?
end end
protected protected
def valid_token? def valid_token?
!current_administrateur.nil? current_administrateur.present?
end end
def current_administrateur def current_administrateur
@ -17,6 +17,6 @@ class APIController < ApplicationController
end end
def default_format_json def default_format_json
request.format = "json" unless request.params[:format] request.format = "json" if !request.params[:format]
end end
end end

View file

@ -1,40 +0,0 @@
class Backoffice::AvisController < ApplicationController
before_action :authenticate_gestionnaire!
def create
avis = Avis.new(create_params.merge(claimant: current_gestionnaire, dossier: dossier, confidentiel: true))
if avis.save
flash[:notice] = "Votre demande d'avis a bien été envoyée à #{avis.email_to_display}"
end
redirect_to backoffice_dossier_path(dossier)
end
def update
if avis.update(update_params)
NotificationService.new('avis', params[:dossier_id]).notify
flash[:notice] = 'Merci, votre avis a été enregistré.'
end
redirect_to backoffice_dossier_path(avis.dossier_id)
end
private
def dossier
current_gestionnaire.dossiers.find(params[:dossier_id])
end
def avis
current_gestionnaire.avis.find(params[:id])
end
def create_params
params.require(:avis).permit(:email, :introduction)
end
def update_params
params.require(:avis).permit(:answer)
end
end

View file

@ -1,7 +0,0 @@
class Backoffice::CommentairesController < CommentairesController
before_action :authenticate_gestionnaire!
def is_gestionnaire?
true
end
end

View file

@ -1,24 +0,0 @@
class Backoffice::Dossiers::ProcedureController < Backoffice::DossiersListController
def index
super
dossiers_list_facade.service.filter_procedure! params[:id]
render 'backoffice/dossiers/index'
rescue ActiveRecord::RecordNotFound
flash.alert = "Cette procédure n'existe pas ou vous n'y avez pas accès."
redirect_to backoffice_dossiers_path
end
def filter
super
redirect_to backoffice_dossiers_procedure_path(id: params[:id])
end
private
def retrieve_procedure
current_gestionnaire.procedures.find params[:id]
end
end

View file

@ -1,226 +0,0 @@
class Backoffice::DossiersController < Backoffice::DossiersListController
include ActionView::Helpers::NumberHelper
respond_to :html, :xlsx, :ods, :csv
prepend_before_action :store_current_location, only: :show
before_action :ensure_gestionnaire_is_authorized, only: :show
def index
return redirect_to backoffice_invitations_path if current_gestionnaire.avis.any?
procedure = current_gestionnaire.procedure_filter
if procedure.nil?
procedure_list = dossiers_list_facade.gestionnaire_procedures_name_and_id_list
if procedure_list.count == 0
flash.alert = "Vous n'avez aucune procédure d'affectée."
return redirect_to root_path
end
procedure = procedure_list.first[:id]
end
redirect_to backoffice_dossiers_procedure_path(id: procedure)
end
def show
dossier_id = params[:id]
create_dossier_facade dossier_id
unless @facade.nil?
@champs_private = @facade.champs_private
@headers_private = @champs_private.select { |champ| champ.type_champ == 'header_section' }
end
# if the current_gestionnaire does not own the dossier, it is here to give an advice
# and it should not remove the notifications
if current_gestionnaire.dossiers.find_by(id: dossier_id).present?
Notification.where(dossier_id: dossier_id).update_all(already_read: true)
end
@new_avis = Avis.new(introduction: "Bonjour, merci de me donner votre avis sur ce dossier.")
end
def filter
super
redirect_to backoffice_dossiers_path(liste: param_liste)
end
def download_dossiers_tps
procedure = current_gestionnaire.procedures.find_by(id: params[:procedure_id])
export = procedure.generate_export
respond_to do |format|
format.csv { send_data(SpreadsheetArchitect.to_csv(data: export[:data], headers: export[:headers]), filename: 'dossiers.csv') }
format.xlsx { send_data(SpreadsheetArchitect.to_xlsx(data: export[:data], headers: export[:headers]), filename: 'dossiers.xlsx') }
format.ods { send_data(SpreadsheetArchitect.to_ods(data: export[:data], headers: export[:headers]), filename: 'dossiers.ods') }
end
end
def search
@search_terms = params[:q]
# exact id match?
if @search_terms.to_i != 0
@dossiers = current_gestionnaire.dossiers.where(id: @search_terms.to_i)
end
@dossiers = Dossier.none if @dossiers.nil?
# full text search
unless @dossiers.any?
@dossiers = Search.new(
gestionnaire: current_gestionnaire,
query: @search_terms,
page: params[:page]
).results
end
smart_listing_create :search,
@dossiers,
partial: "backoffice/dossiers/list",
array: true,
default_sort: dossiers_list_facade.service.default_sort
rescue RuntimeError
smart_listing_create :search,
[],
partial: "backoffice/dossiers/list",
array: true,
default_sort: dossiers_list_facade.service.default_sort
end
def receive
dossier = Dossier.find(params[:dossier_id])
dossier.en_instruction!
current_gestionnaire.follow(dossier)
flash.notice = 'Dossier passé en instruction.'
redirect_to backoffice_dossier_path(id: dossier.id)
end
def process_dossier
create_dossier_facade params[:dossier_id]
dossier = @facade.dossier
if params[:dossier] && params[:dossier][:motivation].present?
dossier.motivation = params[:dossier][:motivation]
end
case params[:process_action]
when "refuse"
dossier.refuse!
notice = "Dossier considéré comme refusé."
template = dossier.procedure.refused_mail_template
when "without_continuation"
dossier.sans_suite!
notice = "Dossier considéré comme sans suite."
template = dossier.procedure.without_continuation_mail_template
when "close"
dossier.accepte!
dossier.attestation = dossier.build_attestation
notice = "Dossier traité avec succès."
template = dossier.procedure.closed_mail_template
end
dossier.save
# needed to force Carrierwave to provide dossier.attestation.pdf.read
# when the Feature.remote_storage is true, otherwise pdf.read is a closed stream.
dossier.reload
attestation_pdf = nil
if check_attestation_emailable(dossier)
attestation_pdf = dossier.attestation.pdf.read
end
flash.notice = notice
NotificationMailer.send_notification(dossier, template, attestation_pdf).deliver_now!
redirect_to backoffice_dossier_path(id: dossier.id)
end
def reload_smartlisting
begin
@liste = URI(request.referer).query.split('=').second
rescue NoMethodError
@liste = cookies[:liste] || 'all_state'
end
smartlisting_dossier
render 'backoffice/dossiers/index', formats: :js
end
def archive
facade = create_dossier_facade params[:id]
unless facade.dossier.archived
facade.dossier.update(archived: true)
flash.notice = 'Dossier archivé'
end
redirect_to backoffice_dossiers_path
end
def unarchive
@dossier = Dossier.find(params[:id])
if @dossier.archived
@dossier.update(archived: false)
flash.notice = 'Dossier désarchivé'
end
redirect_to backoffice_dossier_path(@dossier)
end
def reopen
create_dossier_facade params[:dossier_id]
@facade.dossier.en_construction!
flash.notice = 'Dossier repassé en construction.'
redirect_to backoffice_dossier_path(id: @facade.dossier.id)
end
private
def check_attestation_emailable(dossier)
if dossier&.attestation&.emailable? == false
human_size = number_to_human_size(dossier.attestation.pdf.size)
msg = "the attestation of the dossier #{dossier.id} cannot be mailed because it is too heavy: #{human_size}"
capture_message(msg, level: 'error')
end
dossier&.attestation&.emailable?
end
def store_current_location
if !gestionnaire_signed_in?
store_location_for(:gestionnaire, request.url)
end
end
def ensure_gestionnaire_is_authorized
unless current_gestionnaire.can_view_dossier?(params[:id])
flash.alert = t('errors.messages.dossier_not_found')
redirect_to url_for(controller: '/backoffice')
end
end
def create_dossier_facade dossier_id
@facade = DossierFacades.new dossier_id, current_gestionnaire.email
rescue ActiveRecord::RecordNotFound
flash.alert = t('errors.messages.dossier_not_found')
redirect_to url_for(controller: '/backoffice')
end
def retrieve_procedure
return if params[:procedure_id].blank?
current_gestionnaire.procedures.find params[:procedure_id]
end
end

View file

@ -1,78 +0,0 @@
class Backoffice::DossiersListController < ApplicationController
include SmartListing::Helper::ControllerExtensions
helper SmartListing::Helper
before_action :authenticate_gestionnaire!
def index
cookies[:liste] = param_liste
unless DossiersListGestionnaireService.dossiers_liste_libelle.include?(param_liste)
cookies[:liste] = 'all_state'
end
dossiers_list_facade param_liste
dossiers_list_facade.service.change_sort! param_sort unless param_smart_listing.nil?
dossiers_list_facade.service.change_page! param_page
smartlisting_dossier
end
def filter
dossiers_list_facade param_liste
dossiers_list_facade.service.add_filter param_filter
end
def dossiers_list_facade liste='all_state'
@facade_data_view ||= DossiersListFacades.new current_gestionnaire, liste, retrieve_procedure
end
def smartlisting_dossier dossiers_list=nil, liste='all_state'
dossiers_list_facade liste
service = dossiers_list_facade.service
if param_page.nil?
params[:dossiers_smart_listing] = {page: dossiers_list_facade.service.default_page}
end
default_smart_listing_create :new_dossiers, service.nouveaux.without_followers.order_by_updated_at('asc')
default_smart_listing_create :follow_dossiers, service.suivi.order_by_updated_at('asc')
default_smart_listing_create :all_state_dossiers, service.all_state.order_by_updated_at('asc')
default_smart_listing_create :archived_dossiers, service.archive
@archived_dossiers = service.archive
end
private
def default_smart_listing_create name, collection
smart_listing_create name,
collection,
partial: 'backoffice/dossiers/list',
array: true,
default_sort: dossiers_list_facade.service.default_sort
end
def param_smart_listing
params[:dossiers_smart_listing]
end
def param_page
unless param_smart_listing.nil?
return 1 if params[:dossiers_smart_listing][:page].blank?
params[:dossiers_smart_listing][:page]
end
end
def param_sort
params[:dossiers_smart_listing][:sort] unless param_smart_listing.nil?
end
def param_filter
params[:filter_input]
end
def param_liste
@liste ||= params[:liste] || cookies[:liste] || 'all_state'
end
end

View file

@ -1,50 +0,0 @@
class Backoffice::PreferenceListDossierController < Backoffice::DossiersListController
include SmartListing::Helper::ControllerExtensions
helper SmartListing::Helper
before_action :authenticate_gestionnaire!
before_action :params_procedure_id
def add
PreferenceListDossier.create(
libelle: params[:libelle],
table: (params[:table].empty? ? nil : params[:table]),
attr: params[:attr],
attr_decorate: params[:attr_decorate],
bootstrap_lg: params[:bootstrap_lg],
order: nil,
filter: nil,
gestionnaire: current_gestionnaire,
procedure_id: params_procedure_id
)
render partial: path, formats: :js
end
def reload_pref_list
dossiers_list_facade
render partial: 'backoffice/dossiers/pref_list', id: params_procedure_id
end
def delete
PreferenceListDossier.delete(params[:pref_id])
render partial: path, formats: :js
end
private
def path
'backoffice/dossiers/pref_list'
end
def params_procedure_id
@procedure_id ||= params[:procedure_id]
end
def retrieve_procedure
return if params[:procedure_id].blank?
current_gestionnaire.procedures.find params_procedure_id
end
end

View file

@ -1,20 +0,0 @@
class Backoffice::PrivateFormulairesController < ApplicationController
before_action :authenticate_gestionnaire!
def update
dossier = current_gestionnaire.dossiers.find(params[:dossier_id])
unless params[:champs].nil?
ChampsService.save_champs dossier.champs_private, params
champs_service_errors = ChampsService.build_error_messages(dossier.champs_private)
if champs_service_errors.empty?
flash[:notice] = "Formulaire enregistré"
else
flash[:alert] = champs_service_errors
end
end
render 'backoffice/dossiers/formulaire_private', formats: :js
end
end

View file

@ -1,28 +0,0 @@
class BackofficeController < ApplicationController
include SmartListing::Helper::ControllerExtensions
helper SmartListing::Helper
before_action :authenticate_gestionnaire!, only: [:invitations]
def index
if !gestionnaire_signed_in?
redirect_to(controller: '/gestionnaires/sessions', action: :new)
else
redirect_to(:backoffice_dossiers)
end
end
def invitations
pending_avis = current_gestionnaire.avis.without_answer.includes(dossier: [:procedure]).by_latest
@pending_avis = smart_listing_create :pending_avis,
pending_avis,
partial: 'backoffice/dossiers/list_invitations',
array: true
avis_with_answer = current_gestionnaire.avis.with_answer.includes(dossier: [:procedure]).by_latest
@avis_with_answer = smart_listing_create :avis_with_answer,
avis_with_answer,
partial: 'backoffice/dossiers/list_invitations',
array: true
end
end

View file

@ -10,7 +10,7 @@ class Ban::SearchController < ApplicationController
def get_address_point def get_address_point
point = Carto::Geocodeur.convert_adresse_to_point(params[:request]) point = Carto::Geocodeur.convert_adresse_to_point(params[:request])
unless point.nil? if point.present?
lon = point.x.to_s lon = point.x.to_s
lat = point.y.to_s lat = point.y.to_s
end end

View file

@ -16,13 +16,8 @@ class CommentairesController < ApplicationController
@commentaire.champ = @commentaire.dossier.champs.find(params[:champ_id]) if params[:champ_id] @commentaire.champ = @commentaire.dossier.champs.find(params[:champ_id]) if params[:champ_id]
dossier_id = params['dossier_id'] dossier_id = params['dossier_id']
if is_gestionnaire? @commentaire.email = current_user.email
@commentaire.email = current_gestionnaire.email @commentaire.dossier = current_user.dossiers.find_by(id: dossier_id) || current_user.invites.find_by!(dossier_id: dossier_id).dossier
@commentaire.dossier = current_gestionnaire.dossiers.find_by(id: dossier_id) || current_gestionnaire.avis.find_by!(dossier_id: dossier_id).dossier
else
@commentaire.email = current_user.email
@commentaire.dossier = current_user.dossiers.find_by(id: dossier_id) || current_user.invites.find_by!(dossier_id: dossier_id).dossier
end
@commentaire.file = params["file"] @commentaire.file = params["file"]
@ -33,21 +28,11 @@ class CommentairesController < ApplicationController
flash.alert = "Veuillez rédiger un message ou ajouter une pièce jointe (maximum 20 Mo)" flash.alert = "Veuillez rédiger un message ou ajouter une pièce jointe (maximum 20 Mo)"
end end
if is_gestionnaire? if current_user.email != @commentaire.dossier.user.email
current_gestionnaire.follow(@commentaire.dossier) invite = Invite.where(dossier: @commentaire.dossier, email: current_user.email).first
redirect_to url_for(controller: 'users/dossiers/invites', action: :show, id: invite.id)
redirect_to url_for(controller: 'backoffice/dossiers', action: :show, id: params['dossier_id'])
else else
if current_user.email != @commentaire.dossier.user.email redirect_to users_dossier_recapitulatif_path(params['dossier_id'])
invite = Invite.where(dossier: @commentaire.dossier, email: current_user.email).first
redirect_to url_for(controller: 'users/dossiers/invites', action: :show, id: invite.id)
else
redirect_to users_dossier_recapitulatif_path(params['dossier_id'])
end
end end
end end
def is_gestionnaire?
false
end
end end

View file

@ -14,11 +14,11 @@ class FranceConnect::ParticulierController < ApplicationController
end end
def callback def callback
return redirect_to new_user_session_path unless params.has_key?(:code) return redirect_to new_user_session_path if !params.has_key?(:code)
user_infos = FranceConnectService.retrieve_user_informations_particulier(params[:code]) user_infos = FranceConnectService.retrieve_user_informations_particulier(params[:code])
unless user_infos.nil? if user_infos.present?
france_connect_information = FranceConnectInformation.find_by_france_connect_particulier user_infos france_connect_information = FranceConnectInformation.find_by_france_connect_particulier user_infos
france_connect_information = FranceConnectInformation.create( france_connect_information = FranceConnectInformation.create(
@ -44,7 +44,7 @@ class FranceConnect::ParticulierController < ApplicationController
end end
def new def new
return redirect_france_connect_error_connection unless valid_salt_and_fci_id_params? return redirect_france_connect_error_connection if !valid_salt_and_fci_id_params?
france_connect_information = FranceConnectInformation.find(params[:fci_id]) france_connect_information = FranceConnectInformation.find(params[:fci_id])
@user = User.new(france_connect_information: france_connect_information).decorate @user = User.new(france_connect_information: france_connect_information).decorate
@ -53,13 +53,13 @@ class FranceConnect::ParticulierController < ApplicationController
end end
def check_email def check_email
return redirect_france_connect_error_connection unless valid_salt_and_fci_id_params? return redirect_france_connect_error_connection if !valid_salt_and_fci_id_params?
user = User.find_by_email(params[:user][:email_france_connect]) user = User.find_by_email(params[:user][:email_france_connect])
return create if user.nil? return create if user.nil?
unless params[:user][:password].nil? if params[:user][:password].present?
if user.valid_password?(params[:user][:password]) if user.valid_password?(params[:user][:password])
user.france_connect_information = FranceConnectInformation.find(params[:fci_id]) user.france_connect_information = FranceConnectInformation.find(params[:fci_id])
@ -80,7 +80,7 @@ class FranceConnect::ParticulierController < ApplicationController
user = User.new email: params[:user][:email_france_connect] user = User.new email: params[:user][:email_france_connect]
user.password = Devise.friendly_token[0, 20] user.password = Devise.friendly_token[0, 20]
unless user.valid? if !user.valid?
flash.alert = 'Email non valide' flash.alert = 'Email non valide'
return redirect_to france_connect_particulier_new_path fci_id: params[:fci_id], salt: params[:salt], user: {email_france_connect: params[:user]['email_france_connect']} return redirect_to france_connect_particulier_new_path fci_id: params[:fci_id], salt: params[:salt], user: {email_france_connect: params[:user]['email_france_connect']}

View file

@ -13,25 +13,26 @@ class InvitesController < ApplicationController
invite = class_var.create(dossier: dossier, user: user, email: email, email_sender: email_sender) invite = class_var.create(dossier: dossier, user: user, email: email, email_sender: email_sender)
if invite.valid? if invite.valid?
InviteMailer.invite_user(invite).deliver_now! unless invite.user.nil? if invite.user.present?
InviteMailer.invite_guest(invite).deliver_now! if invite.user.nil? InviteMailer.invite_user(invite).deliver_now!
else
InviteMailer.invite_guest(invite).deliver_now!
end
flash.notice = "Invitation envoyée (#{invite.email})" flash.notice = "Invitation envoyée (#{invite.email})"
else else
flash.alert = invite.errors.full_messages flash.alert = invite.errors.full_messages
end end
if gestionnaire_signed_in? redirect_to url_for(controller: 'users/recapitulatif', action: :show, dossier_id: params['dossier_id'])
redirect_to url_for(controller: 'backoffice/dossiers', action: :show, id: params['dossier_id'])
else
redirect_to url_for(controller: 'users/recapitulatif', action: :show, dossier_id: params['dossier_id'])
end
end end
private private
def gestionnaire_or_user? def gestionnaire_or_user?
return redirect_to root_path unless user_signed_in? || gestionnaire_signed_in? if !user_signed_in? && !gestionnaire_signed_in?
return redirect_to root_path
end
@current_devise_profil = current_user if user_signed_in? @current_devise_profil = current_user if user_signed_in?
@current_devise_profil = current_gestionnaire if gestionnaire_signed_in? @current_devise_profil = current_gestionnaire if gestionnaire_signed_in?

View file

@ -136,13 +136,13 @@ module NewGestionnaire
def position def position
etablissement = dossier.etablissement etablissement = dossier.etablissement
point = Carto::Geocodeur.convert_adresse_to_point(etablissement.geo_adresse) unless etablissement.nil? point = Carto::Geocodeur.convert_adresse_to_point(etablissement.geo_adresse) if etablissement.present?
lon = "2.428462" lon = "2.428462"
lat = "46.538192" lat = "46.538192"
zoom = "13" zoom = "13"
unless point.nil? if point.present?
lon = point.x.to_s lon = point.x.to_s
lat = point.y.to_s lat = point.y.to_s
end end

View file

@ -2,16 +2,9 @@ class RootController < ApplicationController
layout 'new_application' layout 'new_application'
def index def index
# TODO delete new_ui when old UI is no longer used if administrateur_signed_in?
if params[:new_ui].present? && gestionnaire_signed_in?
return redirect_to procedures_path
elsif administrateur_signed_in?
return redirect_to admin_procedures_path return redirect_to admin_procedures_path
elsif gestionnaire_signed_in? elsif gestionnaire_signed_in?
# to be removed when old ui is deleted
if params[:old_ui].present?
return redirect_to backoffice_path
end
return redirect_to procedures_path return redirect_to procedures_path
elsif user_signed_in? elsif user_signed_in?
return redirect_to users_dossiers_path return redirect_to users_dossiers_path

View file

@ -17,7 +17,7 @@ class Users::CarteController < UsersController
dossier.quartier_prioritaires.each(&:destroy) dossier.quartier_prioritaires.each(&:destroy)
dossier.cadastres.each(&:destroy) dossier.cadastres.each(&:destroy)
unless params[:json_latlngs].blank? if params[:json_latlngs].present?
ModuleApiCartoService.save_qp! dossier, params[:json_latlngs] ModuleApiCartoService.save_qp! dossier, params[:json_latlngs]
ModuleApiCartoService.save_cadastre! dossier, params[:json_latlngs] ModuleApiCartoService.save_cadastre! dossier, params[:json_latlngs]
end end
@ -37,13 +37,13 @@ class Users::CarteController < UsersController
etablissement = nil etablissement = nil
end end
point = Carto::Geocodeur.convert_adresse_to_point(etablissement.geo_adresse) unless etablissement.nil? point = Carto::Geocodeur.convert_adresse_to_point(etablissement.geo_adresse) if etablissement.present?
lon = '2.428462' lon = '2.428462'
lat = '46.538192' lat = '46.538192'
zoom = '13' zoom = '13'
unless point.nil? if point.present?
lon = point.x.to_s lon = point.x.to_s
lat = point.y.to_s lat = point.y.to_s
end end

View file

@ -14,7 +14,7 @@ class Users::DescriptionController < UsersController
@headers = @champs.select { |c| c.type_champ == 'header_section' } @headers = @champs.select { |c| c.type_champ == 'header_section' }
unless @dossier.can_be_en_construction? if !@dossier.can_be_en_construction?
flash[:alert] = t('errors.messages.procedure_archived') flash[:alert] = t('errors.messages.procedure_archived')
end end
@ -27,13 +27,13 @@ class Users::DescriptionController < UsersController
dossier = current_user_dossier dossier = current_user_dossier
procedure = dossier.procedure procedure = dossier.procedure
return head :forbidden unless dossier.can_be_en_construction? return head :forbidden if !dossier.can_be_en_construction?
ChampsService.save_champs(dossier.champs, params) if params[:champs] ChampsService.save_champs(dossier.champs, params) if params[:champs]
if procedure.cerfa_flag? && params[:cerfa_pdf] if procedure.cerfa_flag? && params[:cerfa_pdf]
cerfa = Cerfa.new(content: params[:cerfa_pdf], dossier: dossier, user: current_user) cerfa = Cerfa.new(content: params[:cerfa_pdf], dossier: dossier, user: current_user)
return redirect_to_description_with_errors(dossier, cerfa.errors.full_messages) unless cerfa.save return redirect_to_description_with_errors(dossier, cerfa.errors.full_messages) if !cerfa.save
end end
errors_upload = PiecesJustificativesService.upload!(dossier, current_user, params) errors_upload = PiecesJustificativesService.upload!(dossier, current_user, params)
@ -69,15 +69,15 @@ class Users::DescriptionController < UsersController
@dossier ||= current_user_dossier @dossier ||= current_user_dossier
if @dossier.procedure.cerfa_flag? if @dossier.procedure.cerfa_flag?
unless params[:cerfa_pdf].nil? if params[:cerfa_pdf].present?
cerfa = Cerfa.new(content: params[:cerfa_pdf], dossier: @dossier, user: current_user) cerfa = Cerfa.new(content: params[:cerfa_pdf], dossier: @dossier, user: current_user)
unless cerfa.save if !cerfa.save
flash.alert = cerfa.errors.full_messages flash.alert = cerfa.errors.full_messages
end end
end end
end end
if !((errors_upload = PiecesJustificativesService.upload!(@dossier, current_user, params)).empty?) if (errors_upload = PiecesJustificativesService.upload!(@dossier, current_user, params)).present?
if flash.alert.nil? if flash.alert.nil?
flash.alert = errors_upload flash.alert = errors_upload
else else

View file

@ -2,9 +2,9 @@ class Users::Dossiers::AddSiretController < ApplicationController
def show def show
@facade = DossierFacades.new params[:dossier_id], current_user.email @facade = DossierFacades.new params[:dossier_id], current_user.email
raise ActiveRecord::RecordNotFound unless @facade.procedure.individual_with_siret? raise ActiveRecord::RecordNotFound if !@facade.procedure.individual_with_siret?
@siret = current_user.siret unless current_user.siret.nil? @siret = current_user.siret if current_user.siret.present?
rescue ActiveRecord::RecordNotFound rescue ActiveRecord::RecordNotFound
flash.alert = t('errors.messages.dossier_not_found') flash.alert = t('errors.messages.dossier_not_found')

View file

@ -1,7 +1,7 @@
class Users::Dossiers::InvitesController < UsersController class Users::Dossiers::InvitesController < UsersController
def authenticate_user! def authenticate_user!
session["user_return_to"] = request.fullpath session["user_return_to"] = request.fullpath
return redirect_to new_user_registration_path(user_email: params[:email]) if !params[:email].blank? && User.find_by_email(params[:email]).nil? return redirect_to new_user_registration_path(user_email: params[:email]) if params[:email].present? && User.find_by_email(params[:email]).nil?
super super
end end

View file

@ -36,7 +36,7 @@ class Users::DossiersController < UsersController
end end
def commencer def commencer
unless params[:procedure_path].nil? if params[:procedure_path].present?
procedure_path = ProcedurePath.where(path: params[:procedure_path]).last procedure_path = ProcedurePath.where(path: params[:procedure_path]).last
if procedure_path.nil? || procedure_path.procedure.nil? if procedure_path.nil? || procedure_path.procedure.nil?
@ -65,7 +65,7 @@ class Users::DossiersController < UsersController
dossier = Dossier.create(procedure: procedure, user: current_user, state: 'brouillon') dossier = Dossier.create(procedure: procedure, user: current_user, state: 'brouillon')
siret = params[:siret] || current_user.siret siret = params[:siret] || current_user.siret
update_current_user_siret! siret unless siret.nil? update_current_user_siret! siret if siret.present?
redirect_to users_dossier_path(id: dossier.id) redirect_to users_dossier_path(id: dossier.id)
rescue ActiveRecord::RecordNotFound rescue ActiveRecord::RecordNotFound
@ -74,7 +74,7 @@ class Users::DossiersController < UsersController
def show def show
@facade = facade @facade = facade
@siret = current_user.siret unless current_user.siret.nil? @siret = current_user.siret if current_user.siret.present?
if @facade.procedure.for_individual? && current_user.loged_in_with_france_connect? if @facade.procedure.for_individual? && current_user.loged_in_with_france_connect?
individual = @facade.dossier.individual individual = @facade.dossier.individual
@ -135,7 +135,7 @@ class Users::DossiersController < UsersController
flash.alert = individual_errors flash.alert = individual_errors
redirect_to users_dossier_path(id: @facade.dossier.id) redirect_to users_dossier_path(id: @facade.dossier.id)
else else
unless Dossier.find(@facade.dossier.id).update_attributes update_params_with_formatted_birthdate if !Dossier.find(@facade.dossier.id).update_attributes update_params_with_formatted_birthdate
flash.alert = @facade.dossier.errors.full_messages flash.alert = @facade.dossier.errors.full_messages
return redirect_to users_dossier_path(id: @facade.dossier.id) return redirect_to users_dossier_path(id: @facade.dossier.id)
@ -174,7 +174,7 @@ class Users::DossiersController < UsersController
private private
def check_siret def check_siret
errors_valid_siret unless Siret.new(siret: siret).valid? errors_valid_siret if !Siret.new(siret: siret).valid?
end end
def errors_valid_siret def errors_valid_siret

View file

@ -3,7 +3,7 @@ class Users::SessionsController < Sessions::SessionsController
# GET /resource/sign_in # GET /resource/sign_in
def new def new
unless user_return_to_procedure_id.nil? # WTF ? if user_return_to_procedure_id.present? # WTF ?
@dossier = Dossier.new(procedure: Procedure.active(user_return_to_procedure_id)) @dossier = Dossier.new(procedure: Procedure.active(user_return_to_procedure_id))
end end

View file

@ -16,7 +16,7 @@ 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' unless UserRoutesAuthorizationService.authorized_route?( redirect_to_root_path 'Le statut de votre dossier n\'autorise pas cette URL' if !UserRoutesAuthorizationService.authorized_route?(
controller, controller,
current_user_dossier) current_user_dossier)
rescue ActiveRecord::RecordNotFound rescue ActiveRecord::RecordNotFound

View file

@ -17,9 +17,7 @@ class DossierDecorator < Draper::Decorator
end end
def url(gestionnaire_signed_in) def url(gestionnaire_signed_in)
if gestionnaire_signed_in if brouillon?
backoffice_dossier_path(id)
elsif brouillon?
users_dossier_description_path(id) users_dossier_description_path(id)
else else
users_dossier_recapitulatif_path(id) users_dossier_recapitulatif_path(id)

View file

@ -2,7 +2,7 @@ class ProcedureDecorator < Draper::Decorator
delegate_all delegate_all
def lien def lien
h.commencer_url(procedure_path: path) unless path.nil? h.commencer_url(procedure_path: path) if path.present?
end end
def created_at_fr def created_at_fr

View file

@ -18,7 +18,7 @@ class DossierFacades
end end
def entreprise def entreprise
@dossier.entreprise.decorate unless @dossier.entreprise.nil? || @dossier.entreprise.siren.blank? @dossier.entreprise.decorate if @dossier.entreprise.present? && @dossier.entreprise.siren.present?
end end
def etablissement def etablissement

View file

@ -1,75 +0,0 @@
class DossiersListFacades
include Rails.application.routes.url_helpers
attr_accessor :procedure, :current_devise_profil, :liste
def initialize current_devise_profil, liste, procedure = nil
@current_devise_profil = current_devise_profil
@liste = liste
@procedure = procedure
end
def service
@service ||= DossiersListGestionnaireService.new @current_devise_profil, @liste, @procedure
end
def total_dossier
current_devise_profil.dossiers.not_archived.count
end
def total_dossier_follow
@current_devise_profil.followed_dossiers.count
end
def gestionnaire_procedures_name_and_id_list
@current_devise_profil.procedures.order('libelle ASC').inject([]) { |acc, procedure| acc.push({id: procedure.id, libelle: procedure.libelle, unread_notifications: @current_devise_profil.dossiers_with_notifications_count_for_procedure(procedure)}) }
end
def unread_notifications
current_devise_profil.notifications
end
def dossiers_with_unread_notifications
(unread_notifications.inject([]) { |acc, notif| acc.push(notif.dossier) }).uniq
end
def procedure_id
@procedure.nil? ? nil : @procedure.id
end
def dossiers_to_display
service.dossiers_to_display
end
def preference_list_dossiers_filter
@list_table_columns ||= @current_devise_profil.preference_list_dossiers.where(procedure: @procedure).order(:id)
end
def active_filter? preference
return true if @procedure.nil? || preference.table != 'champs' || (preference.table == 'champs' && !preference.filter.blank?)
preference_list_dossiers_filter.where(table: :champs).where.not(filter: '').size == 0
end
def all_state_total
service.all_state.count
end
def nouveaux_total
service.nouveaux.without_followers.count
end
def suivi_total
service.suivi.count
end
def filter_url
@procedure.nil? ? backoffice_dossiers_filter_path(liste: liste) : backoffice_dossiers_procedure_filter_path(id: @procedure.id, liste: liste)
end
private
def base_url liste
@procedure.nil? ? backoffice_dossiers_path(liste: liste) : backoffice_dossiers_procedure_path(id: @procedure.id, liste: liste)
end
end

View file

@ -8,7 +8,7 @@ class FileSizeValidator < ActiveModel::EachValidator
def initialize(options) def initialize(options)
if range = (options.delete(:in) || options.delete(:within)) if range = (options.delete(:in) || options.delete(:within))
raise ArgumentError, ":in and :within must be a Range" unless range.is_a?(Range) raise ArgumentError, ":in and :within must be a Range" if !range.is_a?(Range)
options[:minimum], options[:maximum] = range.begin, range.end options[:minimum], options[:maximum] = range.begin, range.end
options[:maximum] -= 1 if range.exclude_end? options[:maximum] -= 1 if range.exclude_end?
end end
@ -26,19 +26,19 @@ class FileSizeValidator < ActiveModel::EachValidator
keys.each do |key| keys.each do |key|
value = options[key] value = options[key]
unless (value.is_a?(Integer) && value >= 0) || value.is_a?(Symbol) if !(value.is_a?(Integer) && value >= 0) && !value.is_a?(Symbol)
raise ArgumentError, ":#{key} must be a nonnegative Integer or symbol" raise ArgumentError, ":#{key} must be a nonnegative Integer or symbol"
end end
end end
end end
def validate_each(record, attribute, value) def validate_each(record, attribute, value)
raise(ArgumentError, "A CarrierWave::Uploader::Base object was expected") unless value.kind_of? CarrierWave::Uploader::Base raise(ArgumentError, "A CarrierWave::Uploader::Base object was expected") if !value.kind_of? CarrierWave::Uploader::Base
value = (options[:tokenizer] || DEFAULT_TOKENIZER).call(value) if value.kind_of?(String) value = (options[:tokenizer] || DEFAULT_TOKENIZER).call(value) if value.kind_of?(String)
CHECKS.each do |key, validity_check| CHECKS.each do |key, validity_check|
next unless check_value = options[key] next if !check_value = options[key]
check_value = check_value =
case check_value case check_value

View file

@ -33,7 +33,9 @@ class SIADE::EtablissementAdapter
def adresse def adresse
adresse = '' adresse = ''
[:l1, :l2, :l3, :l4, :l5, :l6, :l7].each do |line| [:l1, :l2, :l3, :l4, :l5, :l6, :l7].each do |line|
adresse = adresse + data_source[:etablissement][:adresse][line] + "\r\n" unless data_source[:etablissement][:adresse][line].nil? if data_source[:etablissement][:adresse][line].present?
adresse = adresse + data_source[:etablissement][:adresse][line] + "\r\n"
end
end end
adresse adresse
end end

View file

@ -2,7 +2,7 @@ class InviteMailer < ApplicationMailer
def invite_user invite def invite_user invite
vars_mailer invite vars_mailer invite
send_mail invite.email, "TPS - Participez à l'élaboration d'un dossier", invite.email_sender unless invite.user.nil? send_mail invite.email, "TPS - Participez à l'élaboration d'un dossier", invite.email_sender if invite.user.present?
end end
def invite_guest invite def invite_guest invite

View file

@ -24,7 +24,7 @@ class Administrateur < ActiveRecord::Base
def generate_api_token def generate_api_token
loop do loop do
token = SecureRandom.hex(20) token = SecureRandom.hex(20)
break token unless Administrateur.find_by(api_token: token) break token if !Administrateur.find_by(api_token: token)
end end
end end
end end

View file

@ -5,14 +5,14 @@ class Cerfa < ActiveRecord::Base
mount_uploader :content, CerfaUploader mount_uploader :content, CerfaUploader
validates :content, :file_size => {:maximum => 20.megabytes} validates :content, :file_size => {:maximum => 20.megabytes}
after_save :internal_notification, if: Proc.new { !dossier.nil? } after_save :internal_notification, if: Proc.new { dossier.present? }
def empty? def empty?
content.blank? content.blank?
end end
def content_url def content_url
unless content.url.nil? if content.url.present?
if Features.remote_storage if Features.remote_storage
(RemoteDownloader.new content.filename).url (RemoteDownloader.new content.filename).url
else else
@ -24,7 +24,7 @@ class Cerfa < ActiveRecord::Base
private private
def internal_notification def internal_notification
unless dossier.state == 'brouillon' if dossier.state != 'brouillon'
NotificationService.new('cerfa', self.dossier.id).notify NotificationService.new('cerfa', self.dossier.id).notify
end end
end end

View file

@ -9,7 +9,7 @@ class Champ < ActiveRecord::Base
before_save :serialize_datetime_if_needed, if: Proc.new { type_champ == 'datetime' } before_save :serialize_datetime_if_needed, if: Proc.new { type_champ == 'datetime' }
before_save :multiple_select_to_string, if: Proc.new { type_champ == 'multiple_drop_down_list' } before_save :multiple_select_to_string, if: Proc.new { type_champ == 'multiple_drop_down_list' }
after_save :internal_notification, if: Proc.new { !dossier.nil? } after_save :internal_notification, if: Proc.new { dossier.present? }
scope :updated_since?, -> (date) { where('champs.updated_at > ?', date) } scope :updated_since?, -> (date) { where('champs.updated_at > ?', date) }
@ -39,7 +39,7 @@ class Champ < ActiveRecord::Base
end end
def same_date? num, compare def same_date? num, compare
if type_champ == 'datetime' && !value.nil? if type_champ == 'datetime' && value.present?
if value.to_datetime.strftime(compare) == num if value.to_datetime.strftime(compare) == num
return true return true
end end

View file

@ -167,7 +167,7 @@ class Dossier < ActiveRecord::Base
end end
def export_entreprise_data def export_entreprise_data
unless entreprise.nil? if entreprise.present?
etablissement_attr = EtablissementCsvSerializer.new(self.etablissement).attributes.map { |k, v| ["etablissement.#{k}".parameterize.underscore.to_sym, v] }.to_h etablissement_attr = EtablissementCsvSerializer.new(self.etablissement).attributes.map { |k, v| ["etablissement.#{k}".parameterize.underscore.to_sym, v] }.to_h
entreprise_attr = EntrepriseSerializer.new(self.entreprise).attributes.map { |k, v| ["entreprise.#{k}".parameterize.underscore.to_sym, v] }.to_h entreprise_attr = EntrepriseSerializer.new(self.entreprise).attributes.map { |k, v| ["entreprise.#{k}".parameterize.underscore.to_sym, v] }.to_h
else else

View file

@ -7,7 +7,7 @@ class DropDownList < ActiveRecord::Base
end end
def disabled_options def disabled_options
options.select{ |v| !(v =~ /^--.*--$/).nil? } options.select{ |v| (v =~ /^--.*--$/).present? }
end end
def selected_options(champ) def selected_options(champ)

View file

@ -4,19 +4,13 @@ class Gestionnaire < ActiveRecord::Base
has_and_belongs_to_many :administrateurs has_and_belongs_to_many :administrateurs
has_one :preference_smart_listing_page, dependent: :destroy
has_many :assign_to, dependent: :destroy has_many :assign_to, dependent: :destroy
has_many :procedures, -> { publiees_ou_archivees }, through: :assign_to has_many :procedures, -> { publiees_ou_archivees }, through: :assign_to
has_many :dossiers, -> { state_not_brouillon }, through: :procedures has_many :dossiers, -> { state_not_brouillon }, through: :procedures
has_many :followed_dossiers, through: :follows, source: :dossier has_many :followed_dossiers, through: :follows, source: :dossier
has_many :follows has_many :follows
has_many :preference_list_dossiers
has_many :avis has_many :avis
after_create :build_default_preferences_list_dossier
after_create :build_default_preferences_smart_listing_page
include CredentialsSyncableConcern include CredentialsSyncableConcern
def procedure_filter def procedure_filter
@ -52,30 +46,6 @@ class Gestionnaire < ActiveRecord::Base
procedures.find_by(id: procedure_id).present? procedures.find_by(id: procedure_id).present?
end end
def build_default_preferences_list_dossier procedure_id=nil
PreferenceListDossier.available_columns_for(procedure_id).each do |table|
table.second.each do |column|
if valid_couple_table_attr? table.first, column.first
PreferenceListDossier.create(
libelle: column.second[:libelle],
table: column.second[:table],
attr: column.second[:attr],
attr_decorate: column.second[:attr_decorate],
bootstrap_lg: column.second[:bootstrap_lg],
order: nil,
filter: nil,
procedure_id: procedure_id,
gestionnaire: self
)
end
end
end
end
def build_default_preferences_smart_listing_page
PreferenceSmartListingPage.create(page: 1, procedure: nil, gestionnaire: self, liste: 'a_traiter')
end
def notifications def notifications
Notification.where(already_read: false, dossier_id: follows.pluck(:dossier_id)).order("updated_at DESC") Notification.where(already_read: false, dossier_id: follows.pluck(:dossier_id)).order("updated_at DESC")
end end

View file

@ -13,7 +13,7 @@ class PieceJustificative < ActiveRecord::Base
validates :content, :file_size => {:maximum => 20.megabytes} validates :content, :file_size => {:maximum => 20.megabytes}
validates :content, presence: true, allow_blank: false, allow_nil: false validates :content, presence: true, allow_blank: false, allow_nil: false
after_save :internal_notification, if: Proc.new { !dossier.nil? } after_save :internal_notification, if: Proc.new { dossier.present? }
scope :updated_since?, -> (date) { where('pieces_justificatives.updated_at > ?', date) } scope :updated_since?, -> (date) { where('pieces_justificatives.updated_at > ?', date) }
@ -30,7 +30,7 @@ class PieceJustificative < ActiveRecord::Base
end end
def content_url def content_url
unless content.url.nil? if content.url.present?
if Features.remote_storage if Features.remote_storage
(RemoteDownloader.new content.filename).url (RemoteDownloader.new content.filename).url
else else
@ -59,7 +59,7 @@ class PieceJustificative < ActiveRecord::Base
private private
def internal_notification def internal_notification
unless self.type_de_piece_justificative.nil? && dossier.state == 'brouillon' if self.type_de_piece_justificative.present? || dossier.state != 'brouillon'
NotificationService.new('piece_justificative', self.dossier.id, self.libelle).notify NotificationService.new('piece_justificative', self.dossier.id, self.libelle).notify
end end
end end

View file

@ -1,133 +0,0 @@
class PreferenceListDossier < ActiveRecord::Base
belongs_to :gestionnaire
belongs_to :procedure
def table_attr
return self.attr if table.nil? || table.empty?
table + '.' + attr
end
def table_with_s_attr
return 'dossiers.' + self.attr if table.nil? || table.empty?
table + 's' + '.' + attr
end
def self.available_columns_for procedure_id = nil
columns = {
dossier: columns_dossier,
procedure: columns_procedure,
entreprise: columns_entreprise,
etablissement: columns_etablissement,
user: columns_user,
france_connect: columns_france_connect
}
columns = columns.merge({
champs: columns_champs_procedure(procedure_id),
champs_private: columns_champs_private_procedure(procedure_id)
}) unless procedure_id.nil?
columns
end
private
def self.columns_dossier
table = nil
{
dossier_id: create_column('Nº', table, 'id', 'id', 1),
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),
state: create_column('État', table, 'state', 'display_state', 1)
}
end
def self.columns_procedure
table = 'procedure'
{
libelle: create_column('Libellé procédure', table, 'libelle', 'libelle', 4),
organisation: create_column('Organisme', table, 'organisation', 'organisation', 3),
direction: create_column('Direction', table, 'direction', 'direction', 3)
}
end
def self.columns_entreprise
table = 'entreprise'
{
siren: create_column('SIREN', table, 'siren', 'siren', 2),
forme_juridique: create_column('Forme juridique', table, 'forme_juridique', 'forme_juridique', 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),
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),
}
end
def self.columns_etablissement
table = 'etablissement'
{
siret: create_column('SIRET', table, 'siret', 'siret', 2),
libelle: create_column('Libellé NAF', table, 'libelle_naf', 'libelle_naf', 3),
code_postal: create_column('Code postal', table, 'code_postal', 'code_postal', 1)
}
end
def self.columns_user
table = 'user'
{
email: create_column('Email', table, 'email', 'email', 2)
}
end
def self.columns_france_connect
table = 'france_connect_information'
{
gender: create_column('Civilité (FC)', table, 'gender', 'gender_fr', 1),
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)
}
end
def self.columns_champs_procedure procedure_id
table = 'champs'
if procedure = Procedure.find_by(id: procedure_id)
procedure.types_de_champ.inject({}) do |acc, type_de_champ|
acc = acc.merge({
"type_de_champ_#{type_de_champ.id}" => create_column(type_de_champ.libelle, table, type_de_champ.id, 'value', 2)
}) if type_de_champ.field_for_list?
acc
end
end
end
def self.columns_champs_private_procedure procedure_id
table = 'champs_private'
if procedure = Procedure.find_by(id: procedure_id)
procedure.types_de_champ_private.inject({}) do |acc, type_de_champ|
acc = acc.merge({
"type_de_champ_private_#{type_de_champ.id}" => create_column(type_de_champ.libelle, table, type_de_champ.id, 'value', 2)
}) if type_de_champ.field_for_list?
acc
end
end
end
def self.create_column libelle, table, attr, attr_decorate, bootstrap_lg
{
libelle: libelle,
table: table,
attr: attr,
attr_decorate: attr_decorate,
bootstrap_lg: bootstrap_lg,
order: nil,
filter: nil
}
end
end

View file

@ -1,11 +0,0 @@
class PreferenceSmartListingPage < ActiveRecord::Base
belongs_to :gestionnaire
belongs_to :procedure
validates :page, presence: true, allow_blank: false, allow_nil: false
validates :liste, presence: true, allow_blank: false, allow_nil: false
validates :procedure, presence: true, allow_blank: true, allow_nil: true
validates :gestionnaire, presence: true, allow_blank: false, allow_nil: false
validates_uniqueness_of :gestionnaire_id
end

View file

@ -14,8 +14,6 @@ class Procedure < ActiveRecord::Base
has_many :assign_to, dependent: :destroy has_many :assign_to, dependent: :destroy
has_many :gestionnaires, through: :assign_to has_many :gestionnaires, through: :assign_to
has_many :preference_list_dossiers
has_one :initiated_mail, class_name: "Mails::InitiatedMail", dependent: :destroy has_one :initiated_mail, class_name: "Mails::InitiatedMail", dependent: :destroy
has_one :received_mail, class_name: "Mails::ReceivedMail", dependent: :destroy has_one :received_mail, class_name: "Mails::ReceivedMail", dependent: :destroy
has_one :closed_mail, class_name: "Mails::ClosedMail", dependent: :destroy has_one :closed_mail, class_name: "Mails::ClosedMail", dependent: :destroy
@ -49,7 +47,7 @@ class Procedure < ActiveRecord::Base
end end
def path def path
procedure_path.path unless procedure_path.nil? procedure_path.path if procedure_path.present?
end end
def default_path def default_path

View file

@ -38,7 +38,7 @@ class Search < ActiveRecord::Base
belongs_to :dossier belongs_to :dossier
def results def results
unless @query.present? if @query.blank?
return Search.none return Search.none
end end

View file

@ -10,6 +10,6 @@ class Siret
before_validation :remove_whitespace before_validation :remove_whitespace
def remove_whitespace def remove_whitespace
siret.delete!(' ') unless siret.nil? siret.delete!(' ') if siret.present?
end end
end end

View file

@ -31,7 +31,7 @@ class User < ActiveRecord::Base
end end
def loged_in_with_france_connect? def loged_in_with_france_connect?
!loged_in_with_france_connect.nil? loged_in_with_france_connect.present?
end end
def invite? dossier_id def invite? dossier_id

View file

@ -16,11 +16,4 @@ class AccompagnateurService
AssignTo.where(gestionnaire: @accompagnateur, procedure: @procedure).delete_all AssignTo.where(gestionnaire: @accompagnateur, procedure: @procedure).delete_all
end end
end end
def build_default_column
return unless @to == ASSIGN
return unless PreferenceListDossier.where(gestionnaire: @accompagnateur, procedure: @procedure).empty?
@accompagnateur.build_default_preferences_list_dossier @procedure.id
end
end end

View file

@ -40,7 +40,7 @@ class DossierService
private private
def mandataire_social? mandataires_list def mandataire_social? mandataires_list
unless @france_connect_information.nil? if @france_connect_information.present?
mandataires_list.each do |mandataire| mandataires_list.each do |mandataire|
return true if mandataire[:nom].casecmp(@france_connect_information.family_name).zero? && return true if mandataire[:nom].casecmp(@france_connect_information.family_name).zero? &&

View file

@ -1,184 +0,0 @@
class DossiersListGestionnaireService
def initialize current_devise_profil, liste, procedure = nil
@current_devise_profil = current_devise_profil
@liste = (DossiersListGestionnaireService.dossiers_liste_libelle.include?(liste) ? liste : 'all_state')
@procedure = procedure
end
def dossiers_to_display
@dossiers_to_display ||=
{'nouveaux' => nouveaux,
'a_traiter' => nouveaux,
'a_instruire' => a_instruire,
'termine' => termine,
'archive' => archive,
'all_state' => all_state}[@liste]
end
def self.dossiers_liste_libelle
['nouveaux', 'suivi', 'a_traiter', 'a_instruire', 'termine', 'all_state']
end
def all_state
@all_state ||= filter_dossiers.all_state.order_by_updated_at('asc')
end
def suivi
@suivi ||= @current_devise_profil.followed_dossiers.merge(dossiers_to_display)
end
def nouveaux
@nouveaux ||= filter_dossiers.en_construction.order_by_updated_at('asc')
end
def a_instruire
@a_instruire ||= filter_dossiers.en_instruction.order_by_updated_at('asc')
end
def archive
@archive ||= filter_dossiers.archived
end
def termine
@termine ||= filter_dossiers.termine.order_by_updated_at('asc')
end
def filter_dossiers
@filter_dossiers ||= @procedure.nil? ? @current_devise_profil.dossiers.joins(joins_filter).where(where_filter) : @procedure.dossiers.joins(joins_filter).where(where_filter)
@filter_dossiers.distinct
end
def filter_procedure_reset!
filter_procedure! nil
end
def filter_procedure! procedure_id
@current_devise_profil.update_column :procedure_filter, procedure_id
end
def default_sort
sort_preference = @current_devise_profil.preference_list_dossiers
.where(procedure: @procedure)
.where.not(order: nil).first
return {'nil' => 'nil'} if sort_preference.nil?
{
[sort_preference.table, sort_preference.attr]
.reject(&:nil?)
.join('.') => sort_preference.order
}
end
def default_page
pref = current_preference_smart_listing_page
return pref.page if pref.procedure == @procedure && pref.liste == @liste
1
end
def change_page! new_page
pref = current_preference_smart_listing_page
if pref
unless pref.liste == @liste && pref.procedure == @procedure
pref.liste = @liste
pref.procedure = @procedure
if new_page.nil?
pref.page = 1
pref.save
end
end
unless new_page.nil?
pref.page = new_page
pref.save
end
end
end
def change_sort! new_sort
return if new_sort.blank?
raw_table_attr = new_sort.keys.first.split('.')
order = new_sort.values.first
table = (raw_table_attr.size == 2 ? raw_table_attr.first : nil)
attr = (raw_table_attr.size == 2 ? raw_table_attr.second : raw_table_attr.first)
reset_sort!
preference = @current_devise_profil.preference_list_dossiers
.find_by(table: table, attr: attr, procedure: @procedure)
preference.update order: order unless (preference.nil?)
end
def reset_sort!
@current_devise_profil.preference_list_dossiers
.where(procedure: @procedure)
.where.not(order: nil)
.update_all order: nil
end
def joins_filter
filter_preference_list.inject([]) do |acc, preference|
acc.push(preference.table.to_sym) unless preference.table.blank? || preference.filter.blank?
acc
end
end
def where_filter
filter_preference_list.inject('') do |acc, preference|
unless preference.filter.blank?
filter = preference.filter.tr('*', '%').gsub("'", "''")
filter = "%" + filter + "%" unless filter.include? '%'
value = preference.table_with_s_attr
if preference.table_attr.include?('champs')
value = 'champs.value'
acc += (acc.to_s.empty? ? ''.to_s : " AND ") +
'champs.type_de_champ_id = ' + preference.attr
end
acc += (acc.to_s.empty? ? ''.to_s : " AND ") +
"CAST(" +
value +
" as TEXT)" +
" LIKE " +
"'" +
filter +
"'"
end
acc
end
end
def add_filter new_filter
raw_table_attr = new_filter.keys.first.split('.')
filter = new_filter.values.first
table = (raw_table_attr.size == 2 ? raw_table_attr.first : nil)
attr = (raw_table_attr.size == 2 ? raw_table_attr.second : raw_table_attr.first)
@current_devise_profil.preference_list_dossiers
.find_by(table: table, attr: attr, procedure: @procedure)
.update filter: filter.strip
end
private
def filter_preference_list
@filter_preference ||= @current_devise_profil.preference_list_dossiers
.where(procedure: @procedure)
.where.not(filter: nil)
.order(:id)
end
def current_preference_smart_listing_page
@current_devise_profil.preference_smart_listing_page
end
end

View file

@ -2,7 +2,7 @@ class FranceConnectSaltService
attr_reader :model attr_reader :model
def initialize france_connect_information def initialize france_connect_information
raise 'Not a FranceConnectInformation class' unless france_connect_information.class == FranceConnectInformation raise 'Not a FranceConnectInformation class' if france_connect_information.class != FranceConnectInformation
@model = france_connect_information @model = france_connect_information
end end

View file

@ -12,14 +12,14 @@ class SwitchDeviseProfileService
private private
def user_signed_in? def user_signed_in?
!@warden.authenticate(:scope => :user).nil? @warden.authenticate(:scope => :user).present?
end end
def gestionnaire_signed_in? def gestionnaire_signed_in?
!@warden.authenticate(:scope => :gestionnaire).nil? @warden.authenticate(:scope => :gestionnaire).present?
end end
def administrateur_signed_in? def administrateur_signed_in?
!@warden.authenticate(:scope => :administrateur).nil? @warden.authenticate(:scope => :administrateur).present?
end end
end end

View file

@ -7,28 +7,28 @@ class SyncCredentialsService
end end
def change_credentials! def change_credentials!
unless @klass == User if @klass != User
user = User.find_by(email: @email_was) user = User.find_by(email: @email_was)
if user if user
return false unless user.update_columns( return false if !user.update_columns(
email: @email, email: @email,
encrypted_password: @encrypted_password) encrypted_password: @encrypted_password)
end end
end end
unless @klass == Gestionnaire if @klass != Gestionnaire
gestionnaire = Gestionnaire.find_by(email: @email_was) gestionnaire = Gestionnaire.find_by(email: @email_was)
if gestionnaire if gestionnaire
return false unless gestionnaire.update_columns( return false if !gestionnaire.update_columns(
email: @email, email: @email,
encrypted_password: @encrypted_password) encrypted_password: @encrypted_password)
end end
end end
unless @klass == Administrateur if @klass != Administrateur
administrateur = Administrateur.find_by(email: @email_was) administrateur = Administrateur.find_by(email: @email_was)
if administrateur if administrateur
return false unless administrateur.update_columns( return false if !administrateur.update_columns(
email: @email, email: @email,
encrypted_password: @encrypted_password) encrypted_password: @encrypted_password)
end end

View file

@ -13,7 +13,7 @@ class AttestationTemplateLogoUploader < BaseUploader
# Override the directory where uploaded files will be stored. # Override the directory where uploaded files will be stored.
# This is a sensible default for uploaders that are meant to be mounted: # This is a sensible default for uploaders that are meant to be mounted:
def store_dir def store_dir
unless Features.remote_storage if !Features.remote_storage
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end end
end end

View file

@ -13,7 +13,7 @@ class AttestationTemplateSignatureUploader < BaseUploader
# Override the directory where uploaded files will be stored. # Override the directory where uploaded files will be stored.
# This is a sensible default for uploaders that are meant to be mounted: # This is a sensible default for uploaders that are meant to be mounted:
def store_dir def store_dir
unless Features.remote_storage if !Features.remote_storage
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end end
end end

View file

@ -13,7 +13,7 @@ class AttestationUploader < BaseUploader
# Override the directory where uploaded files will be stored. # Override the directory where uploaded files will be stored.
# This is a sensible default for uploaders that are meant to be mounted: # This is a sensible default for uploaders that are meant to be mounted:
def store_dir def store_dir
unless Features.remote_storage if !Features.remote_storage
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end end
end end

View file

@ -11,7 +11,7 @@ class CerfaUploader < BaseUploader
# Override the directory where uploaded files will be stored. # Override the directory where uploaded files will be stored.
# This is a sensible default for uploaders that are meant to be mounted: # This is a sensible default for uploaders that are meant to be mounted:
def store_dir def store_dir
unless Features.remote_storage if !Features.remote_storage
"./uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" "./uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end end
end end

View file

@ -27,11 +27,11 @@ class LocalDownloader
self.random_folder_name = SecureRandom.hex self.random_folder_name = SecureRandom.hex
base_path = File.join(BASE_PATH_DISK, self.random_folder_name) base_path = File.join(BASE_PATH_DISK, self.random_folder_name)
unless File.directory?(BASE_PATH_DISK) if !File.directory?(BASE_PATH_DISK)
Dir.mkdir(BASE_PATH_DISK) Dir.mkdir(BASE_PATH_DISK)
end end
unless File.directory?(base_path) if !File.directory?(base_path)
Dir.mkdir(base_path) Dir.mkdir(base_path)
break base_path break base_path
end end

View file

@ -11,7 +11,7 @@ class PieceJustificativeUploader < BaseUploader
# Override the directory where uploaded files will be stored. # Override the directory where uploaded files will be stored.
# This is a sensible default for uploaders that are meant to be mounted: # This is a sensible default for uploaders that are meant to be mounted:
def store_dir def store_dir
unless Features.remote_storage if !Features.remote_storage
"./uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" "./uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end end
end end

View file

@ -13,7 +13,7 @@ class ProcedureLogoUploader < BaseUploader
# Override the directory where uploaded files will be stored. # Override the directory where uploaded files will be stored.
# This is a sensible default for uploaders that are meant to be mounted: # This is a sensible default for uploaders that are meant to be mounted:
def store_dir def store_dir
unless Features.remote_storage if !Features.remote_storage
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end end
end end

View file

@ -5,6 +5,6 @@ class EmailFormatValidator < ActiveModel::Validator
def validate(record) def validate(record)
return if record.email.blank? return if record.email.blank?
record.errors[:base] << "Email invalide" unless email_regex.match(record.email) record.errors[:base] << "Email invalide" if !email_regex.match(record.email)
end end
end end

View file

@ -5,6 +5,6 @@ class ProcedurePathFormatValidator < ActiveModel::Validator
def validate(record) def validate(record)
return false if record.path.blank? return false if record.path.blank?
record.errors[:path] << "Path invalide" unless path_regex.match(record.path) record.errors[:path] << "Path invalide" if !path_regex.match(record.path)
end end
end end

View file

@ -1,9 +1,9 @@
class SiretFormatValidator < ActiveModel::EachValidator class SiretFormatValidator < ActiveModel::EachValidator
def validate_each(record,attribute,value) def validate_each(record,attribute,value)
unless value =~ /^\d{14}$/ if !(value =~ /^\d{14}$/)
record.errors.add(attribute, :format) record.errors.add(attribute, :format)
end end
unless value != nil && (luhn_checksum(value) % 10 == 0) if value.nil? || (luhn_checksum(value) % 10 != 0)
record.errors.add(attribute, :checksum) record.errors.add(attribute, :checksum)
end end
end end

View file

@ -1,6 +1,6 @@
.row{ style: 'height: 34px;' } .row{ style: 'height: 34px;' }
- unless smart_listing.empty? - if smart_listing.present?
%table.table#liste-gestionnaire %table.table#liste-gestionnaire
%thead %thead
%th Enlever %th Enlever

View file

@ -5,7 +5,7 @@
%button.btn.btn-primary{ type: :submit } %button.btn.btn-primary{ type: :submit }
%span.fa.fa-search %span.fa.fa-search
- unless smart_listing.empty? - if smart_listing.present?
%table.table#liste-gestionnaire %table.table#liste-gestionnaire
%thead %thead

View file

@ -1,4 +1,4 @@
- unless smart_listing.empty? - if smart_listing.present?
%table.table#liste-gestionnaire %table.table#liste-gestionnaire
%thead %thead
%th#libelle= smart_listing.sortable 'Email', 'email' %th#libelle= smart_listing.sortable 'Email', 'email'

View file

@ -17,7 +17,7 @@
.form-group .form-group
= ff.hidden_field :order_place, value: ff.index = ff.hidden_field :order_place, value: ff.index
= ff.hidden_field :id = ff.hidden_field :id
- unless ff.object.id.nil? - if ff.object.id.present?
.form-group .form-group
%br &nbsp; %br &nbsp;
= ff.object.button_up(index: ff.index, url: move_up_admin_procedure_pieces_justificatives_path(@procedure, ff.index)) = ff.object.button_up(index: ff.index, url: move_up_admin_procedure_pieces_justificatives_path(@procedure, ff.index))

View file

@ -15,7 +15,7 @@
.row .row
.col-md-6 .col-md-6
%h4 Logo de la procédure %h4 Logo de la procédure
- unless @procedure.logo.blank? - if @procedure.logo.present?
= image_tag @procedure.decorate.logo_img, { style: 'height: 40px; display: inline; margin-right: 6px;', id: 'preview_procedure_logo' } = image_tag @procedure.decorate.logo_img, { style: 'height: 40px; display: inline; margin-right: 6px;', id: 'preview_procedure_logo' }
= f.file_field :logo, accept: 'image/png, image/jpg, image/jpeg', style: 'display: inline' = f.file_field :logo, accept: 'image/png, image/jpg, image/jpeg', style: 'display: inline'
@ -29,7 +29,7 @@
= f.check_box :euro_flag = f.check_box :euro_flag
Afficher le drapeau européen Afficher le drapeau européen
- unless @procedure.locked? - if !@procedure.locked?
.row .row
.col-md-6 .col-md-6
%h4 Cartographie %h4 Cartographie

View file

@ -1,4 +1,4 @@
- unless smart_listing.empty? - if smart_listing.present?
%table.table#dossiers-list %table.table#dossiers-list
%thead %thead
%th#ID= smart_listing.sortable 'ID', 'id' %th#ID= smart_listing.sortable 'ID', 'id'
@ -27,7 +27,7 @@
= procedure.created_at_fr = procedure.created_at_fr
%td %td
= link_to('Cloner', admin_procedure_clone_path(procedure.id), 'data-method' => :put, class: 'btn-sm btn-primary clone-btn') = link_to('Cloner', admin_procedure_clone_path(procedure.id), 'data-method' => :put, class: 'btn-sm btn-primary clone-btn')
- unless procedure.publiee_ou_archivee? - if !procedure.publiee_ou_archivee?
= link_to('X', url_for(controller: 'admin/procedures', action: :destroy, id: procedure.id), 'data-method' => :delete, class: 'btn-sm btn-danger') = link_to('X', url_for(controller: 'admin/procedures', action: :destroy, id: procedure.id), 'data-method' => :delete, class: 'btn-sm btn-danger')
= smart_listing.paginate = smart_listing.paginate

View file

@ -13,7 +13,7 @@
Vous vous apprêtez à Vous vous apprêtez à
= @procedure.archivee? ? 'republier' : 'publier' = @procedure.archivee? ? 'republier' : 'publier'
votre procédure au public. votre procédure au public.
- unless @procedure.archivee? - if !@procedure.archivee?
%b %b
Elle ne pourra plus être modifiée à l'issue de cette publication. Elle ne pourra plus être modifiée à l'issue de cette publication.
%br %br

View file

@ -104,7 +104,7 @@
%h4 Archivé %h4 Archivé
- unless @facade.dossiers_archived_total == 0 - if @facade.dossiers_archived_total != 0
%ul %ul
- @facade.dossiers_archived_by_state_total.each do |dossier| - @facade.dossiers_archived_by_state_total.each do |dossier|
%li %li

View file

@ -32,7 +32,7 @@
= ff.hidden_field :type = ff.hidden_field :type
= ff.hidden_field :id = ff.hidden_field :id
- unless ff.object.id.nil? - if ff.object.id.present?
.form-group .form-group
%br &nbsp; %br &nbsp;
= ff.object.button_up(index: ff.index, url: @types_de_champ_facade.move_up_url(ff), private: @types_de_champ_facade.private) = ff.object.button_up(index: ff.index, url: @types_de_champ_facade.move_up_url(ff), private: @types_de_champ_facade.private)

View file

@ -1,5 +1,5 @@
.card .card
- unless smart_listing.empty? - if smart_listing.present?
%table.table %table.table
%thead %thead
%th.col-xs-4= smart_listing.sortable 'Email', :email %th.col-xs-4= smart_listing.sortable 'Email', :email
@ -12,7 +12,7 @@
%td %td
= admin.email = admin.email
%td %td
- unless admin.last_sign_in_at.nil? - if admin.last_sign_in_at.present?
= time_ago_in_words(l(admin.last_sign_in_at, format: "%d/%m/%Y %H:%M UTC +02:00")) = time_ago_in_words(l(admin.last_sign_in_at, format: "%d/%m/%Y %H:%M UTC +02:00"))
( (
= admin.last_sign_in_at.localtime.strftime('%d/%m/%Y') = admin.last_sign_in_at.localtime.strftime('%d/%m/%Y')

View file

@ -1 +0,0 @@
= render partial: '/users/recapitulatif/commentaires_flux'

View file

@ -1,10 +0,0 @@
.filter_framed.panel.panel-primary{ id: "#{filter_framed_id}", style: 'width: 300px; height: 100px; position: absolute; top: 0; left: 0; display: none;' }
.panel-heading
= preference.libelle
= form_tag @facade_data_view.filter_url, { class: 'panel-body form-inline', method: :post } do
%input.form-control.filter_input{ name: "filter_input[#{preference.table_attr}]", style: 'width: 69%;', value: "#{preference.filter}" }
%button.btn.btn-sm.btn-success
%i.fa.fa-check
.btn.btn-sm.btn-danger.erase-filter
%i.fa.fa-remove

View file

@ -1,13 +0,0 @@
%h3
= t('dynamics.dossiers.followers.title')
%br
.row
.col-xs-4
- if @facade.followers.size > 0
%ul
- @facade.followers.each do |follower|
%li
= follower.email
- else
Aucune personne ne suit ce dossier

View file

@ -1,70 +0,0 @@
%table#dossiers-list.table
%thead
- if smart_listing.name.to_s == 'follow_dossiers'
%th.col-xs-1.center
%i.fa.fa-bell
%th.col-xs-1
État
- @facade_data_view.preference_list_dossiers_filter.each do |preference|
- unless preference.libelle == 'Statut' || preference.libelle == 'État'
%th{ class: "col-md-#{preference.bootstrap_lg} col-lg-#{preference.bootstrap_lg}" }
- if preference.table.to_s.include? 'champs'
= preference.libelle
- else
= smart_listing.sortable preference.libelle, preference.table_attr
- if @facade_data_view.active_filter? preference
%i.filter.fa.fa-filter{ style: "color: #{(preference.filter.blank? ? 'grey' : 'orange')}", id: "filter_#{smart_listing.name.to_s}_#{preference.table_attr.sub('.', '_')}" }
= render partial: 'backoffice/dossiers/filter_framed', locals: { preference: preference, filter_framed_id: "framed_filter_#{smart_listing.name.to_s}_#{preference.table_attr.sub('.', '_')}" }
%th.col-xs-1.center Actions
%th.col-xs-1.center Abonnés
- unless smart_listing.empty?
- smart_listing.collection.each do |dossier|
%tr.dossier-row{ id: "tr_dossier_#{dossier.id}", 'data-dossier_url' => backoffice_dossier_url(id: dossier.id) }
- if smart_listing.name.to_s == 'follow_dossiers'
%td.col-xs-1.center
- total_notif = dossier.notifications.where(already_read: false).count
- if total_notif == 0
.badge.progress-bar-default
= total_notif
- else
.badge.progress-bar-warning
= total_notif
%td.col-xs-1
= dossier.decorate.display_state
- @facade_data_view.preference_list_dossiers_filter.each_with_index do |preference, index|
- unless preference.libelle == 'Statut' || preference.libelle == 'État'
%td
- if preference.table.nil? || preference.table.empty?
- value = dossier.decorate.public_send(preference.attr_decorate)
- elsif preference.table == 'champs'
- value = dossier.champs.find_by_type_de_champ_id(preference.attr).value rescue nil
- elsif preference.table == 'champs_private'
- value = dossier.champs_private.find_by_type_de_champ_id(preference.attr).value rescue nil
- else
- begin
- value = dossier.public_send(preference.table).decorate.public_send(preference.attr_decorate)
- rescue NoMethodError
- value = ''
= value
%td.center
- if current_gestionnaire.follow?(dossier)
= link_to('Quitter', unfollow_dossier_path(dossier.procedure, dossier), method: :patch, class: 'btn-sm btn-danger', id: "suivre_dossier_#{dossier.id}")
- else
= link_to('Suivre', follow_dossier_path(dossier.procedure, dossier), method: :patch, class: 'btn-sm btn-primary', id: "suivre_dossier_#{dossier.id}")
%td.center{ style: "color: #{dossier.total_follow == 0 ? 'red' : ''}" }
= dossier.total_follow
= smart_listing.paginate
- if smart_listing.name.to_s == 'follow_dossiers' && smart_listing.collection.count > 0
= smart_listing.pagination_per_page_links
%br
- if smart_listing.empty?
%h4.center
Aucun dossier

View file

@ -1,20 +0,0 @@
- if smart_listing.collection.any?
%table#dossiers-list.table
%thead
%th
%th
Procédure
%th
Invité le
%tbody
- smart_listing.collection.each do |avis|
%tr.dossier-row{ id: "tr_dossier_#{avis.dossier.id}", 'data-dossier_url' => backoffice_dossier_url(id: avis.dossier.id) }
%td= avis.dossier.id
%td= avis.dossier.procedure.libelle
%td= avis.created_at.strftime('%d/%m/%Y %H:%M')
= smart_listing.paginate
- else
.center{ colspan: 2 }
%em Aucun dossier

View file

@ -1,46 +0,0 @@
%button#pref-list-dossier-close-action.btn.btn-danger.btn-xs.fixed-right
%i.fa.fa-close
%h3
= t('dynamics.backoffice.pref_list.title')
%p{ style: 'margin-top: 15px; margin-bottom: 20px;' }
= t('dynamics.backoffice.pref_list.description')
%h4.text-primary
Actuelles
%ul
- @facade_data_view.preference_list_dossiers_filter.each_with_index do |preference, index|
%li
= form_tag backoffice_preference_list_dossier_delete_path, method: :delete, remote: true do
= hidden_field_tag :pref_id, preference.id
= hidden_field_tag :procedure_id, preference.procedure_id
= preference.libelle
%button.btn.btn-default.btn-xs{ type: :submit, id: "delete_pref_list_#{preference[:table]}_#{preference[:attr]}" }
%i.fa.fa-minus
%h4.text-success{ style: 'margin-top: 15px;' }
Disponibles
%table
- PreferenceListDossier.available_columns_for(@facade_data_view.procedure_id).each_with_index do |tables, index|
- if index%2 == 0 || tables.first.to_s.include?('champs')
%tr
%td.col-xs-5{ style: 'vertical-align: top;', colspan: (tables.first == :champs ? 2 : 1) }
%h5= tables.first.to_s.gsub('_', ' ').capitalize
%ul
- if tables.second
- tables.second.each do |columns|
%li
= form_tag backoffice_preference_list_dossier_add_path, method: :post, remote: true do
= hidden_field_tag :libelle, columns.second[:libelle]
= hidden_field_tag :table, columns.second[:table]
= hidden_field_tag :attr, columns.second[:attr]
= hidden_field_tag :attr_decorate, columns.second[:attr_decorate]
= hidden_field_tag :bootstrap_lg, columns.second[:bootstrap_lg]
= hidden_field_tag :procedure_id, @facade_data_view.procedure_id
= columns.second[:libelle]
%button.btn.btn-default.btn-xs{ type: :submit, id: "add_pref_list_#{columns.second[:table]}_#{columns.second[:attr]}" }
%i.fa.fa-plus

View file

@ -1,14 +0,0 @@
$.ajax({
method: 'get',
url: '/backoffice/preference_list_dossier/reload_smartlisting?procedure_id=<%= @procedure_id %>',
async: true
});
$.ajax({
methd: 'get',
url: '/backoffice/preference_list_dossier/reload_pref_list?procedure_id=<%= @procedure_id %>',
async: true
}).done(function (data) {
$("#pref-list-menu").html(data);
pref_list_dossier_actions();
});

View file

@ -1,4 +0,0 @@
<% flash.each do |type, message| %>
$("#flash_message").html("<div class=\"alert alert-success move-up\" style=\"display: block:\"> <%= sanitize(message) %></div>").children().fadeOut(5000)
<% end %>
<% flash.clear %>

View file

@ -1,64 +0,0 @@
#backoffice-index
#pref-list-menu
= render partial: 'backoffice/dossiers/pref_list'
.default-data-block
.row.show-block#new_dossiers
.header
.col-xs-10.title
.carret-right
.carret-down
Nouveaux dossiers
.col-xs-2.count
= pluralize(@facade_data_view.nouveaux_total, "dossier")
.body
= smart_listing_render :new_dossiers
.row.center
.col-xs-3
= link_to 'Tous les états', '?liste=all_state', class: 'text-info', style: "text-decoration: #{@facade_data_view.liste == 'all_state'? 'underline' : ''}"
.col-xs-3
= link_to 'En construction', '?liste=a_traiter', class: 'text-danger', style: "text-decoration: #{@facade_data_view.liste == 'a_traiter'? 'underline' : ''}"
.col-xs-3
= link_to 'En instruction', '?liste=a_instruire', class: 'text-warning', style: "text-decoration: #{@facade_data_view.liste == 'a_instruire'? 'underline' : ''}"
.col-xs-3
= link_to 'Terminés', '?liste=termine', class: 'text-success', style: "text-decoration: #{@facade_data_view.liste == 'termine'? 'underline' : ''}"
.default-data-block.default_visible
.row.show-block#follow_dossiers
.header
.col-xs-10.title
.carret-right
.carret-down
Dossiers suivis
.col-xs-2.count
= pluralize(@facade_data_view.suivi_total, "dossier")
.body
= smart_listing_render :follow_dossiers
.default-data-block
.row.show-block#all_dossiers
.header
.col-xs-10.title
.carret-right
.carret-down
Tous les dossiers
.col-xs-2.count
= pluralize(@facade_data_view.all_state_total, "dossier")
.body
= smart_listing_render :all_state_dossiers
- if @archived_dossiers
.default-data-block
.row.show-block#archived_dossiers
.header
.col-xs-10.title
.carret-right
.carret-down
Dossiers archivés
.col-xs-2.count
= pluralize(@archived_dossiers.count, "dossier")
.body
= smart_listing_render :archived_dossiers

View file

@ -1,6 +0,0 @@
<%= smart_listing_update :new_dossiers, {force: true} %>
<%= smart_listing_update :follow_dossiers, {force: true} %>
<%= smart_listing_update :all_state_dossiers, {force: true} %>
filters_init();
link_init();

View file

@ -1,16 +0,0 @@
#backoffice-search
#pref-list-menu
= render partial: 'backoffice/dossiers/pref_list'
.default-data-block.default_visible
.row.show-block#new_dossiers
.header
.col-lg-10.col-md-10.col-sm-10.col-xs-10.title
.carret-right
.carret-down
Résultat de la recherche
.col-lg-2.col-md-2.col-sm-2.col-xs-2.count
= @dossiers.count
dossiers
.body
= smart_listing_render :search

View file

@ -1,4 +0,0 @@
<%= smart_listing_update :search %>
filters_init();
link_init();

View file

@ -1,2 +0,0 @@
#backoffice-dossier-show.col-xs-12
= render partial: "dossiers/dossier_show"

View file

@ -1,22 +0,0 @@
.col-md-12
.default-data-block.default_visible
.row.show-block
.header
.title
.carret-right
.carret-down
= "#{@pending_avis.count} avis à rendre"
.body
= smart_listing_render :pending_avis
%br
.default-data-block
.row.show-block
.header
.title
.carret-right
.carret-down
= "#{@avis_with_answer.count} avis #{"rendu".pluralize(@avis_with_answer.count)}"
.body
= smart_listing_render :avis_with_answer

View file

@ -1,4 +0,0 @@
<%= smart_listing_update :pending_avis %>
<%= smart_listing_update :avis_with_answer %>
link_init();

View file

@ -1,56 +0,0 @@
- if current_gestionnaire && current_gestionnaire.assigned_on_procedure?(@facade.dossier.procedure_id)
.default-data-block.default_visible
.row.show-block.infos
.header
.col-xs-12.title
.carret-right
.carret-down
AVIS EXTERNES
.body
.display-block-on-print
- dossier_facade.dossier.avis.by_latest.each do |avis|
- if avis.answer
.panel.panel-success
.panel-heading
%strong= avis.email_to_display
a donné son avis le
= avis.updated_at.localtime.strftime('%d/%m/%Y à %H:%M')
.panel-body
%strong Vous :
= avis.introduction
%hr
%strong= "#{avis.email_to_display} :"
= avis.answer
- else
.panel.panel-info
.panel-heading
Avis demandé à
%strong= avis.email_to_display
le
= avis.created_at.localtime.strftime('%d/%m/%Y à %H:%M')
.panel-body
%strong Vous :
= avis.introduction
%hr
.center
%em Avis en attente
-# FIXME prevent bug when the user is also a gestionnaire on the procedure #375
- if @new_avis.present?
.hidden-print
.panel.panel-default
.panel-heading
Demander un avis externe
.panel-body
.help-block
Invitez une personne externe à consulter le dossier et à vous donner un avis sur celui ci.
%br
Cette personne pourra également contribuer au fil de messagerie, mais ne pourra pas modifier le dossier.
= simple_form_for @new_avis, url: backoffice_dossier_avis_index_path(dossier_facade.dossier.object.id) do |f|
= f.input 'email', label: "Email de la personne qui doit donner un avis"
= f.input 'introduction', label: "Message"
= f.submit "Envoyer la demande d'avis", class: 'btn btn-default'

View file

@ -1,5 +1,3 @@
= render partial: 'dossiers/edit_avis', locals: { dossier_facade: @facade }
= render partial: 'dossiers/attestation', locals: { dossier: @facade.dossier } = render partial: 'dossiers/attestation', locals: { dossier: @facade.dossier }
= render partial: 'dossiers/messagerie', locals: { dossier_facade: @facade } = render partial: 'dossiers/messagerie', locals: { dossier_facade: @facade }
@ -18,7 +16,7 @@
.col-lg-4.col-md-4.col-sm-4.col-xs-4.action .col-lg-4.col-md-4.col-sm-4.col-xs-4.action
Renseigner un SIRET Renseigner un SIRET
- unless @facade.entreprise.nil? - if @facade.entreprise.present?
.default-data-block .default-data-block
.row.show-block.infos#infos_entreprise .row.show-block.infos#infos_entreprise
.header .header
@ -56,19 +54,3 @@
= render partial: '/users/carte/map', locals: { dossier: @facade.dossier } = render partial: '/users/carte/map', locals: { dossier: @facade.dossier }
= render partial: 'users/carte/init_carto', locals: { dossier: @facade.dossier } = render partial: 'users/carte/init_carto', locals: { dossier: @facade.dossier }
- if @current_gestionnaire && gestionnaire_signed_in? && current_gestionnaire.assigned_on_procedure?(@facade.dossier.procedure_id) && @champs_private.present?
.default-data-block.default_visible
.row.show-block#private-fields
.header
.col-xs-10.title
.carret-right
.carret-down
= "formulaire privé".upcase
.col-xs-2.count
- private_fields_count = @champs_private.count
= (private_fields_count == 1) ? "1 champ" : "#{private_fields_count} champs"
.body
= render partial: '/dossiers/infos_private_fields'
= render partial: 'dossiers/avis', locals: { dossier_facade: @facade }

View file

@ -1,15 +0,0 @@
.dropdown.pull-right#download-menu
%a.dropdown-toggle.button-navbar{ type: :button, 'data-toggle' => 'dropdown', 'aria-haspopup' => true, 'aria-expanded' => false }
%i.fa.fa-download
Télécharger tous les dossiers
%span.caret
%ul.dropdown-menu.dropdown-menu-right
%li
= link_to backoffice_download_dossiers_tps_path(format: :csv, procedure_id: params[:id]), { class: 'btn btn-sm export-link' } do
= t('dynamics.backoffice.format_csv')
%li
= link_to backoffice_download_dossiers_tps_path(format: :xlsx, procedure_id: params[:id]), { class: 'btn btn-sm export-link' } do
= t('dynamics.backoffice.format_xlsx')
%li
= link_to backoffice_download_dossiers_tps_path(format: :ods, procedure_id: params[:id]), { class: 'btn btn-sm export-link' } do
= t('dynamics.backoffice.format_ods')

View file

@ -1,13 +0,0 @@
- if current_gestionnaire
- avis_for_dossier = current_gestionnaire.avis.for_dossier(dossier_facade.dossier.id).by_latest
- if avis_for_dossier.any?
.panel.panel-default
.panel-body
%h4 Votre avis est sollicité sur le dossier :
- avis_for_dossier.each do |avis|
%hr
%p= avis.introduction
= simple_form_for avis, url: backoffice_dossier_avis_path(dossier_facade.dossier, avis) do |f|
= f.input 'answer', label: "Votre avis"
- submit_label = if avis.answer then "Modifier votre avis" else "Enregistrer votre avis" end
= f.submit submit_label, class: 'btn btn-default'

View file

@ -1,4 +1,4 @@
- unless @facade.dossier.read_only? - if !@facade.dossier.read_only?
- if user_signed_in? && (@facade.dossier.owner?(current_user.email) || @facade.dossier.invite_by_user?(current_user.email)) - if user_signed_in? && (@facade.dossier.owner?(current_user.email) || @facade.dossier.invite_by_user?(current_user.email))
%a#maj_carte.action{ href: "/users/dossiers/#{@facade.dossier.id}/carte" } %a#maj_carte.action{ href: "/users/dossiers/#{@facade.dossier.id}/carte" }
.col-lg-2.col-md-2.col-sm-2.col-xs-2.action .col-lg-2.col-md-2.col-sm-2.col-xs-2.action

View file

@ -1,4 +1,4 @@
- unless @facade.dossier.read_only? - if !@facade.dossier.read_only?
- if user_signed_in? && (@facade.dossier.owner?(current_user.email) || @facade.dossier.invite_by_user?(current_user.email)) - if user_signed_in? && (@facade.dossier.owner?(current_user.email) || @facade.dossier.invite_by_user?(current_user.email))
%a#maj_infos.action{ href: "/users/dossiers/#{@facade.dossier.id}/description" } %a#maj_infos.action{ href: "/users/dossiers/#{@facade.dossier.id}/description" }
#edit-dossier.col-lg-2.col-md-2.col-sm-2.col-xs-2.action #edit-dossier.col-lg-2.col-md-2.col-sm-2.col-xs-2.action

View file

@ -1,4 +1,4 @@
- unless @facade.dossier.read_only? - if !@facade.dossier.read_only?
- if user_signed_in? && (@facade.dossier.owner?(current_user.email) || @facade.dossier.invite_by_user?(current_user.email)) - if user_signed_in? && (@facade.dossier.owner?(current_user.email) || @facade.dossier.invite_by_user?(current_user.email))
- if @facade.procedure.cerfa_flag? || @facade.dossier.types_de_piece_justificative.size > 0 - if @facade.procedure.cerfa_flag? || @facade.dossier.types_de_piece_justificative.size > 0
.col-lg-4.col-md-4.col-sm-4.col-xs-4.action .col-lg-4.col-md-4.col-sm-4.col-xs-4.action

View file

@ -23,7 +23,7 @@
.col-xs-5.depositaire-info= @facade.individual.birthdate .col-xs-5.depositaire-info= @facade.individual.birthdate
.row.margin-top-20 .row.margin-top-20
- unless @facade.champs.nil? - if @facade.champs.present?
- @facade.champs.each do |champ| - @facade.champs.each do |champ|
- next if champ.type_champ == 'explication' - next if champ.type_champ == 'explication'
- if champ.type_champ == 'header_section' - if champ.type_champ == 'header_section'
@ -37,7 +37,7 @@
.col-xs-1.comments-off .col-xs-1.comments-off
= "-" = "-"
.col-xs-5.depositaire-info{ id: "champ-#{champ.id}-value" } .col-xs-5.depositaire-info{ id: "champ-#{champ.id}-value" }
- unless champ.decorate.value.blank? - if champ.decorate.value.present?
- if champ.type_champ == 'dossier_link' - if champ.type_champ == 'dossier_link'
- dossier = Dossier.includes(:procedure).find_by(id: champ.decorate.value) - dossier = Dossier.includes(:procedure).find_by(id: champ.decorate.value)
- if dossier - if dossier
@ -91,7 +91,7 @@
.col-xs-5.despositaire-info .col-xs-5.despositaire-info
- if type_de_piece_justificative.api_entreprise - if type_de_piece_justificative.api_entreprise
%span.text-success Nous l'avons récupéré pour vous. %span.text-success Nous l'avons récupéré pour vous.
- elsif !(@pj = @facade.dossier.retrieve_last_piece_justificative_by_type(type_de_piece_justificative.id)).nil? - elsif (@pj = @facade.dossier.retrieve_last_piece_justificative_by_type(type_de_piece_justificative.id)).present?
%a{ href: "#{@pj.content_url}", target: '_blank' } Consulter %a{ href: "#{@pj.content_url}", target: '_blank' } Consulter
%span{ style: 'margin-left: 12px;' } %span{ style: 'margin-left: 12px;' }
\- \-
@ -101,7 +101,7 @@
- else - else
Pièce non fournie Pièce non fournie
- unless @facade.dossier.read_only? - if !@facade.dossier.read_only?
- if user_signed_in? && (@facade.dossier.owner?(current_user.email) || @facade.dossier.invite_by_user?(current_user.email)) - if user_signed_in? && (@facade.dossier.owner?(current_user.email) || @facade.dossier.invite_by_user?(current_user.email))
- if @facade.procedure.cerfa_flag? || @facade.dossier.types_de_piece_justificative.size > 0 - if @facade.procedure.cerfa_flag? || @facade.dossier.types_de_piece_justificative.size > 0
.row .row

Some files were not shown because too many files have changed in this diff Show more