162 lines
5.1 KiB
Ruby
162 lines
5.1 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(
|
|
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
|