demarches-normaliennes/app/models/concerns/siret_champ_etablissement_fetchable_concern.rb
Sébastien Carceles df2eaa9542 don't clean the siret champ value
Cleaning the value is useless, when fetching the etablissement,
as the value will be re-written by the dossier update, when the user
fills in the dossier.
2023-02-27 13:45:16 +01:00

34 lines
1.3 KiB
Ruby

module SiretChampEtablissementFetchableConcern
extend ActiveSupport::Concern
def fetch_etablissement!(siret, user)
return clear if siret.empty?
return clear(error: :invalid) unless Siret.new(siret: siret).valid? # i18n-tasks-use t('errors.messages.invalid_siret')
return clear(error: :not_found) unless (etablissement = APIEntrepriseService.create_etablissement(self, siret, user.id)) # i18n-tasks-use t('errors.messages.siret_not_found')
return update_etablissement!(etablissement)
rescue => error
if error.try(:network_error?) && !APIEntrepriseService.api_up?
# TODO: notify ops
etablissement = APIEntrepriseService.create_etablissement_as_degraded_mode(self, siret, user.id)
return update_etablissement!(etablissement, error: :api_entreprise_down)
else
Sentry.capture_exception(error, extra: { dossier_id: dossier_id, siret: siret })
return clear(error: :network_error) # i18n-tasks-use t('errors.messages.siret_network_error')
end
end
private
def update_etablissement!(etablissement, error: nil)
update!(value: etablissement.siret, etablissement: etablissement)
error.presence || etablissement.siret
end
def clear(error: nil)
etablissement_to_destroy = etablissement
update!(etablissement: nil)
etablissement_to_destroy&.destroy
error.presence
end
end