Merge branch 'dev'

This commit is contained in:
gregoirenovel 2018-10-01 16:18:55 +02:00
commit c7cb1ac6e0
54 changed files with 293 additions and 165 deletions

View file

@ -6,6 +6,7 @@
padding: 8px 16px; padding: 8px 16px;
border-radius: 30px; border-radius: 30px;
border: 1px solid $border-grey; border: 1px solid $border-grey;
font-family: "Muli";
font-size: 14px; font-size: 14px;
line-height: 20px; line-height: 20px;
background-color: #FFFFFF; background-color: #FFFFFF;
@ -113,9 +114,20 @@
margin-right: $default-spacer; margin-right: $default-spacer;
} }
&.dropdown { &.icon-only {
position: relative; padding: 9px 16px;
.icon {
margin-right: 0;
}
}
}
.dropdown {
display: inline-block;
position: relative;
.dropdown-button {
&::after { &::after {
content: ""; content: "";
margin-left: $default-spacer; margin-left: $default-spacer;
@ -128,24 +140,14 @@
color: $blue; color: $blue;
} }
} }
.dropdown-content {
display: none;
}
&.open {
.dropdown-content {
display: block;
}
}
} }
&.icon-only { .dropdown-content {
padding: 9px 16px; display: none;
}
.icon { &.open .dropdown-content {
margin-right: 0; display: block;
}
} }
} }

View file

