feat(instructeurs import): can import instructeurs even if procedure not published
This commit is contained in:
parent
59fe8b64c4
commit
af1fd34256
4 changed files with 32 additions and 42 deletions
|
@ -322,44 +322,42 @@ module Administrateurs
|
||||||
end
|
end
|
||||||
|
|
||||||
def import
|
def import
|
||||||
if procedure.publiee_or_close?
|
if !CSV_ACCEPTED_CONTENT_TYPES.include?(csv_file.content_type) && !CSV_ACCEPTED_CONTENT_TYPES.include?(marcel_content_type)
|
||||||
if !CSV_ACCEPTED_CONTENT_TYPES.include?(csv_file.content_type) && !CSV_ACCEPTED_CONTENT_TYPES.include?(marcel_content_type)
|
flash[:alert] = "Importation impossible : veuillez importer un fichier CSV"
|
||||||
flash[:alert] = "Importation impossible : veuillez importer un fichier CSV"
|
|
||||||
|
|
||||||
elsif csv_file.size > CSV_MAX_SIZE
|
elsif csv_file.size > CSV_MAX_SIZE
|
||||||
flash[:alert] = "Importation impossible : le poids du fichier est supérieur à #{number_to_human_size(CSV_MAX_SIZE)}"
|
flash[:alert] = "Importation impossible : le poids du fichier est supérieur à #{number_to_human_size(CSV_MAX_SIZE)}"
|
||||||
|
|
||||||
else
|
else
|
||||||
file = csv_file.read
|
file = csv_file.read
|
||||||
base_encoding = CharlockHolmes::EncodingDetector.detect(file)
|
base_encoding = CharlockHolmes::EncodingDetector.detect(file)
|
||||||
|
|
||||||
csv_content = ACSV::CSV.new_for_ruby3(file.encode("UTF-8", base_encoding[:encoding], invalid: :replace, replace: ""), headers: true, header_converters: :downcase).map(&:to_h)
|
csv_content = ACSV::CSV.new_for_ruby3(file.encode("UTF-8", base_encoding[:encoding], invalid: :replace, replace: ""), headers: true, header_converters: :downcase).map(&:to_h)
|
||||||
|
|
||||||
if csv_content.first.has_key?("groupe") && csv_content.first.has_key?("email")
|
if csv_content.first.has_key?("groupe") && csv_content.first.has_key?("email")
|
||||||
groupes_emails = csv_content.map { |r| r.to_h.slice('groupe', 'email') }
|
groupes_emails = csv_content.map { |r| r.to_h.slice('groupe', 'email') }
|
||||||
|
|
||||||
added_instructeurs_by_group, invalid_emails = InstructeursImportService.import_groupes(procedure, groupes_emails)
|
added_instructeurs_by_group, invalid_emails = InstructeursImportService.import_groupes(procedure, groupes_emails)
|
||||||
|
|
||||||
added_instructeurs_by_group.each do |groupe, added_instructeurs|
|
added_instructeurs_by_group.each do |groupe, added_instructeurs|
|
||||||
if added_instructeurs.present?
|
|
||||||
notify_instructeurs(groupe, added_instructeurs)
|
|
||||||
end
|
|
||||||
flash_message_for_import(invalid_emails)
|
|
||||||
end
|
|
||||||
|
|
||||||
elsif csv_content.first.has_key?("email") && !csv_content.map(&:to_h).first.keys.many? && procedure.groupe_instructeurs.one?
|
|
||||||
instructors_emails = csv_content.map(&:to_h)
|
|
||||||
|
|
||||||
added_instructeurs, invalid_emails = InstructeursImportService.import_instructeurs(procedure, instructors_emails)
|
|
||||||
if added_instructeurs.present?
|
if added_instructeurs.present?
|
||||||
notify_instructeurs(groupe_instructeur, added_instructeurs)
|
notify_instructeurs(groupe, added_instructeurs)
|
||||||
end
|
end
|
||||||
flash_message_for_import(invalid_emails)
|
flash_message_for_import(invalid_emails)
|
||||||
else
|
|
||||||
flash_message_for_invalid_csv
|
|
||||||
end
|
end
|
||||||
redirect_to admin_procedure_groupe_instructeurs_path(procedure)
|
|
||||||
|
elsif csv_content.first.has_key?("email") && !csv_content.map(&:to_h).first.keys.many? && procedure.groupe_instructeurs.one?
|
||||||
|
instructors_emails = csv_content.map(&:to_h)
|
||||||
|
|
||||||
|
added_instructeurs, invalid_emails = InstructeursImportService.import_instructeurs(procedure, instructors_emails)
|
||||||
|
if added_instructeurs.present?
|
||||||
|
notify_instructeurs(groupe_instructeur, added_instructeurs)
|
||||||
|
end
|
||||||
|
flash_message_for_import(invalid_emails)
|
||||||
|
else
|
||||||
|
flash_message_for_invalid_csv
|
||||||
end
|
end
|
||||||
|
redirect_to admin_procedure_groupe_instructeurs_path(procedure)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -5,19 +5,13 @@
|
||||||
= t(".csv_import.#{key}.title")
|
= t(".csv_import.#{key}.title")
|
||||||
.fr-collapse#accordion-106
|
.fr-collapse#accordion-106
|
||||||
- csv_max_size = Administrateurs::GroupeInstructeursController::CSV_MAX_SIZE
|
- csv_max_size = Administrateurs::GroupeInstructeursController::CSV_MAX_SIZE
|
||||||
- if procedure.publiee_or_close?
|
%p.notice
|
||||||
%p.notice
|
= t(".csv_import.#{key}.notice_1_html", csv_max_size: number_to_human_size(csv_max_size))
|
||||||
= t(".csv_import.#{key}.notice_1_html", csv_max_size: number_to_human_size(csv_max_size))
|
%p.notice
|
||||||
%p.notice
|
= t(".csv_import.#{key}.notice_2")
|
||||||
= t(".csv_import.#{key}.notice_2")
|
= form_tag import_admin_procedure_groupe_instructeurs_path(procedure), method: :post, multipart: true, class: "mt-4 form flex justify-between align-center" do
|
||||||
= form_tag import_admin_procedure_groupe_instructeurs_path(procedure), method: :post, multipart: true, class: "mt-4 form flex justify-between align-center" do
|
= file_field_tag :csv_file, required: true, accept: 'text/csv', size: "1"
|
||||||
= file_field_tag :csv_file, required: true, accept: 'text/csv', size: "1"
|
= submit_tag t('.csv_import.import_file'), class: 'fr-btn fr-btn--secondary', data: { disable_with: "Envoi...", confirm: t('.csv_import.import_file_alert') }
|
||||||
= submit_tag t('.csv_import.import_file'), class: 'fr-btn fr-btn--secondary', data: { disable_with: "Envoi...", confirm: t('.csv_import.import_file_alert') }
|
|
||||||
- else
|
|
||||||
%p.mt-4.form.font-weight-bold.mb-2.text-lg
|
|
||||||
= t(".csv_import.#{key}.title")
|
|
||||||
%p.notice
|
|
||||||
= t('.csv_import.import_file_procedure_not_published')
|
|
||||||
- if procedure.groupe_instructeurs.many?
|
- if procedure.groupe_instructeurs.many?
|
||||||
.flex.justify-between.align-center.mt-4
|
.flex.justify-between.align-center.mt-4
|
||||||
%div
|
%div
|
||||||
|
|
|
@ -32,7 +32,6 @@ en:
|
||||||
csv_import:
|
csv_import:
|
||||||
import_file: Import file
|
import_file: Import file
|
||||||
import_file_alert: All instructors added to the procedure will be notified by email. Do you want to continue?
|
import_file_alert: All instructors added to the procedure will be notified by email. Do you want to continue?
|
||||||
import_file_procedure_not_published: CSV file import is available once the procedure is published
|
|
||||||
groupes:
|
groupes:
|
||||||
title: Bulk Import / Export
|
title: Bulk Import / Export
|
||||||
notice_1_html: For the import, your csv file must have 2 columns (Group, Email) and be comma separated (<a href=/csv/en/import-groupe-test.csv>example file</a>). The file size must be less than %{csv_max_size}.
|
notice_1_html: For the import, your csv file must have 2 columns (Group, Email) and be comma separated (<a href=/csv/en/import-groupe-test.csv>example file</a>). The file size must be less than %{csv_max_size}.
|
||||||
|
|
|
@ -39,7 +39,6 @@ fr:
|
||||||
csv_import:
|
csv_import:
|
||||||
import_file: Importer le fichier
|
import_file: Importer le fichier
|
||||||
import_file_alert: Tous les instructeurs ajoutés à la procédure vont être notifiés par email. Voulez-vous continuer ?
|
import_file_alert: Tous les instructeurs ajoutés à la procédure vont être notifiés par email. Voulez-vous continuer ?
|
||||||
import_file_procedure_not_published: L’import par fichier CSV est disponible une fois la démarche publiée
|
|
||||||
groupes:
|
groupes:
|
||||||
title: Import / Export en masse
|
title: Import / Export en masse
|
||||||
notice_1_html: Pour l’import, votre fichier csv doit comporter 2 colonnes (Groupe, Email) et être séparé par des virgules (<a href=/csv/fr/import-groupe-test.csv>exemple de fichier</a>). Le poids du fichier doit être inférieur à %{csv_max_size}.
|
notice_1_html: Pour l’import, votre fichier csv doit comporter 2 colonnes (Groupe, Email) et être séparé par des virgules (<a href=/csv/fr/import-groupe-test.csv>exemple de fichier</a>). Le poids du fichier doit être inférieur à %{csv_max_size}.
|
||||||
|
|
Loading…
Reference in a new issue