fix: replace ds_eq operator by ds_include when targeted_champ is a multiple_drop_down_list
This commit is contained in:
parent
02fab28ad6
commit
f1bcb84832
2 changed files with 177 additions and 0 deletions
|
@ -0,0 +1,54 @@
|
|||
namespace :after_party do
|
||||
desc 'Deployment task: fix_include_in_logic'
|
||||
task fix_include_in_logic: :environment do
|
||||
include Logic
|
||||
puts "Running deploy task 'fix_include_in_logic'"
|
||||
|
||||
tdcs_with_condition = TypeDeChamp.where.not(condition: nil)
|
||||
|
||||
progress = ProgressReport.new(tdcs_with_condition.count)
|
||||
|
||||
tdcs_with_condition.find_each do |tdc|
|
||||
begin
|
||||
tdc.revisions.each do |revision|
|
||||
tdcs = revision.types_de_champ.where(stable_id: tdc.condition.sources)
|
||||
|
||||
transformed_condition = transform_eq_to_include(tdc.condition, tdcs)
|
||||
|
||||
if (transformed_condition != tdc.condition)
|
||||
rake_puts "found #{tdc.id}, original: #{tdc.condition.to_s(tdcs)}, correction: #{transformed_condition.to_s(tdcs)}!"
|
||||
new_tdc = revision.find_and_ensure_exclusive_use(tdc.stable_id)
|
||||
new_tdc.update_columns(condition: transformed_condition)
|
||||
Champ.joins(:dossier).where(dossier: { revision: revision }, type_de_champ: tdc).update(type_de_champ: new_tdc)
|
||||
end
|
||||
end
|
||||
rescue StandardError => e
|
||||
rake_puts "problem with tdc #{tdc.id},\ncondition: #{tdc.read_attribute_before_type_cast('condition')},\nmessage: #{e.message}"
|
||||
ensure
|
||||
progress.inc
|
||||
end
|
||||
end
|
||||
progress.finish
|
||||
|
||||
# Update task as completed. If you remove the line below, the task will
|
||||
# run with every deploy (or every time you call after_party:run).
|
||||
AfterParty::TaskRecord
|
||||
.create version: AfterParty::TaskRecorder.new(__FILE__).timestamp
|
||||
end
|
||||
|
||||
def transform_eq_to_include(condition, tdcs)
|
||||
case condition
|
||||
when Logic::NAryOperator
|
||||
condition.class.new(condition.operands.map { transform_eq_to_include(_1, tdcs) })
|
||||
when Eq
|
||||
target = tdcs.find { _1.stable_id == condition.left.stable_id }
|
||||
if target.type_champ == 'multiple_drop_down_list'
|
||||
ds_include(condition.left, condition.right)
|
||||
else
|
||||
condition
|
||||
end
|
||||
else
|
||||
condition
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Add table
Add a link
Reference in a new issue