Skip to content

Commit 6dadc24

Browse files
authored
Merge pull request #4438 from betagouv/dev
2019-10-24-01
2 parents 59efe3b + a108859 commit 6dadc24

43 files changed

Lines changed: 812 additions & 137 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

Gemfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ gem 'aasm'
44
gem 'actiontext', git: 'https://github.com/kobaltz/actiontext.git', branch: 'archive', require: 'action_text' # Port of ActionText to Rails 5
55
gem 'active_link_to' # Automatically set a class on active links
66
gem 'active_model_serializers'
7-
gem 'activestorage-openstack', git: 'https://github.com/fredZen/activestorage-openstack.git', branch: 'frederic/fix_upload_signature'
7+
gem 'activestorage-openstack'
88
gem 'administrate'
99
gem 'after_party'
1010
gem 'anchored'

Gemfile.lock

Lines changed: 14 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,3 @@
1-
GIT
2-
remote: https://github.com/fredZen/activestorage-openstack.git
3-
revision: c71d5107a51701eab9d9267dd0000e6c1cf3e39a
4-
branch: frederic/fix_upload_signature
5-
specs:
6-
activestorage-openstack (0.5.0)
7-
fog-openstack (~> 1.0)
8-
marcel
9-
mime-types
10-
rails (~> 5.2.0)
11-
121
GIT
132
remote: https://github.com/kobaltz/actiontext.git
143
revision: ef59c4ba99d1b7614dd47f5a294eef553224db88
@@ -75,13 +64,18 @@ GEM
7564
actionpack (= 5.2.2.1)
7665
activerecord (= 5.2.2.1)
7766
marcel (~> 0.3.1)
67+
activestorage-openstack (1.0.0)
68+
fog-openstack (~> 1.0)
69+
marcel
70+
mime-types
71+
rails (<= 6)
7872
activesupport (5.2.2.1)
7973
concurrent-ruby (~> 1.0, >= 1.0.2)
8074
i18n (>= 0.7, < 2)
8175
minitest (~> 5.1)
8276
tzinfo (~> 1.1)
83-
addressable (2.5.2)
84-
public_suffix (>= 2.0.2, < 4.0)
77+
addressable (2.7.0)
78+
public_suffix (>= 2.0.2, < 5.0)
8579
administrate (0.11.0)
8680
actionpack (>= 4.2, < 6.0)
8781
actionview (>= 4.2, < 6.0)
@@ -125,18 +119,18 @@ GEM
125119
browser (2.5.3)
126120
builder (3.2.3)
127121
byebug (10.0.2)
128-
capybara (3.12.0)
122+
capybara (3.29.0)
129123
addressable
130124
mini_mime (>= 0.1.3)
131125
nokogiri (~> 1.8)
132126
rack (>= 1.6.0)
133127
rack-test (>= 0.6.3)
134-
regexp_parser (~> 1.2)
128+
regexp_parser (~> 1.5)
135129
xpath (~> 3.2)
136130
capybara-email (3.0.1)
137131
capybara (>= 2.4, < 4.0)
138132
mail
139-
capybara-screenshot (1.0.22)
133+
capybara-screenshot (1.0.23)
140134
capybara (>= 1.0, < 4)
141135
launchy
142136
capybara-selenium (0.0.6)
@@ -379,7 +373,7 @@ GEM
379373
mime-types-data (~> 3.2015)
380374
mime-types-data (3.2018.0812)
381375
mimemagic (0.3.3)
382-
mini_mime (1.0.1)
376+
mini_mime (1.0.2)
383377
mini_portile2 (2.4.0)
384378
minitest (5.11.3)
385379
momentjs-rails (2.20.1)
@@ -454,7 +448,7 @@ GEM
454448
pry-byebug (3.6.0)
455449
byebug (~> 10.0)
456450
pry (~> 0.10)
457-
public_suffix (3.0.3)
451+
public_suffix (4.0.1)
458452
puma (3.12.0)
459453
pundit (2.0.1)
460454
activesupport (>= 3.0.0)
@@ -518,7 +512,7 @@ GEM
518512
execjs
519513
railties (>= 3.2)
520514
tilt
521-
regexp_parser (1.3.0)
515+
regexp_parser (1.6.0)
522516
request_store (1.4.1)
523517
rack (>= 1.4)
524518
responders (3.0.0)
@@ -717,7 +711,7 @@ DEPENDENCIES
717711
actiontext!
718712
active_link_to
719713
active_model_serializers
720-
activestorage-openstack!
714+
activestorage-openstack
721715
administrate
722716
after_party
723717
anchored
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
.groupe-instructeur {
2+
.actions {
3+
width: 200px;
4+
text-align: center;
5+
}
6+
}

