demarches-normaliennes/app/models/etablissement.rb

163 lines
5.2 KiB
Ruby

class Etablissement < ApplicationRecord
belongs_to :dossier
has_one :champ, class_name: 'Champs::SiretChamp'
has_many :exercices, dependent: :destroy
has_one_attached :entreprise_attestation_sociale
has_one_attached :entreprise_attestation_fiscale
accepts_nested_attributes_for :exercices
validates :siret, presence: true
validates :dossier_id, uniqueness: { allow_nil: true }
def search_terms
[
entreprise_siren,
entreprise_numero_tva_intracommunautaire,
entreprise_forme_juridique,
entreprise_forme_juridique_code,
entreprise_nom_commercial,
entreprise_raison_sociale,
entreprise_siret_siege_social,
entreprise_nom,
entreprise_prenom,
association_rna,
association_titre,
association_objet,
siret,
naf,
libelle_naf,
adresse,
code_postal,
localite,
code_insee_localite
]
end
def spreadsheet_columns
[
['Dossier ID', :dossier_id_for_export],
['Champ', :libelle_for_export],
['Établissement SIRET', :siret],
['Établissement siège social', :siege_social],
['Établissement NAF', :naf],
['Établissement libellé NAF', :libelle_naf],
['Établissement Adresse', :adresse],
['Établissement numero voie', :numero_voie],
['Établissement type voie', :type_voie],
['Établissement nom voie', :nom_voie],
['Établissement complément adresse', :complement_adresse],
['Établissement code postal', :code_postal],
['Établissement localité', :localite],
['Établissement code INSEE localité', :code_insee_localite],
['Entreprise SIREN', :entreprise_siren],
['Entreprise capital social', :entreprise_capital_social],
['Entreprise numero TVA intracommunautaire', :entreprise_numero_tva_intracommunautaire],
['Entreprise forme juridique', :entreprise_forme_juridique],
['Entreprise forme juridique code', :entreprise_forme_juridique_code],
['Entreprise nom commercial', :entreprise_nom_commercial],
['Entreprise raison sociale', :entreprise_raison_sociale],
['Entreprise SIRET siège social', :entreprise_siret_siege_social],
['Entreprise code effectif entreprise', :entreprise_code_effectif_entreprise],
['Entreprise date de création', :entreprise_date_creation],
['Entreprise nom', :entreprise_nom],
['Entreprise prénom', :entreprise_prenom],
['Association RNA', :association_rna],
['Association titre', :association_titre],
['Association objet', :association_objet],
['Association date de création', :association_date_creation],
['Association date de déclaration', :association_date_declaration],
['Association date de publication', :association_date_publication]
]
end
def siren
entreprise_siren
end
def geo_adresse
[numero_voie, type_voie, nom_voie, complement_adresse, code_postal, localite].join(' ')
end
def inline_adresse
# squeeze needed because of space in excess in the data
[
"#{numero_voie} #{type_voie} #{nom_voie}",
complement_adresse,
"#{code_postal} #{localite}"
].reject(&:blank?).join(', ').squeeze(' ')
end
def association?
association_rna.present?
end
def entreprise
Entreprise.new(
etablissement: self,
siren: entreprise_siren,
capital_social: entreprise_capital_social,
numero_tva_intracommunautaire: entreprise_numero_tva_intracommunautaire,
forme_juridique: entreprise_forme_juridique,
forme_juridique_code: entreprise_forme_juridique_code,
nom_commercial: entreprise_nom_commercial,
raison_sociale: entreprise_raison_sociale,
siret_siege_social: entreprise_siret_siege_social,
code_effectif_entreprise: entreprise_code_effectif_entreprise,
effectif_mensuel: entreprise_effectif_mensuel,
effectif_mois: entreprise_effectif_mois,
effectif_annee: entreprise_effectif_annee,
effectif_annuel: entreprise_effectif_annuel,
effectif_annuel_annee: entreprise_effectif_annuel_annee,
date_creation: entreprise_date_creation,
nom: entreprise_nom,
prenom: entreprise_prenom,
inline_adresse: inline_adresse
)
end
def upload_attestation(url, attestation)
filename = File.basename(URI.parse(url).path)
response = Typhoeus.get(url)
if response.success?
attestation.attach(
io: StringIO.new(response.body),
filename: filename,
metadata: { virus_scan_result: ActiveStorage::VirusScanner::SAFE }
)
end
end
def upload_attestation_sociale(url)
upload_attestation(url, entreprise_attestation_sociale)
end
def upload_attestation_fiscale(url)
upload_attestation(url, entreprise_attestation_fiscale)
end
def entreprise_bilans_bdf_to_csv
headers = entreprise_bilans_bdf.flat_map(&:keys).uniq
data = entreprise_bilans_bdf.map do |bilan|
headers.map { |h| bilan[h] }
end
SpreadsheetArchitect.to_csv(headers: headers, data: data)
end
private
def dossier_id_for_export
if dossier_id
dossier_id.to_s
elsif champ
champ.dossier_id.to_s
end
end
def libelle_for_export
champ&.libelle || 'Dossier'
end
end