data(conditional): add a maintenance task to update routing rules based on commune or epci champ

This commit is contained in:
Eric Leroy-Terquem 2023-12-13 16:53:03 +01:00
parent 954facdaff
commit e4632214fb
2 changed files with 95 additions and 0 deletions

View file

@ -0,0 +1,57 @@
# frozen_string_literal: true
module Maintenance
class UpdateRoutingRulesBasedOnCommuneOrEpciChampTask < MaintenanceTasks::Task
include Logic
def collection
GroupeInstructeur
.joins(:procedure)
.where(procedures: { routing_enabled: true })
end
def process(gi)
routing_rule = gi.routing_rule
if routing_rule.present?
tdcs = gi.procedure.active_revision.types_de_champ_public
if tdcs.where(stable_id: routing_rule.sources, type_champ: ["communes", "epci"]).present?
if routing_rule.is_a?(And)
new_operands = new_operands_from(tdcs, routing_rule)
gi.update!(routing_rule: ds_and(new_operands))
elsif routing_rule.is_a?(Or)
new_operands = new_operands_from(tdcs, routing_rule)
gi.update!(routing_rule: ds_or(new_operands))
elsif routing_rule.is_a?(NotEq)
gi.update!(routing_rule: ds_not_in_departement(routing_rule.left, routing_rule.right))
elsif routing_rule.is_a?(Eq)
gi.update!(routing_rule: ds_in_departement(routing_rule.left, routing_rule.right))
end
end
end
end
def count
collection.count
end
private
def new_operands_from(tdcs, condition)
condition.operands.map do |sub_condition|
if tdcs.where(stable_id: sub_condition.sources, type_champ: ["communes", "epci"]).present?
if sub_condition.is_a?(NotEq)
ds_not_in_departement(sub_condition.left, sub_condition.right)
elsif sub_condition.is_a?(Eq)
ds_in_departement(sub_condition.left, sub_condition.right)
else
sub_condition
end
else
sub_condition
end
end
end
end
end