app/assets/stylesheets/new_design/utils.scss

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
@import "colors";
2+
@import "constants";
23

34
.pull-left {
45
float: left;
@@ -48,3 +49,7 @@
4849
background: $orange-bg;
4950
color: $black;
5051
}
52+
53+
.mt-2 {
54+
margin-top: 2 * $default-spacer;
55+
}

app/controllers/concerns/create_avis_concern.rb

Lines changed: 27 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -10,28 +10,41 @@ def create_avis_from_params(dossier, confidentiel = false)
1010
# the :emails parameter is a 1-element array.
1111
# Hence the call to first
1212
# https://github.com/rails/rails/issues/17225
13-
emails = create_avis_params[:emails].first.split(',').map(&:strip)
13+
expert_emails = create_avis_params[:emails].first.split(',').map(&:strip)
14+
allowed_dossiers = [dossier]
15+
16+
if create_avis_params[:invite_linked_dossiers].present?
17+
allowed_dossiers += dossier.linked_dossiers
18+
end
1419

1520
create_results = Avis.create(
16-
emails.map do |email|
17-
{
18-
email: email,
19-
introduction: create_avis_params[:introduction],
20-
claimant: current_instructeur,
21-
dossier: dossier,
22-
confidentiel: confidentiel
23-
}
21+
expert_emails.flat_map do |email|
22+
allowed_dossiers.map do |dossier|
23+
{
24+
email: email,
25+
introduction: create_avis_params[:introduction],
26+
claimant: current_instructeur,
27+
dossier: dossier,
28+
confidentiel: confidentiel
29+
}
30+
end
2431
end
2532
)
2633

2734
persisted, failed = create_results.partition(&:persisted?)
2835

2936
if persisted.any?
30-
sent_emails_addresses = persisted.map(&:email_to_display).join(", ")
31-
flash.notice = "Une demande d'avis a été envoyée à #{sent_emails_addresses}"
37+
sent_emails_addresses = []
3238
persisted.each do |avis|
33-
dossier.demander_un_avis!(avis)
39+
avis.dossier.demander_un_avis!(avis)
40+
41+
if avis.dossier == dossier
42+
AvisMailer.avis_invitation(avis).deliver_later
43+
sent_emails_addresses << avis.email_to_display
44+
end
3445
end
46+
47+
flash.notice = "Une demande d'avis a été envoyée à #{sent_emails_addresses.uniq.join(", ")}"
3548
end
3649

3750
if failed.any?
@@ -41,13 +54,13 @@ def create_avis_from_params(dossier, confidentiel = false)
4154

4255
# When an error occurs, return the avis back to the controller
4356
# to give the user a chance to correct and resubmit
44-
Avis.new(create_avis_params.merge(emails: [failed.map(&:email).join(", ")]))
57+
Avis.new(create_avis_params.merge(emails: [failed.map(&:email).uniq.join(", ")]))
4558
else
4659
nil
4760
end
4861
end
4962

5063
def create_avis_params
51-
params.require(:avis).permit(:introduction, :confidentiel, emails: [])
64+
params.require(:avis).permit(:introduction, :confidentiel, :invite_linked_dossiers, emails: [])
5265
end
5366
end

app/controllers/instructeurs/procedures_controller.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -264,7 +264,7 @@ def procedure
264264
end
265265

