demarches-normaliennes/app/tasks/maintenance/update_draft_revision_type_de_champs_task.rb

41 lines
1.7 KiB
Ruby

# frozen_string_literal: true
module Maintenance
class UpdateDraftRevisionTypeDeChampsTask < MaintenanceTasks::Task
csv_collection
# CSV structure:
# demarche_id, id, new_libelle, new_description, new_required, new_position
# 1234, QnbaF==, Nouveau libellé, Nouvelle description, true, 0
# 1234, QNbZ0==, Un autre libellé, Encore une desc,, 1
#
# Remarques:
# - Toutes les valeurs sont écrasées sur la draft revision
# - Les positions doivent être dans l'ordre, sans trou, en suivant l'ordre de l'éditeur du formulair !
# - Les positions commencent à 0, comme un index
# - La position de l'ensemble du bloc répétable est celle du "parent"
# - Les champs des blocs répétables suivent la position du parent (c'est notre code qui la réinitialise à 0)
# - Ne permet pas de "sortir" des champs de blocs répétables, ni en ajouter (on peut juste réorganiser à l'intérieur du bloc)
def process(row)
procedure_id = row["demarche_id"]
typed_id = row["id"]
Rails.logger.info { "#{self.class.name}: Processing #{row.inspect}" }
revision = Procedure.find(procedure_id).draft_revision
stable_id = revision.types_de_champ.find { _1.to_typed_id == typed_id }&.stable_id
fail "TypeDeChamp not found ! #{typed_id}" if stable_id.nil?
tdc = revision.find_and_ensure_exclusive_use(stable_id)
revision.move_type_de_champ(stable_id, Integer(row['new_position']))
tdc.update!(
libelle: row["new_libelle"].strip,
description: row["new_description"]&.strip.to_s, # we want empty string
mandatory: row["new_required"] == "true"
)
end
end
end