Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ajoute l'import/export du champ metacompetence des questions #1902

Open
wants to merge 2 commits into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions app/admin/questionnaires.rb
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,9 @@ def export_questions
compressed_filestream = generate_zip_file(questionnaire.questions_par_type)

send_data compressed_filestream.read,
filename: "questionnaire_#{questionnaire.id}_export.zip",
filename: FichierHelper.nom_fichier_horodate(
"questionnaire_#{questionnaire.id}_export", 'zip'
),
type: 'application/zip'
end

Expand All @@ -71,7 +73,7 @@ def generate_zip_file(questions_par_type)
export =
ImportExport::Questions::ImportExportDonnees.new(questions: questions,
type: type).exporte_donnees
zip.put_next_entry("#{type}_questions_export.xls")
zip.put_next_entry(export[:filename])
zip.write export[:xls]
end
end.tap(&:rewind)
Expand Down
10 changes: 10 additions & 0 deletions app/models/fichier_helper.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# frozen_string_literal: true

class FichierHelper
class << self
def nom_fichier_horodate(titre, extension)
date = DateTime.current.strftime('%Y%m%d%H%M%S')
"#{date}-#{titre}.#{extension}"
end
end
end
5 changes: 0 additions & 5 deletions app/models/import_export/export_xls.rb
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,6 @@ def content_type_xls
'application/vnd.ms-excel'
end

def genere_fichier(titre)
date = DateTime.current.strftime('%Y%m%d')
"#{date}-#{titre}.xls"
end

def retourne_le_contenu_du_xls
file_contents = StringIO.new
@export.workbook.write file_contents
Expand Down
2 changes: 1 addition & 1 deletion app/models/import_export/questions/export.rb
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ def to_xls
end

def nom_du_fichier(type)
genere_fichier(type)
FichierHelper.nom_fichier_horodate(type, 'xls')
end

private
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
module ImportExport
module Questions
class Export
class QuestionClicDansImage < ImportExport::Questions::Export::QuestionAvecModaliteReponse
class QuestionClicDansImage < ImportExport::Questions::Export::QuestionTest
private

def remplis_champs
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
module ImportExport
module Questions
class Export
class QuestionClicDansTexte < ImportExport::Questions::Export::QuestionAvecModaliteReponse
class QuestionClicDansTexte < ImportExport::Questions::Export::QuestionTest
private

def remplis_champs
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
module ImportExport
module Questions
class Export
class QuestionGlisserDeposer < ImportExport::Questions::Export::QuestionAvecModaliteReponse
class QuestionGlisserDeposer < ImportExport::Questions::Export::QuestionTest
private

def remplis_champs
Expand Down
2 changes: 1 addition & 1 deletion app/models/import_export/questions/export/question_qcm.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
module ImportExport
module Questions
class Export
class QuestionQcm < ImportExport::Questions::Export::QuestionAvecModaliteReponse
class QuestionQcm < ImportExport::Questions::Export::QuestionTest
private

def remplis_champs
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
module ImportExport
module Questions
class Export
class QuestionSaisie < ImportExport::Questions::Export::QuestionAvecModaliteReponse
class QuestionSaisie < ImportExport::Questions::Export::QuestionTest
private

def remplis_champs
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,12 @@
module ImportExport
module Questions
class Export
class QuestionAvecModaliteReponse < ImportExport::Questions::Export
class QuestionTest < ImportExport::Questions::Export
private