266266
def ensure_ownership!
267-
if !procedure.defaut_groupe_instructeur.instructeurs.include?(current_instructeur)
267+
if !current_instructeur.procedures.include?(procedure)
268268
flash[:alert] = "Vous n'avez pas accès à cette démarche"
269269
redirect_to root_path
270270
end
Lines changed: 145 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,145 @@
1+
module NewAdministrateur
2+
class GroupeInstructeursController < AdministrateurController
3+
ITEMS_PER_PAGE = 25
4+
5+
def index
6+
@procedure = procedure
7+
8+
@groupes_instructeurs = paginated_groupe_instructeurs
9+
end
10+
11+
def show
12+
@procedure = procedure
13+
@groupe_instructeur = groupe_instructeur
14+
@instructeurs = paginated_instructeurs
15+
end
16+
17+
def create
18+
@groupe_instructeur = procedure
19+
.groupe_instructeurs
20+
.new(label: label, instructeurs: [current_administrateur.instructeur])
21+
22+
if @groupe_instructeur.save
23+
redirect_to procedure_groupe_instructeur_path(procedure, @groupe_instructeur),
24+
notice: "Le groupe d’instructeurs « #{label} » a été créé."
25+
else
26+
@procedure = procedure
27+
@groupes_instructeurs = paginated_groupe_instructeurs
28+
29+
flash[:alert] = "le nom « #{label} » est déjà pris par un autre groupe."
30+
render :index
31+
end
32+
end
33+
34+
def update
35+
@groupe_instructeur = groupe_instructeur
36+
37+
if @groupe_instructeur.update(label: label)
38+
redirect_to procedure_groupe_instructeur_path(procedure, groupe_instructeur),
39+
notice: "Le nom est à présent « #{label} »."
40+
else
41+
@procedure = procedure
42+
@instructeurs = paginated_instructeurs
43+
44+
flash[:alert] = "le nom « #{label} » est déjà pris par un autre groupe."
45+
render :show
46+
end
47+
end
48+
49+
def add_instructeur
50+
@instructeur = Instructeur.find_by(email: instructeur_email) ||
51+
create_instructeur(instructeur_email)
52+
53+
if groupe_instructeur.instructeurs.include?(@instructeur)
54+
flash[:alert] = "L’instructeur « #{instructeur_email} » est déjà dans le groupe."
55+
56+
else
57+
groupe_instructeur.instructeurs << @instructeur
58+
flash[:notice] = "L’instructeur « #{instructeur_email} » a été affecté au groupe."
59+
GroupeInstructeurMailer
60+
.add_instructeur(groupe_instructeur, @instructeur, current_user.email)
61+
.deliver_later
62+
end
63+
64+
redirect_to procedure_groupe_instructeur_path(procedure, groupe_instructeur)
65+
end
66+
67+
def remove_instructeur
68+
if groupe_instructeur.instructeurs.one?
69+
flash[:alert] = "Suppression impossible : il doit y avoir au moins un instructeur dans le groupe"
70+
71+
else
72+
@instructeur = Instructeur.find(instructeur_id)
73+
groupe_instructeur.instructeurs.destroy(@instructeur)
74+
flash[:notice] = "L’instructeur « #{@instructeur.email} » a été retiré du groupe."
75+
GroupeInstructeurMailer
76+
.remove_instructeur(groupe_instructeur, @instructeur, current_user.email)
77+
.deliver_later
78+
end
79+
80+
redirect_to procedure_groupe_instructeur_path(procedure, groupe_instructeur)
81+
end
82+
83+
def update_routing_criteria_name
84+
procedure.update!(routing_criteria_name: routing_criteria_name)
85+
86+
redirect_to procedure_groupe_instructeurs_path(procedure),
87+
notice: "Le libellé est maintenant « #{procedure.routing_criteria_name} »."
88+
end
89+
90+
private
91+
92+
def create_instructeur(email)
93+
user = User.create_or_promote_to_instructeur(
94+
email,
95+
SecureRandom.hex,
96+
administrateurs: [current_administrateur]
97+
)
98+
user.invite!
99+
user.instructeur
100+
end
101+
102+
def procedure
103+
current_administrateur
104+
.procedures
105+
.includes(:groupe_instructeurs)
106+
.find(params[:procedure_id])
107+
end
108+
109+
def groupe_instructeur
110+
procedure.groupe_instructeurs.find(params[:id])
111+
end
112+
113+
def instructeur_email
114+
params[:instructeur][:email].strip.downcase
115+
end
116+
117+
def instructeur_id
118+
params[:instructeur][:id]
119+
end
120+
121+
def label
122+
params[:groupe_instructeur][:label]
123+
end
124+
125+
def paginated_groupe_instructeurs
126+
procedure
127+
.groupe_instructeurs
128+
.page(params[:page])
129+
.per(ITEMS_PER_PAGE)
130+
.order(:label)
131+
end
132+
133+
def paginated_instructeurs
134+
groupe_instructeur
135+
.instructeurs
136+
.page(params[:page])
137+
.per(ITEMS_PER_PAGE)
138+
.order(:email)
139+
end
140+
141+
def routing_criteria_name
142+
params[:procedure][:routing_criteria_name]
143+
end
144+
end
145+
end

app/graphql/schema.graphql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -538,7 +538,7 @@ enum TypeDeChamp {
538538
multiple_drop_down_list
539539

540540
"""
541-
Nombre entier
541+
Nombre
542542
"""
543543
number
544544

app/helpers/dossier_link_helper.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
module DossierLinkHelper
22
def dossier_linked_path(user, dossier)
33
if user.is_a?(Instructeur)
4-
if dossier.procedure.defaut_groupe_instructeur.instructeurs.include?(user)
4+
if user.groupe_instructeurs.include?(dossier.groupe_instructeur)
55
instructeur_dossier_path(dossier.procedure, dossier)
66
else
77
avis = dossier.avis.find_by(instructeur: user)

0 commit comments

Comments
 (0)