@ -159,6 +159,19 @@ $landing-breakpoint: 1040px;
} }
} }
.header-menu-button {
border: none;
padding: 0;
&:hover {
background: none;
}
&::after {
display: none;
}
}
.header-menu { .header-menu {
display: none; display: none;
position: absolute; position: absolute;

View file

@ -16,7 +16,10 @@ class Admin::InstructeursController < AdminController
array: true array: true
not_assign_scope = current_administrateur.gestionnaires.where.not(id: assign_scope.ids) not_assign_scope = current_administrateur.gestionnaires.where.not(id: assign_scope.ids)
not_assign_scope = not_assign_scope.where("email LIKE ?", "%#{params[:filter]}%") if params[:filter]
if params[:filter]
not_assign_scope = not_assign_scope.where("email LIKE ?", "%#{params[:filter]}%")
end
@instructeurs_not_assign = smart_listing_create :instructeurs_not_assign, @instructeurs_not_assign = smart_listing_create :instructeurs_not_assign,
not_assign_scope, not_assign_scope,

View file

@ -55,7 +55,9 @@ class Admin::ProceduresController < AdminController
def destroy def destroy
procedure = current_administrateur.procedures.find(params[:id]) procedure = current_administrateur.procedures.find(params[:id])
return render json: {}, status: 401 if procedure.publiee_ou_archivee? if procedure.publiee_ou_archivee?
return render json: {}, status: 401
end
procedure.destroy procedure.destroy
@ -72,7 +74,11 @@ class Admin::ProceduresController < AdminController
def create def create
@procedure = Procedure.new(procedure_params) @procedure = Procedure.new(procedure_params)
@procedure.module_api_carto = ModuleAPICarto.new(create_module_api_carto_params) if @procedure.valid?
if @procedure.valid?
@procedure.module_api_carto = ModuleAPICarto.new(create_module_api_carto_params)
end
@path = params.require(:procedure).permit(:path)[:path] @path = params.require(:procedure).permit(:path)[:path]
@available = !ProcedurePath.exists?(path: @path) @available = !ProcedurePath.exists?(path: @path)
@mine = ProcedurePath.mine?(current_administrateur, @path) @mine = ProcedurePath.mine?(current_administrateur, @path)

View file

@ -5,7 +5,10 @@ class Administrations::SessionsController < ApplicationController
end end
def destroy def destroy
sign_out :administration if administration_signed_in? if administration_signed_in?
sign_out :administration
end
redirect_to root_path redirect_to root_path
end end
end end

View file

@ -1,7 +1,10 @@
class CommentairesController < ApplicationController class CommentairesController < ApplicationController
def create def create
@commentaire = Commentaire.new @commentaire = Commentaire.new
@commentaire.champ = @commentaire.dossier.champs.find(params[:champ_id]) if params[:champ_id]
if params[:champ_id]
@commentaire.champ = @commentaire.dossier.champs.find(params[:champ_id])
end
dossier_id = params['dossier_id'] dossier_id = params['dossier_id']
@commentaire.email = current_user.email @commentaire.email = current_user.email

View file

@ -36,9 +36,17 @@ class FranceConnect::ParticulierController < ApplicationController
end end
def connect_france_connect_particulier(user) def connect_france_connect_particulier(user)
sign_out :user if user_signed_in? if user_signed_in?
sign_out :gestionnaire if gestionnaire_signed_in? sign_out :user
sign_out :administrateur if administrateur_signed_in? end
if gestionnaire_signed_in?
sign_out :gestionnaire
end
if administrateur_signed_in?
sign_out :administrateur
end
sign_in user sign_in user

View file

@ -36,14 +36,20 @@ class Gestionnaires::PasswordsController < Devise::PasswordsController
def try_to_authenticate_user def try_to_authenticate_user
if gestionnaire_signed_in? if gestionnaire_signed_in?
user = User.find_by(email: current_gestionnaire.email) user = User.find_by(email: current_gestionnaire.email)
sign_in user if user
if user
sign_in user
end
end end
end end
def try_to_authenticate_administrateur def try_to_authenticate_administrateur
if gestionnaire_signed_in? if gestionnaire_signed_in?
administrateur = Administrateur.find_by(email: current_gestionnaire.email) administrateur = Administrateur.find_by(email: current_gestionnaire.email)
sign_in administrateur if administrateur
if administrateur
sign_in administrateur
end
end end
end end
end end

View file

@ -131,7 +131,10 @@ module NewGestionnaire
def position def position
etablissement = dossier.etablissement etablissement = dossier.etablissement
point = Carto::Geocodeur.convert_adresse_to_point(etablissement.geo_adresse) if etablissement.present?
if etablissement.present?
point = Carto::Geocodeur.convert_adresse_to_point(etablissement.geo_adresse)
end
lon = "2.428462" lon = "2.428462"
lat = "46.538192" lat = "46.538192"

View file

@ -2,9 +2,20 @@ class Sessions::SessionsController < Devise::SessionsController
before_action :before_sign_in, only: [:create] before_action :before_sign_in, only: [:create]
def before_sign_in def before_sign_in
sign_out :user if user_signed_in? if user_signed_in?
sign_out :gestionnaire if gestionnaire_signed_in? sign_out :user
sign_out :administrateur if administrateur_signed_in? end
sign_out :administration if administration_signed_in?
if gestionnaire_signed_in?
sign_out :gestionnaire
end
if administrateur_signed_in?
sign_out :administrateur
end
if administration_signed_in?
sign_out :administration
end
end end
end end

View file

@ -9,7 +9,7 @@ class SupportController < ApplicationController
if direct_message? && create_commentaire if direct_message? && create_commentaire
flash.notice = "Votre message a été envoyé sur la messagerie de votre dossier." flash.notice = "Votre message a été envoyé sur la messagerie de votre dossier."
redirect_to helpers.url_for_dossier(dossier) redirect_to messagerie_dossier_path(dossier)
elsif create_conversation elsif create_conversation
flash.notice = "Votre message a été envoyé." flash.notice = "Votre message a été envoyé."

View file

@ -35,7 +35,9 @@ class Users::CarteController < UsersController
etablissement = nil etablissement = nil
end end
point = Carto::Geocodeur.convert_adresse_to_point(etablissement.geo_adresse) if etablissement.present? if etablissement.present?
point = Carto::Geocodeur.convert_adresse_to_point(etablissement.geo_adresse)
end
lon = '2.428462' lon = '2.428462'
lat = '46.538192' lat = '46.538192'

View file

@ -2,7 +2,10 @@ class Users::DescriptionController < UsersController
def pieces_justificatives def pieces_justificatives
invite = current_user.invite? params[:dossier_id] invite = current_user.invite? params[:dossier_id]
@dossier ||= Dossier.find(params[:dossier_id]) if invite if invite
@dossier ||= Dossier.find(params[:dossier_id])
end
@dossier ||= current_user_dossier @dossier ||= current_user_dossier
if (errors_upload = PiecesJustificativesService.upload!(@dossier, current_user, params)).present? if (errors_upload = PiecesJustificativesService.upload!(@dossier, current_user, params)).present?
@ -13,10 +16,14 @@ class Users::DescriptionController < UsersController
end end
else else
flash.notice = 'Nouveaux fichiers envoyés' if flash.alert.nil? if flash.alert.nil?
flash.notice = 'Nouveaux fichiers envoyés'
end
end end
return redirect_to users_dossiers_invite_path(id: current_user.invites.find_by(dossier_id: @dossier.id).id) if invite if invite
return redirect_to users_dossiers_invite_path(id: current_user.invites.find_by(dossier_id: @dossier.id).id)
end
redirect_to users_dossier_recapitulatif_path redirect_to users_dossier_recapitulatif_path
end end

View file

@ -2,10 +2,13 @@ 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 if !@facade.procedure.individual_with_siret? if !@facade.procedure.individual_with_siret?
raise ActiveRecord::RecordNotFound
@siret = current_user.siret if current_user.siret.present? end
if current_user.siret.present?
@siret = current_user.siret
end
rescue ActiveRecord::RecordNotFound rescue ActiveRecord::RecordNotFound
flash.alert = t('errors.messages.dossier_not_found') flash.alert = t('errors.messages.dossier_not_found')
redirect_to url_for dossiers_path redirect_to url_for dossiers_path

View file

@ -12,12 +12,10 @@ class Users::Dossiers::InvitesController < UsersController
def show def show
@facade = InviteDossierFacades.new params[:id].to_i, current_user.email @facade = InviteDossierFacades.new params[:id].to_i, current_user.email
if Flipflop.new_dossier_details?
return redirect_to dossier_path(@facade.dossier)
end
if @facade.dossier.brouillon? if @facade.dossier.brouillon?
redirect_to brouillon_dossier_path(@facade.dossier) redirect_to brouillon_dossier_path(@facade.dossier)
elsif Flipflop.new_dossier_details?
return redirect_to dossier_path(@facade.dossier)
else else
render 'users/recapitulatif/show' render 'users/recapitulatif/show'
end end

View file

@ -54,7 +54,9 @@ class Users::DossiersController < UsersController
dossier = Dossier.create!(procedure: procedure, user: current_user, state: Dossier.states.fetch(:brouillon)) dossier = Dossier.create!(procedure: procedure, user: current_user, state: Dossier.states.fetch(:brouillon))
siret = params[:siret] || current_user.siret siret = params[:siret] || current_user.siret
update_current_user_siret! siret if siret.present? if siret.present?
update_current_user_siret! siret
end
if dossier.procedure.for_individual if dossier.procedure.for_individual
redirect_to identite_dossier_path(dossier) redirect_to identite_dossier_path(dossier)
@ -67,7 +69,9 @@ class Users::DossiersController < UsersController
def show def show
@facade = facade @facade = facade
@siret = current_user.siret if current_user.siret.present? if current_user.siret.present?
@siret = current_user.siret
end
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
@ -165,7 +169,9 @@ class Users::DossiersController < UsersController
private private
def check_siret def check_siret
errors_valid_siret if !Siret.new(siret: siret).valid? if !Siret.new(siret: siret).valid?
errors_valid_siret
end
end end
def errors_valid_siret def errors_valid_siret

View file

@ -36,14 +36,20 @@ class Users::PasswordsController < Devise::PasswordsController
def try_to_authenticate_gestionnaire def try_to_authenticate_gestionnaire
if user_signed_in? if user_signed_in?
gestionnaire = Gestionnaire.find_by(email: current_user.email) gestionnaire = Gestionnaire.find_by(email: current_user.email)
sign_in gestionnaire if gestionnaire
if gestionnaire
sign_in gestionnaire
end
end end
end end
def try_to_authenticate_administrateur def try_to_authenticate_administrateur
if user_signed_in? if user_signed_in?
administrateur = Administrateur.find_by(email: current_user.email) administrateur = Administrateur.find_by(email: current_user.email)
sign_in administrateur if administrateur
if administrateur
sign_in administrateur
end
end end
end end
end end

View file

@ -13,7 +13,10 @@ class Users::RegistrationsController < Devise::RegistrationsController
# Allow pre-filling the user email from a query parameter # Allow pre-filling the user email from a query parameter
build_resource({ email: sign_up_params[:email] }) build_resource({ email: sign_up_params[:email] })
yield resource if block_given? if block_given?
yield resource
end
respond_with resource respond_with resource
end end

View file

@ -39,8 +39,13 @@ class Users::SessionsController < Sessions::SessionsController
# DELETE /resource/sign_out # DELETE /resource/sign_out
def destroy def destroy
sign_out :gestionnaire if gestionnaire_signed_in? if gestionnaire_signed_in?
sign_out :administrateur if administrateur_signed_in? sign_out :gestionnaire
end
if administrateur_signed_in?
sign_out :administrateur
end
if user_signed_in? if user_signed_in?
connected_with_france_connect = current_user.loged_in_with_france_connect connected_with_france_connect = current_user.loged_in_with_france_connect
@ -72,7 +77,9 @@ class Users::SessionsController < Sessions::SessionsController
end end
def user_return_to_procedure_id def user_return_to_procedure_id
return nil if session["user_return_to"].nil? if session["user_return_to"].nil?
return nil
end
NumberService.to_number session["user_return_to"].split("?procedure_id=").second NumberService.to_number session["user_return_to"].split("?procedure_id=").second
end end

View file

@ -30,6 +30,8 @@ class ChampDecorator < Draper::Decorator
end end
def description_with_links def description_with_links
description.gsub(URI.regexp, '<a target="_blank" href="\0">\0</a>') if description if description
description.gsub(URI.regexp, '<a target="_blank" href="\0">\0</a>')
end
end end
end end

View file

@ -1,11 +1,15 @@
class TypeDePieceJustificativeDecorator < Draper::Decorator class TypeDePieceJustificativeDecorator < Draper::Decorator
delegate_all delegate_all
def button_up(params) def button_up(params)
h.link_to '', params[:url], class: up_classes, id: "btn_up_#{params[:index]}", remote: true, method: :post if display_up_button?(params[:index]) if display_up_button?(params[:index])
h.link_to '', params[:url], class: up_classes, id: "btn_up_#{params[:index]}", remote: true, method: :post
end
end end
def button_down(params) def button_down(params)
h.link_to '', params[:url], class: down_classes, id: "btn_down_#{params[:index]}", remote: true, method: :post if display_down_button?(params[:index]) if display_down_button?(params[:index])
h.link_to '', params[:url], class: down_classes, id: "btn_down_#{params[:index]}", remote: true, method: :post
end
end end
private private

View file

@ -1,13 +0,0 @@
import $ from 'jquery';
$(document).on('click', 'body', () => {
$('.button.dropdown').removeClass('open');
});
$(document).on('click', '.button.dropdown', event => {
event.stopPropagation();
const $target = $(event.target);
if ($target.hasClass('button', 'dropdown')) {
$target.toggleClass('open');
}
});

View file

@ -1,10 +0,0 @@
import $ from 'jquery';
$(document).on('click', 'body', () => {
$('.print-menu').removeClass('open fade-in-down');
});
export function togglePrintMenu(event) {
event.stopPropagation();
$('.print-menu').toggleClass('open fade-in-down');
}

View file

@ -0,0 +1,19 @@
import Rails from 'rails-ujs';
const { delegate } = Rails;
delegate(document, 'body', 'click', event => {
if (!event.target.closest('.dropdown')) {
[...document.querySelectorAll('.dropdown')].forEach(element =>
element.classList.remove('open', 'fade-in-down')
);
}
});
delegate(document, '.dropdown-button', 'click', event => {
event.stopPropagation();
const parent = event.target.closest('.dropdown-button').parentElement;
if (parent.classList.contains('dropdown')) {
parent.classList.toggle('open');
}
});

View file

@ -1,10 +0,0 @@
import $ from 'jquery';
$(document).on('click', 'body', () => {
$('.header-menu').removeClass('open fade-in-down');
});
export function toggleHeaderMenu(event) {
event.stopPropagation();
$('.header-menu').toggleClass('open fade-in-down');
}

View file

@ -13,7 +13,7 @@ import '../shared/autocomplete';
import '../shared/remote-input'; import '../shared/remote-input';
import '../new_design/spinner'; import '../new_design/spinner';
import '../new_design/buttons'; import '../new_design/dropdown';
import '../new_design/form-validation'; import '../new_design/form-validation';
import '../new_design/carto'; import '../new_design/carto';
import '../new_design/select2'; import '../new_design/select2';
@ -21,8 +21,6 @@ import '../new_design/select2';
import '../new_design/champs/linked-drop-down-list'; import '../new_design/champs/linked-drop-down-list';
import { toggleCondidentielExplanation } from '../new_design/avis'; import { toggleCondidentielExplanation } from '../new_design/avis';
import { togglePrintMenu } from '../new_design/dossier';
import { toggleHeaderMenu } from '../new_design/header';
import { scrollMessagerie } from '../new_design/messagerie'; import { scrollMessagerie } from '../new_design/messagerie';
import { showMotivation, motivationCancel } from '../new_design/state-button'; import { showMotivation, motivationCancel } from '../new_design/state-button';
import { toggleChart } from '../new_design/toggle-chart'; import { toggleChart } from '../new_design/toggle-chart';
@ -30,8 +28,6 @@ import { toggleChart } from '../new_design/toggle-chart';
// This is the global application namespace where we expose helpers used from rails views // This is the global application namespace where we expose helpers used from rails views
const DS = { const DS = {
toggleCondidentielExplanation, toggleCondidentielExplanation,
togglePrintMenu,
toggleHeaderMenu,
scrollMessagerie, scrollMessagerie,
showMotivation, showMotivation,
motivationCancel, motivationCancel,

View file

@ -10,9 +10,15 @@ class FileSizeValidator < ActiveModel::EachValidator
range = options.delete(:in) || options.delete(:within) range = options.delete(:in) || options.delete(:within)
if range.present? if range.present?
raise ArgumentError, ":in and :within must be a Range" if !range.is_a?(Range) if !range.is_a?(Range)
raise ArgumentError, ":in and :within must be a Range"
end
options[:minimum], options[:maximum] = range.begin, range.end options[:minimum], options[:maximum] = range.begin, range.end
options[:maximum] -= 1 if range.exclude_end?
if range.exclude_end?
options[:maximum] -= 1
end
end end
super super
@ -35,12 +41,18 @@ class FileSizeValidator < ActiveModel::EachValidator
end end
def validate_each(record, attribute, value) def validate_each(record, attribute, value)
raise(ArgumentError, "A CarrierWave::Uploader::Base object was expected") if !value.kind_of? CarrierWave::Uploader::Base if !value.kind_of? CarrierWave::Uploader::Base
raise(ArgumentError, "A CarrierWave::Uploader::Base object was expected")
end
value = (options[:tokenizer] || DEFAULT_TOKENIZER).call(value) if value.kind_of?(String) if value.kind_of?(String)
value = (options[:tokenizer] || DEFAULT_TOKENIZER).call(value)
end
CHECKS.each do |key, validity_check| CHECKS.each do |key, validity_check|
next if !check_value = options[key] if !check_value = options[key]
next
end
check_value = check_value =
case check_value case check_value
@ -50,16 +62,22 @@ class FileSizeValidator < ActiveModel::EachValidator
record.send(check_value) record.send(check_value)
end end
value ||= [] if key == :maximum if key == :maximum
value ||= []
end
value_size = value.size value_size = value.size
next if value_size.send(validity_check, check_value) if value_size.send(validity_check, check_value)
next
end
errors_options = options.except(*RESERVED_OPTIONS) errors_options = options.except(*RESERVED_OPTIONS)
errors_options[:file_size] = help.number_to_human_size check_value errors_options[:file_size] = help.number_to_human_size check_value
default_message = options[MESSAGES[key]] default_message = options[MESSAGES[key]]
errors_options[:message] ||= default_message if default_message if default_message
errors_options[:message] ||= default_message
end
record.errors.add(attribute, MESSAGES[key], errors_options) record.errors.add(attribute, MESSAGES[key], errors_options)
end end

View file

@ -47,7 +47,7 @@ module TagsSubstitutionConcern
{ {
libelle: 'lien dossier', libelle: 'lien dossier',
description: '', description: '',
lambda: -> (d) { external_link(users_dossier_recapitulatif_url(d)) }, lambda: -> (d) { external_link(dossier_url(d)) },
available_for_states: Dossier::SOUMIS available_for_states: Dossier::SOUMIS
}, },
{ {

View file

@ -31,7 +31,9 @@ class Gestionnaire < ApplicationRecord
end end
def follow(dossier) def follow(dossier)
return if follow?(dossier) if follow?(dossier)
return
end
followed_dossiers << dossier followed_dossiers << dossier
end end

View file

@ -6,10 +6,15 @@ class ModuleAPICarto < ApplicationRecord
validates :cadastre, presence: true, allow_blank: true, allow_nil: false validates :cadastre, presence: true, allow_blank: true, allow_nil: false
def classes def classes
modules = '' modules = ''
modules += 'qp ' if quartiers_prioritaires? if quartiers_prioritaires?
modules += 'cadastre ' if cadastre? modules += 'qp '
end
if cadastre?
modules += 'cadastre '
end
modules modules
end end

View file

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

View file

@ -1,7 +1,9 @@
class ClamavService class ClamavService
def self.safe_file?(file_path) def self.safe_file?(file_path)
if Rails.env == 'development' if Rails.env == 'development'
return CLAMAV[:response] if CLAMAV[:mock?] if CLAMAV[:mock?]
return CLAMAV[:response]
end
end end
FileUtils.chmod 0666, file_path FileUtils.chmod 0666, file_path
@ -9,7 +11,10 @@ class ClamavService
client = ClamAV::Client.new client = ClamAV::Client.new
response = client.execute(ClamAV::Commands::ScanCommand.new(file_path)) response = client.execute(ClamAV::Commands::ScanCommand.new(file_path))
return false if response.first.class == ClamAV::VirusResponse if response.first.class == ClamAV::VirusResponse
return false
end
true true
end end
end end

View file

@ -1,5 +1,5 @@
class NumberService class NumberService
def self.to_number(string) def self.to_number(string)
string.to_s if Float(string) rescue nil string.to_s
end end
end end

View file

@ -48,6 +48,8 @@ class PieceJustificativeUploader < BaseUploader
end end
def set_original_filename(file) def set_original_filename(file)
model.original_filename ||= file.original_filename if file.respond_to?(:original_filename) if file.respond_to?(:original_filename)
model.original_filename ||= file.original_filename
end
end end
end end

View file

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

View file

@ -1,10 +1,11 @@
%span.button.dropdown.invite-user-action %span.dropdown.invite-user-action
%span.icon.person %button.button.dropdown-button
- if dossier.invites.count > 0 %span.icon.person
Voir les personnes invitées - if dossier.invites.count > 0
%span.badge= dossier.invites.count Voir les personnes invitées
- else %span.badge= dossier.invites.count
Inviter une personne à modifier ce dossier - else
Inviter une personne à modifier ce dossier
.dropdown-content.fade-in-down .dropdown-content.fade-in-down
= render partial: "invites/form", locals: { dossier: dossier } = render partial: "invites/form", locals: { dossier: dossier }

View file

@ -1,3 +1,3 @@
%div{ style: 'float: right;' } %div{ style: 'float: right;' }
%a.btn{ href: "/users/dossiers/#{@dossier.id}/recapitulatif" } Retour %a.btn{ href: dossier_path(@dossier) } Retour
= submit_tag 'Modification terminée', class: %w(btn btn btn-info), id: 'modification_terminee', data: { disable: true, submit: true } = submit_tag 'Modification terminée', class: %w(btn btn btn-info), id: 'modification_terminee', data: { disable: true, submit: true }

View file

@ -57,9 +57,10 @@
- if gestionnaire_signed_in? || user_signed_in? - if gestionnaire_signed_in? || user_signed_in?
%li %li
.header-menu-opener %span.dropdown.header-menu-opener
= image_tag "icons/account-circle.svg", onclick: "javascript:DS.toggleHeaderMenu(event);", title: "Mon compte" %button.button.dropdown-button.header-menu-button
%ul.header-menu = image_tag "icons/account-circle.svg", title: "Mon compte"
%ul.header-menu.dropdown-content
%li %li
.menu-item{ title: current_email } .menu-item{ title: current_email }
= current_email = current_email

View file

@ -6,4 +6,4 @@
%strong %strong
Merci de ne pas répondre à cet email. Pour vous adresser à votre administration, passez directement par votre Merci de ne pas répondre à cet email. Pour vous adresser à votre administration, passez directement par votre
= succeed '.' do = succeed '.' do
= link_to 'messagerie', users_dossier_recapitulatif_url(@dossier), target: '_blank' = link_to 'messagerie', messagerie_dossier_url(@dossier), target: '_blank'

View file

@ -7,13 +7,14 @@
%li %li
= "Dossier nº #{dossier.id}" = "Dossier nº #{dossier.id}"
.mixed-buttons-bar .mixed-buttons-bar
.button.dropdown.icon-only.print-menu-opener{ onclick: "javascript:DS.togglePrintMenu(event);" } %span.dropdown.print-menu-opener
%span.icon.printer %button.button.dropdown-button.icon-only
%ul.print-menu %span.icon.printer
%ul.print-menu.dropdown-content
%li %li
= link_to "Tout le dossier", print_gestionnaire_dossier_path(dossier.procedure, dossier), target: "_blank", class: "menu-item menu-link" = link_to "Tout le dossier", print_gestionnaire_dossier_path(dossier.procedure, dossier), target: "_blank", class: "menu-item menu-link"
%li %li
= link_to "Uniquement cet onglet", "#", onclick: "DS.togglePrintMenu; window.print()", class: "menu-item menu-link" = link_to "Uniquement cet onglet", "#", onclick: "window.print()", class: "menu-item menu-link"
= render partial: "new_gestionnaire/procedures/dossier_actions", locals: { procedure: dossier.procedure, dossier: dossier, dossier_is_followed: current_gestionnaire&.follow?(dossier) } = render partial: "new_gestionnaire/procedures/dossier_actions", locals: { procedure: dossier.procedure, dossier: dossier, dossier_is_followed: current_gestionnaire&.follow?(dossier) }
= render partial: "state_button", locals: { dossier: dossier } = render partial: "state_button", locals: { dossier: dossier }

View file

@ -1,6 +1,7 @@
- if dossier.en_construction? || dossier.en_instruction? - if dossier.en_construction? || dossier.en_instruction?
%span.button.primary.dropdown %span.dropdown
= dossier.decorate.display_state %button.button.primary.dropdown-button
= dossier.decorate.display_state
.dropdown-content.fade-in-down .dropdown-content.fade-in-down
%ul.dropdown-items %ul.dropdown-items
- if dossier.en_construction? - if dossier.en_construction?
@ -49,8 +50,9 @@
- else - else
- if dossier.motivation.present? || dossier.attestation.present? - if dossier.motivation.present? || dossier.attestation.present?
%span.button.dropdown{ class: button_or_label_class(dossier) } %span.dropdown
= dossier.statut %button.button.dropdown-button{ class: button_or_label_class(dossier) }
= dossier.statut
.dropdown-content.fade-in-down.terminated .dropdown-content.fade-in-down.terminated
- if dossier.motivation.present? - if dossier.motivation.present?
%h4 Motivation %h4 Motivation

View file

@ -1,6 +1,7 @@
- if procedure.dossiers.state_not_brouillon.any? - if procedure.dossiers.state_not_brouillon.any?
%span.button.dropdown %span.dropdown
Télécharger tous les dossiers %button.button.dropdown-button
Télécharger tous les dossiers
.dropdown-content.fade-in-down .dropdown-content.fade-in-down
%ul.dropdown-items %ul.dropdown-items
%li %li

View file

@ -43,8 +43,9 @@
.container .container
- if @dossiers.present? || @current_filters.count > 0 - if @dossiers.present? || @current_filters.count > 0
%span.button.dropdown %span.dropdown
Filtrer %button.button.dropdown-button
Filtrer
.dropdown-content.left-aligned.fade-in-down .dropdown-content.left-aligned.fade-in-down
= form_tag add_filter_gestionnaire_procedure_path(@procedure), method: :post, class: 'dropdown-form large' do = form_tag add_filter_gestionnaire_procedure_path(@procedure), method: :post, class: 'dropdown-form large' do
= label_tag :field, "Colonne" = label_tag :field, "Colonne"
@ -78,8 +79,9 @@
= render partial: "header_field", locals: { field: { "label" => "Statut", "table" => "self", "column" => "state" }, classname: "status-col" } = render partial: "header_field", locals: { field: { "label" => "Statut", "table" => "self", "column" => "state" }, classname: "status-col" }
%th.follow-col %th.follow-col
%span.button.dropdown %span.dropdown
Personnaliser %button.button.dropdown-button
Personnaliser
.dropdown-content.fade-in-down .dropdown-content.fade-in-down
= form_tag update_displayed_fields_gestionnaire_procedure_path(@procedure), method: :patch, class: 'dropdown-form columns-form' do = form_tag update_displayed_fields_gestionnaire_procedure_path(@procedure), method: :patch, class: 'dropdown-form columns-form' do
= select_tag :values, = select_tag :values,

View file

@ -6,7 +6,7 @@
%p %p
Pour le consulter, merci de vous rendre sur Pour le consulter, merci de vous rendre sur
= users_dossier_recapitulatif_url(dossier_id: @dossier.id) = messagerie_dossier_url(@dossier)
%p %p
Bonne journée, Bonne journée,

View file

@ -13,8 +13,9 @@
= link_to "Télécharger", pj.content_url, class: "link", target: :blank = link_to "Télécharger", pj.content_url, class: "link", target: :blank
- if pjs.present? - if pjs.present?
%br %br
%span.button.dropdown %span.dropdown
anciennes versions %button.button.dropdown-button
anciennes versions
.dropdown-content.fade-in-down .dropdown-content.fade-in-down
%ul.dropdown-items %ul.dropdown-items
- pjs.each do |pj| - pjs.each do |pj|

View file

@ -58,7 +58,7 @@
%li %li
= link_to("Étape Occitanie, le 15 octobre à Toulouse", "https://www.demarches-simplifiees.fr/commencer/tour-de-france-demarches-simplifiees-fr-occitanie", target: "_blank") = link_to("Étape Occitanie, le 15 octobre à Toulouse", "https://www.demarches-simplifiees.fr/commencer/tour-de-france-demarches-simplifiees-fr-occitanie", target: "_blank")
%li %li
= link_to("Étape Nouvelle-Aquitaine, le 17 octobre à Bordeaux", "https://www.demarches-simplifiees.fr/commencer/tour-de-france-demarches-simplifiees-fr-aquitaine", target: "_blank") = link_to("Étape Nouvelle-Aquitaine, le 18 octobre à Bordeaux", "https://www.demarches-simplifiees.fr/commencer/tour-de-france-demarches-simplifiees-fr-aquitaine", target: "_blank")
%li %li
= link_to("Étape Martinique, le 24 octobre à Fort-de-France", "https://www.demarches-simplifiees.fr/commencer/tour-de-france-demarches-simplifiees-fr-martinique", target: "_blank") = link_to("Étape Martinique, le 24 octobre à Fort-de-France", "https://www.demarches-simplifiees.fr/commencer/tour-de-france-demarches-simplifiees-fr-martinique", target: "_blank")
%li %li

View file

@ -18,15 +18,17 @@ class CreateFranceConnectInformation < ActiveRecord::Migration
add_reference :france_connect_informations, :user, references: :users add_reference :france_connect_informations, :user, references: :users
User.all.each do |user| User.all.each do |user|
FranceConnectInformation.create({ if user.france_connect_particulier_id.present?
gender: user.gender, FranceConnectInformation.create({
given_name: user.given_name, gender: user.gender,
family_name: user.family_name, given_name: user.given_name,
birthdate: user.birthdate, family_name: user.family_name,
birthplace: user.birthplace, birthdate: user.birthdate,
france_connect_particulier_id: user.france_connect_particulier_id, birthplace: user.birthplace,
user_id: user.id france_connect_particulier_id: user.france_connect_particulier_id,
}) if user.france_connect_particulier_id.present? user_id: user.id
})
end
end end
remove_column :users, :gender remove_column :users, :gender

View file

@ -98,7 +98,7 @@ describe SupportController, type: :controller do
} }
expect(flash[:notice]).to match('Votre message a été envoyé sur la messagerie de votre dossier.') expect(flash[:notice]).to match('Votre message a été envoyé sur la messagerie de votre dossier.')
expect(response).to redirect_to users_dossier_recapitulatif_path(dossier) expect(response).to redirect_to messagerie_dossier_path(dossier)
end end
end end
end end

View file

@ -82,23 +82,23 @@ feature "procedure filters" do
end end
def add_filter(column_name, filter_value) def add_filter(column_name, filter_value)
find(:xpath, "//span[contains(text(), 'Filtrer')]").click click_on 'Filtrer'
select column_name, from: "Colonne" select column_name, from: "Colonne"
fill_in "Valeur", with: filter_value fill_in "Valeur", with: filter_value
click_button "Ajouter le filtre" click_button "Ajouter le filtre"
end end
def add_column(column_name) def add_column(column_name)
find(:xpath, "//span[contains(text(), 'Personnaliser')]").click click_on 'Personnaliser'
find("span.select2-container").click find("span.select2-container").click
find(:xpath, "//li[text()='#{column_name}']").click find(:xpath, "//li[text()='#{column_name}']").click
click_button "Enregistrer" click_button "Enregistrer"
end end
def remove_column(column_name) def remove_column(column_name)
find(:xpath, "//span[contains(text(), 'Personnaliser')]").click click_on 'Personnaliser'
find(:xpath, "//li[contains(@title, '#{column_name}')]/span[contains(text(), '×')]").click find(:xpath, "//li[contains(@title, '#{column_name}')]/span[contains(text(), '×')]").click
find(:xpath, "//span[contains(text(), 'Personnaliser')]//span[contains(@class, 'select2-container')]").click find(:xpath, "//form[contains(@class, 'columns-form')]//span[contains(@class, 'select2-container')]").click
click_button "Enregistrer" click_button "Enregistrer"
end end
end end

View file

@ -178,7 +178,7 @@ feature 'Invitations' do
end end
def send_invite_to(invited_email) def send_invite_to(invited_email)
find('.button.invite-user-action').click() click_on "Inviter une personne à modifier ce dossier"
expect(page).to have_button("Envoyer une invitation", visible: true) expect(page).to have_button("Envoyer une invitation", visible: true)
fill_in 'invite_email', with: invited_email fill_in 'invite_email', with: invited_email

View file

@ -60,7 +60,7 @@ RSpec.describe NotificationMailer, type: :mailer do
subject(:subject) { described_class.new_answer(dossier) } subject(:subject) { described_class.new_answer(dossier) }
it { expect(subject.body).to match('Un nouveau message est disponible dans votre espace demarches-simplifiees.fr.') } it { expect(subject.body).to match('Un nouveau message est disponible dans votre espace demarches-simplifiees.fr.') }
it { expect(subject.body).to include(users_dossier_recapitulatif_url(dossier_id: dossier.id)) } it { expect(subject.body).to include(messagerie_dossier_url(dossier)) }
it { expect(subject.subject).to eq("Nouveau message pour votre dossier nº #{dossier.id}") } it { expect(subject.subject).to eq("Nouveau message pour votre dossier nº #{dossier.id}") }
end end
end end

View file

@ -26,7 +26,7 @@ describe MailTemplateConcern do
it do it do
expected = expected =
"[demarches-simplifiees.fr] #{dossier.id} #{dossier.procedure.libelle} " + "[demarches-simplifiees.fr] #{dossier.id} #{dossier.procedure.libelle} " +
"<a target=\"_blank\" href=\"http://localhost:3000/users/dossiers/#{dossier.id}/recapitulatif\">http://localhost:3000/users/dossiers/#{dossier.id}/recapitulatif</a>" "<a target=\"_blank\" href=\"http://localhost:3000/dossiers/#{dossier.id}\">http://localhost:3000/dossiers/#{dossier.id}</a>"
is_expected.to eq(expected) is_expected.to eq(expected)
end end

View file

@ -27,7 +27,7 @@ describe 'users/carte/show.html.haml', type: :view do
end end
end end
context 'si la page précédente n\'est pas recapitulatif' do context 'si la page précédente n\'est pas la page du dossier' do
it 'le bouton "Etape suivante" est présent' do it 'le bouton "Etape suivante" est présent' do
expect(rendered).to have_selector('#etape_suivante') expect(rendered).to have_selector('#etape_suivante')
end end
@ -37,7 +37,7 @@ describe 'users/carte/show.html.haml', type: :view do
# end # end
end end
context 'si la page précédente est recapitularif' do context 'si la page précédente est la page du dossier' do
let(:state) { Dossier.states.fetch(:en_construction) } let(:state) { Dossier.states.fetch(:en_construction) }
it 'le bouton "Etape suivante" n\'est pas présent' do it 'le bouton "Etape suivante" n\'est pas présent' do
@ -52,8 +52,8 @@ describe 'users/carte/show.html.haml', type: :view do
# expect(rendered).to have_selector('input[type=submit][id=modification_terminee][onclick=\'submit_check_draw(event)\']') # expect(rendered).to have_selector('input[type=submit][id=modification_terminee][onclick=\'submit_check_draw(event)\']')
# end # end
it 'le lien de retour au récapitulatif est présent' do it 'le lien de retour à la page du dossier est présent' do
expect(rendered).to have_selector("a[href='/users/dossiers/#{dossier_id}/recapitulatif']") expect(rendered).to have_selector("a[href='/dossiers/#{dossier_id}']")
end end
end end
end end