def remplis_champs
col = super
@onglet.set_valeur(@ligne, col += 1, @question.metacompetence)
@onglet.set_valeur(@ligne, col += 1, @question.transcription_modalite_reponse&.ecrit)
@onglet.set_valeur(@ligne, col += 1, @question.transcription_modalite_reponse&.audio_url)
@onglet.set_valeur(@ligne, col += 1, @question.description)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
module ImportExport
module Questions
class Import
class QuestionClicDansImage < ImportExport::Questions::Import::QuestionAvecModaliteReponse
class QuestionClicDansImage < ImportExport::Questions::Import::QuestionTest
def initialize(headers_attendus)
super('QuestionClicDansImage', headers_attendus)
end
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
module ImportExport
module Questions
class Import
class QuestionClicDansTexte < ImportExport::Questions::Import::QuestionAvecModaliteReponse
class QuestionClicDansTexte < ImportExport::Questions::Import::QuestionTest
def initialize(headers_attendus)
super('QuestionClicDansTexte', headers_attendus)
end
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
module ImportExport
module Questions
class Import
class QuestionGlisserDeposer < ImportExport::Questions::Import::QuestionAvecModaliteReponse
class QuestionGlisserDeposer < ImportExport::Questions::Import::QuestionTest
def initialize(headers_attendus)
super('QuestionGlisserDeposer', headers_attendus)
end
Expand Down
2 changes: 1 addition & 1 deletion app/models/import_export/questions/import/question_qcm.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
module ImportExport
module Questions
class Import
class QuestionQcm < ImportExport::Questions::Import::QuestionAvecModaliteReponse
class QuestionQcm < ImportExport::Questions::Import::QuestionTest
def initialize(headers_attendus)
super('QuestionQcm', headers_attendus)
end
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
module ImportExport
module Questions
class Import
class QuestionSaisie < ImportExport::Questions::Import::QuestionAvecModaliteReponse
class QuestionSaisie < ImportExport::Questions::Import::QuestionTest
def initialize(headers_attendus)
super('QuestionSaisie', headers_attendus)
end
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,10 @@
module ImportExport
module Questions
class Import
class QuestionAvecModaliteReponse < ImportExport::Questions::Import
class QuestionTest < ImportExport::Questions::Import
def cree_ou_actualise_question(cellules)
question = super
question.update!(metacompetence: cellules.suivant)
cree_transcription(question.id, :modalite_reponse, cellules.suivant, cellules.suivant,
"#{cellules.cell(1)}_modalite_reponse")
question.update!(description: cellules.suivant,
Expand Down
14 changes: 7 additions & 7 deletions app/models/import_export/questions/import_export_donnees.rb
Original file line number Diff line number Diff line change
Expand Up @@ -9,17 +9,17 @@ class ImportExportDonnees
HEADERS_QCM = %i[type_qcm].freeze
HEADERS_SAISIE = %i[suffix_reponse reponse_placeholder type_saisie texte_a_trous].freeze
HEADERS_COMMUN = %i[libelle nom_technique illustration intitule_ecrit intitule_audio].freeze
HEADERS_MODALITE_REPONSE = %i[consigne_ecrit consigne_audio description
demarrage_audio_modalite_reponse].freeze
HEADERS_QUESTION_TEST = %i[metacompetence consigne_ecrit consigne_audio description
demarrage_audio_modalite_reponse].freeze
HEADERS_ATTENDUS = {
QuestionClicDansImage::QUESTION_TYPE =>
HEADERS_COMMUN + HEADERS_MODALITE_REPONSE + HEADERS_CLIC_DANS_IMAGE,
HEADERS_COMMUN + HEADERS_QUESTION_TEST + HEADERS_CLIC_DANS_IMAGE,
QuestionClicDansTexte::QUESTION_TYPE =>
HEADERS_COMMUN + HEADERS_MODALITE_REPONSE + HEADERS_CLIC_DANS_TEXTE,
HEADERS_COMMUN + HEADERS_QUESTION_TEST + HEADERS_CLIC_DANS_TEXTE,
QuestionGlisserDeposer::QUESTION_TYPE =>
HEADERS_COMMUN + HEADERS_MODALITE_REPONSE + HEADERS_GLISSER_DEPOSER,
QuestionQcm::QUESTION_TYPE => HEADERS_COMMUN + HEADERS_MODALITE_REPONSE + HEADERS_QCM,
QuestionSaisie::QUESTION_TYPE => HEADERS_COMMUN + HEADERS_MODALITE_REPONSE + HEADERS_SAISIE,
HEADERS_COMMUN + HEADERS_QUESTION_TEST + HEADERS_GLISSER_DEPOSER,
QuestionQcm::QUESTION_TYPE => HEADERS_COMMUN + HEADERS_QUESTION_TEST + HEADERS_QCM,
QuestionSaisie::QUESTION_TYPE => HEADERS_COMMUN + HEADERS_QUESTION_TEST + HEADERS_SAISIE,
QuestionSousConsigne::QUESTION_TYPE => HEADERS_COMMUN
}.freeze
IMPORTEURS = {
Expand Down
2 changes: 1 addition & 1 deletion app/models/restitution/positionnement/export.rb
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ def nom_du_fichier
evaluation = @partie.evaluation
code_de_campagne = evaluation.campagne.code.parameterize
nom_de_levaluation = evaluation.nom.parameterize.first(15)
genere_fichier("#{nom_de_levaluation}-#{code_de_campagne}")
FichierHelper.nom_fichier_horodate("#{nom_de_levaluation}-#{code_de_campagne}", 'xls')
end

private
Expand Down
14 changes: 14 additions & 0 deletions spec/models/fichier_helper_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# frozen_string_literal: true

require 'rails_helper'

describe FichierHelper do
describe '#nom_fichier_horodate' do
it 'genere un nom de fichier horodaté' do
Timecop.freeze(Time.zone.local(2025, 2, 28, 1, 2, 3)) do
expect(described_class.nom_fichier_horodate('titre', 'extention'))
.to eq('20250228010203-titre.extention')
end
end
end
end
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,8 @@

let(:type) { 'QuestionClicDansImage' }
let(:question) do
create(:question_clic_dans_image, description: 'Ceci est une description',
create(:question_clic_dans_image, metacompetence: 'operations_soustraction',
description: 'Ceci est une description',
nom_technique: 'clic')
end
let!(:intitule) do
Expand Down Expand Up @@ -36,11 +37,12 @@
expect(ligne[2]).to be_nil
expect(ligne[3]).to eq('Ceci est un intitulé')
expect(ligne[4]).to eq(intitule.audio_url)
expect(ligne[5]).to eq('Ceci est une consigne')
expect(ligne[6]).to eq(consigne.audio_url)
expect(ligne[7]).to eq('Ceci est une description')
expect(ligne[8]).to be(false)
expect(ligne[9]).to eq(question.zone_cliquable_url)
expect(ligne[10]).to eq(question.image_au_clic_url)
expect(ligne[5]).to eq('operations_soustraction')
expect(ligne[6]).to eq('Ceci est une consigne')
expect(ligne[7]).to eq(consigne.audio_url)
expect(ligne[8]).to eq('Ceci est une description')
expect(ligne[9]).to be(false)
expect(ligne[10]).to eq(question.zone_cliquable_url)
expect(ligne[11]).to eq(question.image_au_clic_url)
end
end
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,8 @@

let(:type) { 'QuestionClicDansTexte' }
let(:question) do
create(:question_clic_dans_image, description: 'Ceci est une description',
create(:question_clic_dans_image, metacompetence: 'operations_soustraction',
description: 'Ceci est une description',
nom_technique: 'clic')
end
let!(:intitule) do
Expand Down Expand Up @@ -36,10 +37,11 @@
expect(ligne[2]).to be_nil
expect(ligne[3]).to eq('Ceci est un intitulé')
expect(ligne[4]).to eq(intitule.audio_url)
expect(ligne[5]).to eq('Ceci est une consigne')
expect(ligne[6]).to eq(consigne.audio_url)
expect(ligne[7]).to eq('Ceci est une description')
expect(ligne[8]).to be(false)
expect(ligne[9]).to eq(question.texte_sur_illustration)
expect(ligne[5]).to eq('operations_soustraction')
expect(ligne[6]).to eq('Ceci est une consigne')
expect(ligne[7]).to eq(consigne.audio_url)
expect(ligne[8]).to eq('Ceci est une description')
expect(ligne[9]).to be(false)
expect(ligne[10]).to eq(question.texte_sur_illustration)
end
end
Original file line number Diff line number Diff line change
Expand Up @@ -28,16 +28,16 @@
ligne = worksheet.row(1)

expect(ligne[2]).to eq(question.illustration_url(variant: nil))
expect(ligne[8]).to be(false)
expect(ligne[9]).to eq(question.zone_depot_url)
expect(ligne[10]).to eq(question.orientation)
expect(ligne[11]).to eq(reponse.nom_technique)
expect(ligne[12]).to eq(reponse.position_client.to_s)
expect(ligne[13]).to eq(reponse.type_choix)
expect(ligne[14]).to eq(reponse.illustration_url.to_s)
expect(ligne[15]).to eq(reponse2.nom_technique)
expect(ligne[16]).to eq(reponse2.position_client.to_s)
expect(ligne[17]).to eq(reponse2.type_choix)
expect(ligne[18]).to eq(reponse2.illustration_url.to_s)
expect(ligne[9]).to be(false)
expect(ligne[10]).to eq(question.zone_depot_url)
expect(ligne[11]).to eq(question.orientation)
expect(ligne[12]).to eq(reponse.nom_technique)
expect(ligne[13]).to eq(reponse.position_client.to_s)
expect(ligne[14]).to eq(reponse.type_choix)
expect(ligne[15]).to eq(reponse.illustration_url.to_s)
expect(ligne[16]).to eq(reponse2.nom_technique)
expect(ligne[17]).to eq(reponse2.position_client.to_s)
expect(ligne[18]).to eq(reponse2.type_choix)
expect(ligne[19]).to eq(reponse2.illustration_url.to_s)
end
end
26 changes: 13 additions & 13 deletions spec/models/import_export/questions/export/question_qcm_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
include_context 'export'

let(:type) { 'QuestionQcm' }
let(:question) { create(:question_qcm) }
let(:question) { create(:question_qcm, metacompetence: 'operations_addition') }
let!(:reponse) { create(:choix, :bon, :avec_illustration, question_id: question.id) }
let!(:reponse2) { create(:choix, :mauvais, :avec_illustration, question_id: question.id) }

Expand All @@ -26,17 +26,17 @@

it 'génére un fichier xls avec les détails de la question' do
ligne = worksheet.row(1)
expect(ligne[8]).to be(false)
expect(ligne[9]).to eq(question.type_qcm)
expect(ligne[10]).to eq(reponse.intitule)
expect(ligne[11]).to eq(reponse.nom_technique)
expect(ligne[12]).to eq(reponse.type_choix)
expect(ligne[13]).to eq(reponse.audio_url)
expect(ligne[14]).to eq(reponse.illustration_url)
expect(ligne[15]).to eq(reponse2.intitule)
expect(ligne[16]).to eq(reponse2.nom_technique)
expect(ligne[17]).to eq(reponse2.type_choix)
expect(ligne[18]).to eq(reponse2.audio_url)
expect(ligne[19]).to eq(reponse2.illustration_url)
expect(ligne[9]).to be(false)
expect(ligne[10]).to eq(question.type_qcm)
expect(ligne[11]).to eq(reponse.intitule)
expect(ligne[12]).to eq(reponse.nom_technique)
expect(ligne[13]).to eq(reponse.type_choix)
expect(ligne[14]).to eq(reponse.audio_url)
expect(ligne[15]).to eq(reponse.illustration_url)
expect(ligne[16]).to eq(reponse2.intitule)
expect(ligne[17]).to eq(reponse2.nom_technique)
expect(ligne[18]).to eq(reponse2.type_choix)
expect(ligne[19]).to eq(reponse2.audio_url)
expect(ligne[20]).to eq(reponse2.illustration_url)
end
end
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,12 @@

it 'génére un fichier xls avec les détails de la question' do
ligne = worksheet.row(1)
expect(ligne[8]).to be(false)
expect(ligne[9]).to eq(question.suffix_reponse)
expect(ligne[10]).to eq(question.reponse_placeholder)
expect(ligne[11]).to eq(question.type_saisie)
expect(ligne[12]).to eq(question.texte_a_trous)
expect(ligne[13]).to eq(question.reponses.last.intitule)
expect(ligne[14]).to eq(question.reponses.last.nom_technique)
expect(ligne[9]).to be(false)
expect(ligne[10]).to eq(question.suffix_reponse)
expect(ligne[11]).to eq(question.reponse_placeholder)
expect(ligne[12]).to eq(question.type_saisie)
expect(ligne[13]).to eq(question.texte_a_trous)
expect(ligne[14]).to eq(question.reponses.last.intitule)
expect(ligne[15]).to eq(question.reponses.last.nom_technique)
end
end
4 changes: 2 additions & 2 deletions spec/models/import_export/questions/export_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@

describe '#nom_du_fichier' do
it 'genere le nom du fichier' do
Timecop.freeze(Date.new(2025, 2, 28)) do
nom_du_fichier_attendu = '20250228-QuestionQcm.xls'
Timecop.freeze(Time.zone.local(2025, 2, 28, 1, 2, 3)) do
nom_du_fichier_attendu = '20250228010203-QuestionQcm.xls'
expect(response_service.nom_du_fichier('QuestionQcm')).to eq(nom_du_fichier_attendu)
end
end
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,12 @@
let!(:question) { create(:question_clic_dans_image) }

it 'exporte les données' do
date = DateTime.current.strftime('%Y%m%d')
nom_du_fichier_attendu = "#{date}-#{question.type}.xls"
expect(service.exporte_donnees[:xls]).not_to be_nil
expect(service.exporte_donnees[:content_type]).to eq 'application/vnd.ms-excel'
expect(service.exporte_donnees[:filename]).to eq nom_du_fichier_attendu
Timecop.freeze(Time.zone.local(2025, 2, 28, 1, 2, 3)) do
nom_du_fichier_attendu = '20250228010203-QuestionClicDansImage.xls'
expect(service.exporte_donnees[:xls]).not_to be_nil
expect(service.exporte_donnees[:content_type]).to eq 'application/vnd.ms-excel'
expect(service.exporte_donnees[:filename]).to eq nom_du_fichier_attendu
end
end
end

Expand Down
Loading