demarches-normaliennes/app/models/champs/departement_champ.rb

93 lines
1.8 KiB
Ruby
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

class Champs::DepartementChamp < Champs::TextChamp
store_accessor :value_json, :code_region
validate :value_in_departement_names, if: -> { validate_champ_value_or_prefill? && !value.nil? }
validate :external_id_in_departement_codes, if: -> { validate_champ_value_or_prefill? && !external_id.nil? }
before_save :store_code_region
def for_export(path = :value)
case path
when :code
code
when :value
name
end
end
def to_s
formatted_value
end
def for_tag(path = :value)
case path
when :code
code
when :value
formatted_value
end
end
def for_api
formatted_value
end
def for_api_v2
formatted_value.tr('', '-')
end
def selected
code
end
def code
external_id || APIGeoService.departement_code(name)
end
def name
maybe_code_and_name = value&.match(/^(\w{2,3}) - (.+)/)
if maybe_code_and_name
maybe_code_and_name[2]
else
value
end
end
def code_region
APIGeoService.region_code_by_departement(code)
end
def value=(code)
if [2, 3].include?(code&.size)
self.external_id = code
super(APIGeoService.departement_name(code))
elsif code.blank?
self.external_id = nil
super(nil)
else
self.external_id = APIGeoService.departement_code(code)
super(code)
end
end
private
def formatted_value
blank? ? "" : "#{code} #{name}"
end
def value_in_departement_names
return if value.in?(APIGeoService.departements.pluck(:name))
errors.add(:value, :not_in_departement_names)
end
def external_id_in_departement_codes
return if external_id.in?(APIGeoService.departements.pluck(:code))
errors.add(:external_id, :not_in_departement_codes)
end
def store_code_region
self.code_region = code_region
end
end