diff --git a/app/components/export_template/champs_component/champs_component.html.haml b/app/components/export_template/champs_component/champs_component.html.haml index 4ccbe41de..ea6f603cc 100644 --- a/app/components/export_template/champs_component/champs_component.html.haml +++ b/app/components/export_template/champs_component/champs_component.html.haml @@ -1,5 +1,5 @@ %fieldset.fr-fieldset{ id: "#{component_prefix}-fieldset", data: { controller: 'checkbox-select-all' } } - %legend.fr-fieldset__legend--regular.fr-fieldset__legend + %legend.fr-fieldset__legend--regular.fr-fieldset__legend.fr-h5.fr-pb-0 = title .checkbox-group-bordered.fr-mx-1w.fr-mb-2w .fr-fieldset__element.fr-background-contrast--grey.fr-py-2w.fr-px-4w @@ -16,14 +16,8 @@ .fieldset-bordered.fr-ml-3v - grouped_columns.each do |exported_column| .fr-fieldset__element.fr-px-3v - .fr-checkbox-group - - id = sanitize_to_id(field_id('export_template', 'exported_columns', exported_column.id)) - = check_box_tag field_name('export_template', 'exported_columns', ''), exported_column.id, export_template.exported_columns.map(&:column).include?(exported_column.column), class: 'fr-checkbox', id: id, data: { "checkbox-select-all-target": 'checkbox' } - = label_tag id, historical_libelle(exported_column.column) + .fr-checkbox-group= render ExportTemplate::CheckboxComponent.new(export_template:, exported_column:) - else - grouped_columns.each do |exported_column| .fr-fieldset__element.fr-px-4w - .fr-checkbox-group - - id = sanitize_to_id(field_id('export_template', 'exported_columns', exported_column.id)) - = check_box_tag field_name('export_template', 'exported_columns', ''), exported_column.id, export_template.exported_columns.map(&:column).include?(exported_column.column), class: 'fr-checkbox', id: id, data: { "checkbox-select-all-target": 'checkbox' } - = label_tag id, historical_libelle(exported_column.column) + .fr-checkbox-group= render ExportTemplate::CheckboxComponent.new(export_template:, exported_column:) diff --git a/app/components/export_template/checkbox_component.rb b/app/components/export_template/checkbox_component.rb new file mode 100644 index 000000000..c5617e71d --- /dev/null +++ b/app/components/export_template/checkbox_component.rb @@ -0,0 +1,32 @@ +# frozen_string_literal: true + +class ExportTemplate::CheckboxComponent < ApplicationComponent + attr_reader :exported_column, :export_template + + def initialize(export_template:, exported_column:) + @export_template = export_template + @exported_column = exported_column + end + + def call + safe_join([ + check_box, + label_tag(label_id, exported_column.libelle) + ]) + end + + def check_box + check_box_tag( + 'export_template[exported_columns][]', + exported_column.id, + export_template.in_export?(exported_column), + class: 'fr-checkbox', + id: sanitize_to_id(label_id), # sanitize_to_id is used by rails in label_tag + data: { "checkbox-select-all-target": 'checkbox' } + ) + end + + def label_id + exported_column.column.id + end +end diff --git a/app/views/instructeurs/export_templates/_checkbox_group.html.haml b/app/views/instructeurs/export_templates/_checkbox_group.html.haml index f6cfd0c23..80626d857 100644 --- a/app/views/instructeurs/export_templates/_checkbox_group.html.haml +++ b/app/views/instructeurs/export_templates/_checkbox_group.html.haml @@ -1,5 +1,5 @@ %fieldset.fr-fieldset{ id: "#{title.parameterize}-fieldset", data: { controller: 'checkbox-select-all' } } - %legend.fr-fieldset__legend--regular.fr-fieldset__legend + %legend.fr-fieldset__legend--regular.fr-fieldset__legend.fr-h5.fr-pb-0 = title .checkbox-group-bordered.fr-mx-1w.fr-mb-2w @@ -11,6 +11,4 @@ - all_columns.each do |column| .fr-fieldset__element.fr-px-4w .fr-checkbox-group - - id = sanitize_to_id(field_id('export_template', 'exported_columns', { id: column.id, libelle: column.label, parent: nil }.to_json)) - = check_box_tag field_name('export_template', 'exported_columns', ''), { id: column.id, libelle: column.label, parent: nil }.to_json, checked_columns.map(&:column).include?(column), class: 'fr-checkbox', id: id, data: { "checkbox-select-all-target": 'checkbox' } - = label_tag id, column.label + = render ExportTemplate::CheckboxComponent.new(export_template:, exported_column: ExportedColumn.new(libelle: column.label, column:)) diff --git a/app/views/instructeurs/export_templates/_form_tabular.html.haml b/app/views/instructeurs/export_templates/_form_tabular.html.haml index 0da716e9e..36712f6f0 100644 --- a/app/views/instructeurs/export_templates/_form_tabular.html.haml +++ b/app/views/instructeurs/export_templates/_form_tabular.html.haml @@ -28,30 +28,30 @@ %fieldset.fr-fieldset.fr-fieldset--inline %legend#radio-inline-legend.fr-fieldset__legend.fr-text--regular Format export + = asterisk .fr-fieldset__element.fr-fieldset__element--inline - .fr-radio-group - = f.radio_button :kind, "ods", id: "ods" - %label.fr-label{ for: "ods" } ods .fr-radio-group = f.radio_button :kind, "xlsx", id: "xlsx" %label.fr-label{ for: "xlsx" } xlsx + .fr-radio-group + = f.radio_button :kind, "ods", id: "ods" + %label.fr-label{ for: "ods" } ods .fr-radio-group = f.radio_button :kind, "csv", id: "csv" %label.fr-label{ for: "csv" } csv %h2 Contenu de l'export - = render partial: 'checkbox_group', locals: { title: 'Colonnes Usager', all_columns: @export_template.procedure.usager_columns_for_export, checked_columns: @export_template.exported_columns } - = render partial: 'checkbox_group', locals: { title: 'Colonnes Infos dossier', all_columns: @export_template.procedure.dossier_columns_for_export, checked_columns: @export_template.exported_columns } - = render ExportTemplate::ChampsComponent.new("Informations formulaire", @export_template, @types_de_champ_public) - = render ExportTemplate::ChampsComponent.new("Informations annotations", @export_template, @types_de_champ_private) if @types_de_champ_private.any? + %p Sélectionnez les colonnes que vous souhaitez voir affichées dans le tableau de votre export. + + = render partial: 'checkbox_group', locals: { title: 'Informations usager', all_columns: @export_template.procedure.usager_columns_for_export, export_template: @export_template } + = render partial: 'checkbox_group', locals: { title: 'Informations dossier', all_columns: @export_template.procedure.dossier_columns_for_export, export_template: @export_template } + = render ExportTemplate::ChampsComponent.new("Formulaire usager", @export_template, @types_de_champ_public) + = render ExportTemplate::ChampsComponent.new("Annotations privées", @export_template, @types_de_champ_private) if @types_de_champ_private.any? .fixed-footer .fr-container %ul.fr-btns-group.fr-btns-group--inline-md - %li - = f.submit "Enregistrer", class: "fr-btn" %li = link_to "Annuler", instructeur_procedure_path(@procedure), class: "fr-btn fr-btn--secondary" - - if @export_template.persisted? - %li - = link_to "Supprimer", [:instructeur, @procedure, @export_template], method: :delete, data: { confirm: "Voulez-vous vraiment supprimer ce modèle ? Il sera supprimé pour tous les instructeurs du groupe"}, class: "fr-btn fr-btn--secondary" + %li + = f.submit "Enregistrer", class: "fr-btn", data: @export_template.persisted? ? { confirm: t('.warning') } : {} diff --git a/spec/models/export_template_tabular_spec.rb b/spec/models/export_template_tabular_spec.rb index 56518ae1e..4751ffdd2 100644 --- a/spec/models/export_template_tabular_spec.rb +++ b/spec/models/export_template_tabular_spec.rb @@ -82,4 +82,63 @@ describe ExportTemplate do end end end + + describe 'dossier_exported_columns' do + context 'when exported_columns is empty' do + it 'returns an empty array' do + expect(export_template.dossier_exported_columns).to eq([]) + end + end + + context 'when exported_columns is not empty' do + before do + export_template.exported_columns = [ + ExportedColumn.new(libelle: 'Colonne usager', column: procedure.find_column(label: "Email")), + ExportedColumn.new(libelle: 'Ça va ?', column: procedure.find_column(label: "Ca va ?")) + ] + end + it 'returns all columns except tdc columns' do + expect(export_template.dossier_exported_columns.size).to eq(1) # exclude tdc + expect(export_template.dossier_exported_columns.first.libelle).to eq("Colonne usager") + end + end + end + + describe 'columns_for_stable_id' do + before do + export_template.exported_columns = procedure.published_revision.types_de_champ.first.columns(procedure: procedure).map do |column| + ExportedColumn.new(libelle: column.label, column:) + end + end + context 'when procedure has a TypeDeChamp::Commune' do + let(:types_de_champ_public) do + [ + { type: :communes, libelle: "Commune", mandatory: true, stable_id: 17 } + ] + end + it 'is able to resolve stable_id' do + expect(export_template.columns_for_stable_id(17).size).to eq(3) + end + end + context 'when procedure has a TypeDeChamp::Siret' do + let(:types_de_champ_public) do + [ + { type: :siret, libelle: 'siret', stable_id: 20 } + ] + end + it 'is able to resolve stable_id' do + expect(export_template.columns_for_stable_id(20).size).to eq(5) + end + end + context 'when procedure has a TypeDeChamp::Text' do + let(:types_de_champ_public) do + [ + { type: :text, libelle: "Text", mandatory: true, stable_id: 15 } + ] + end + it 'is able to resolve stable_id' do + expect(export_template.columns_for_stable_id(15).size).to eq(1) + end + end + end end