Skip to content

Commit 4cd0bdb

Browse files
authored
Merge pull request #13235 from demarche-numerique/push-nxrnqluquupo
feat: expose the champs changed in a correction via a traitement checkpoint
2 parents 811c26a + 116f8c4 commit 4cd0bdb

36 files changed

Lines changed: 1095 additions & 93 deletions
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
# frozen_string_literal: true
2+
3+
class Dossiers::ChangesComponent < ApplicationComponent
4+
attr_reader :changed_columns
5+
6+
def initialize(changed_columns:)
7+
@changed_columns = changed_columns
8+
end
9+
10+
def render? = changed_columns.present?
11+
12+
private
13+
14+
def change_content(changed_column)
15+
case changed_column.type
16+
when :geojson
17+
tag.em(t('.geojson_changed'))
18+
when :attachments
19+
attachments_change(changed_column)
20+
when :enums
21+
enums_change(changed_column)
22+
else
23+
simple_change(changed_column)
24+
end
25+
end
26+
27+
def simple_change(changed_column)
28+
value = changed_column.value
29+
return tag.em(t('.removed')) if value.nil?
30+
31+
tag.strong(format_value(changed_column, value))
32+
end
33+
34+
def format_value(column, value)
35+
case column.type
36+
when :boolean
37+
value ? t('utils.yes') : t('utils.no')
38+
when :enum
39+
column.label_for_value(value)
40+
when :date
41+
value = Date.parse(value) if value.is_a?(String)
42+
I18n.l(value, format: :short)
43+
when :datetime
44+
value = Time.zone.parse(value) if value.is_a?(String)
45+
I18n.l(value, format: :short_with_time)
46+
else
47+
value.to_s
48+
end
49+
end
50+
51+
def attachments_change(changed_column)
52+
current = attachment_filenames(changed_column.value)
53+
previous = attachment_filenames(changed_column.previous_value)
54+
55+
diff_list(added: current - previous, removed: previous - current)
56+
end
57+
58+
def enums_change(changed_column)
59+
current = Array(changed_column.value)
60+
previous = Array(changed_column.previous_value)
61+
62+
diff_list(
63+
added: (current - previous).map { changed_column.label_for_value(it) },
64+
removed: (previous - current).map { changed_column.label_for_value(it) }
65+
)
66+
end
67+
68+
def diff_list(added:, removed:)
69+
lines = []
70+
lines << diff_line(t('.added'), added) if added.present?
71+
lines << diff_line(t('.removed_values'), removed) if removed.present?
72+
return tag.em(t('.changed')) if lines.empty?
73+
74+
safe_join(lines, tag.br)
75+
end
76+
77+
def diff_line(label, values)
78+
safe_join([label, ' ', tag.strong(values.to_sentence)])
79+
end
80+
81+
def attachment_filenames(value)
82+
Array(value).map { it.blob.filename.to_s }
83+
end
84+
end
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
en:
2+
removed: The value has been removed
3+
changed: The value has been changed
4+
geojson_changed: The geographic area has been changed
5+
added: "Added:"
6+
removed_values: "Removed:"
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
fr:
2+
removed: La valeur a été supprimée
3+
changed: La valeur a été modifiée
4+
geojson_changed: La zone géographique a été modifiée
5+
added: "Ajouté :"
6+
removed_values: "Retiré :"
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<dl class="fr-mb-0">
2+
<% changed_columns.each do |changed_column| %>
3+
<dt><%= changed_column.label %> :</dt>
4+
<dd><%= change_content(changed_column) %></dd>
5+
<% end %>
6+
</dl>

app/controllers/users/dossiers_controller.rb

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -316,7 +316,6 @@ def submit_en_construction
316316

317317
if dossier.errors.blank? && dossier.can_passer_en_construction?
318318
dossier.submitted_with_france_connect = current_user.loged_in_with_france_connect.present?
319-
dossier.merge_user_buffer_stream!
320319
dossier.usager_submit_en_construction!
321320

322321
redirect_to dossier_path(dossier)

app/graphql/api/v2/schema.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,8 @@ def self.resolve_type(type_definition, object, ctx)
137137
Types::Columns::EnumColumnType,
138138
Types::Columns::EnumsColumnType,
139139
Types::Columns::IntegerColumnType,
140-
Types::Columns::TextColumnType
140+
Types::Columns::TextColumnType,
141+
Types::Columns::GeoJSONColumnType
141142

142143
def self.unauthorized_object(error)
143144
# Add a top-level error to the response instead of returning nil:

app/graphql/api/v2/stored_query.rb

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -778,6 +778,17 @@ def self.get(query_id)
778778
...FileFragment
779779
}
780780
}
781+
... on GeoJSONColumn {
782+
value {
783+
geometry @include(if: $includeGeometry) {
784+
type
785+
coordinates
786+
}
787+
properties {
788+
description
789+
}
790+
}
791+
}
781792
}
782793
GRAPHQL
783794

app/graphql/schema.graphql

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3379,6 +3379,35 @@ type GeoJSON {
33793379
type: String!
33803380
}
33813381

3382+
type GeoJSONColumn implements Column {
3383+
id: ID!
3384+
3385+
"""
3386+
Libellé de la colonne.
3387+
"""
3388+
label: String!
3389+
3390+
"""
3391+
La valeur de la colonne sous forme texte.
3392+
"""
3393+
stringValue: String
3394+
value: [GeoJSONFeature!]!
3395+
}
3396+
3397+
type GeoJSONFeature {
3398+
geometry: GeoJSONGeometry!
3399+
properties: GeoJSONFeatureProperties!
3400+
}
3401+
3402+
type GeoJSONFeatureProperties {
3403+
description: String
3404+
}
3405+
3406+
type GeoJSONGeometry {
3407+
coordinates: Coordinates!
3408+
type: String!
3409+
}
3410+
33823411
"""
33833412
Un groupe instructeur
33843413
"""
@@ -5396,6 +5425,10 @@ enum TitreIdentiteGrantType {
53965425
}
53975426

53985427
type Traitement {
5428+
"""
5429+
Liste des changements par colonne
5430+
"""
5431+
changedColumns: [Column!]!
53995432
dateTraitement: ISO8601DateTime!
54005433
emailAgentTraitant: String
54015434
event: TraitementEvent!

app/graphql/types/champ_type.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ def string_value
1919
def columns
2020
if object.repetition?
2121
[]
22+
elsif object.carte?
23+
object.type_de_champ.value_columns(procedure_id: object.procedure.id)
2224
else
2325
object.type_de_champ.columns(procedure_id: object.procedure.id)
2426
end

app/graphql/types/column_type.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@ def resolve_type(object, context)
4040
Types::Columns::EnumsColumnType
4141
when :attachments
4242
Types::Columns::AttachmentsColumnType
43+
when :geojson
44+
Types::Columns::GeoJSONColumnType
4345
else
4446
Types::Columns::TextColumnType
4547
end

0 commit comments

Comments
 (0)