Merge pull request #7571 from betagouv/usager/edit-siret-in-draft
feat: allows user to edit civility / siret from a dossier en brouillon
This commit is contained in:
commit
1c42d5f63c
14 changed files with 199 additions and 134 deletions
|
@ -32,7 +32,20 @@
|
|||
|
||||
.header-actions {
|
||||
margin-bottom: $default-spacer;
|
||||
text-align: right;
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
column-gap: $default-spacer * 2;
|
||||
}
|
||||
}
|
||||
|
||||
.edit-identity-action {
|
||||
.dropdown-content {
|
||||
padding: $default-padding;
|
||||
min-width: 250px;
|
||||
}
|
||||
|
||||
.table {
|
||||
margin-bottom: $default-padding * 2;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -17,7 +17,7 @@ class Champs::SiretController < ApplicationController
|
|||
|
||||
begin
|
||||
etablissement = find_etablissement_with_siret
|
||||
rescue APIEntreprise::API::Error::RequestFailed, APIEntreprise::API::Error::BadGateway, APIEntreprise::API::Error::TimedOut, APIEntreprise::API::Error::ServiceUnavailable
|
||||
rescue APIEntreprise::API::Error::RequestFailed, APIEntreprise::API::Error::BadGateway, APIEntreprise::API::Error::TimedOut, APIEntreprise::API::Error::ServiceUnavailable, APIEntrepriseToken::TokenError
|
||||
# i18n-tasks-use t('errors.messages.siret_network_error')
|
||||
return siret_error(:network_error)
|
||||
end
|
||||
|
|
|
@ -114,7 +114,7 @@ module Users
|
|||
sanitized_siret = siret_model.siret
|
||||
begin
|
||||
etablissement = APIEntrepriseService.create_etablissement(@dossier, sanitized_siret, current_user.id)
|
||||
rescue APIEntreprise::API::Error::RequestFailed, APIEntreprise::API::Error::BadGateway, APIEntreprise::API::Error::TimedOut, APIEntreprise::API::Error::ServiceUnavailable
|
||||
rescue APIEntreprise::API::Error::RequestFailed, APIEntreprise::API::Error::BadGateway, APIEntreprise::API::Error::TimedOut, APIEntreprise::API::Error::ServiceUnavailable, APIEntrepriseToken::TokenError
|
||||
return render_siret_error(t('errors.messages.siret_network_error'))
|
||||
end
|
||||
if etablissement.nil?
|
||||
|
|
|
@ -82,7 +82,10 @@ class APIEntreprise::API
|
|||
end
|
||||
|
||||
def self.call_with_siret(resource_name, siret_or_siren, procedure_id, user_id = nil)
|
||||
return if APIEntrepriseToken.new(token_for_procedure(procedure_id)).expired?
|
||||
if APIEntrepriseToken.new(token_for_procedure(procedure_id)).expired?
|
||||
raise APIEntrepriseToken::TokenError, I18n.t("api_entreprise.errors.token_expired")
|
||||
end
|
||||
|
||||
url = url(resource_name, siret_or_siren)
|
||||
params = params(siret_or_siren, procedure_id, user_id)
|
||||
|
||||
|
|
|
@ -13,3 +13,6 @@
|
|||
- elsif current_user.owns?(dossier)
|
||||
.header-actions
|
||||
= render partial: 'invites/dropdown', locals: { dossier: dossier }
|
||||
|
||||
- unless dossier.read_only?
|
||||
= render partial: 'users/dossiers/identity_dropdown', locals: { dossier: dossier }
|
||||
|
|
|
@ -11,140 +11,142 @@
|
|||
%td.libelle SIRET :
|
||||
%td= etablissement.siret
|
||||
|
||||
- if etablissement.siret != etablissement.entreprise.siret_siege_social
|
||||
%tr
|
||||
%td.libelle SIRET du siège social:
|
||||
%td= etablissement.entreprise.siret_siege_social
|
||||
%tr
|
||||
%td.libelle Forme juridique :
|
||||
%td= sanitize(etablissement.entreprise.forme_juridique)
|
||||
%tr
|
||||
%td.libelle Libellé NAF :
|
||||
%td= etablissement.libelle_naf
|
||||
%tr
|
||||
%td.libelle Code NAF :
|
||||
%td= etablissement.naf
|
||||
%tr
|
||||
%td.libelle Date de création :
|
||||
%td= try_format_date(etablissement.entreprise.date_creation)
|
||||
- if profile == 'instructeur'
|
||||
%tr
|
||||
%td.libelle
|
||||
Effectif mensuel
|
||||
= try_format_mois_effectif(etablissement)
|
||||
(URSSAF) :
|
||||
%td= etablissement.entreprise_effectif_mensuel
|
||||
%tr
|
||||
%td.libelle
|
||||
Effectif moyen annuel
|
||||
= etablissement.entreprise_effectif_annuel_annee
|
||||
(URSSAF) :
|
||||
%td= etablissement.entreprise_effectif_annuel
|
||||
%tr
|
||||
%td.libelle Effectif de l'organisation (INSEE) :
|
||||
%td
|
||||
= effectif(etablissement)
|
||||
%tr
|
||||
%td.libelle Numéro de TVA intracommunautaire :
|
||||
%td= etablissement.entreprise.numero_tva_intracommunautaire
|
||||
%tr
|
||||
%td.libelle Adresse :
|
||||
%td
|
||||
- etablissement.adresse.split("\n").each do |line|
|
||||
= line
|
||||
%br
|
||||
%tr
|
||||
%td.libelle Capital social :
|
||||
%td= pretty_currency(etablissement.entreprise.capital_social)
|
||||
%tr
|
||||
%td.libelle Chiffre d’affaires :
|
||||
%td
|
||||
- if profile == 'instructeur'
|
||||
%details
|
||||
- etablissement.exercices.each_with_index do |exercice, index|
|
||||
= "#{exercice.date_fin_exercice.year} : "
|
||||
= pretty_currency(exercice.ca)
|
||||
%br
|
||||
- elsif etablissement.exercices.present?
|
||||
= t('activemodel.models.exercices_summary', count: etablissement.exercices.count)
|
||||
|
||||
|
||||
- if etablissement.entreprise_bilans_bdf.present?
|
||||
- if profile == 'instructeur'
|
||||
= render partial: 'shared/dossiers/identite_entreprise_bilan_detail',
|
||||
locals: { libelle: 'Résultat exercice', key: 'resultat_exercice', etablissement: etablissement }
|
||||
|
||||
= render partial: 'shared/dossiers/identite_entreprise_bilan_detail',
|
||||
locals: { libelle: "Excédent brut d’exploitation", key: 'excedent_brut_exploitation', etablissement: etablissement }
|
||||
|
||||
= render partial: 'shared/dossiers/identite_entreprise_bilan_detail',
|
||||
locals: { libelle: 'Fonds de roulement net global', key: 'fonds_roulement_net_global', etablissement: etablissement }
|
||||
|
||||
= render partial: 'shared/dossiers/identite_entreprise_bilan_detail',
|
||||
locals: { libelle: 'Besoin en fonds de roulement', key: 'besoin_en_fonds_de_roulement', etablissement: etablissement }
|
||||
- unless local_assigns[:short_identity]
|
||||
- if etablissement.siret != etablissement.entreprise.siret_siege_social
|
||||
%tr
|
||||
%td.libelle
|
||||
Chiffres financiers clés (Banque de France)
|
||||
= "en #{pretty_currency_unit(etablissement.entreprise_bilans_bdf_monnaie)} :"
|
||||
|
||||
- if controller.is_a?(Instructeurs::AvisController)
|
||||
%td
|
||||
Les consulter
|
||||
= link_to "au format csv", bilans_bdf_instructeur_avis_path(@avis, format: 'csv')
|
||||
,
|
||||
= link_to "au format xlsx", bilans_bdf_instructeur_avis_path(@avis, format: 'xlsx')
|
||||
ou
|
||||
= link_to "au format ods", bilans_bdf_instructeur_avis_path(@avis, format: 'ods')
|
||||
- else
|
||||
%td
|
||||
Les consulter
|
||||
= link_to "au format csv", bilans_bdf_instructeur_dossier_path(procedure_id: @dossier.procedure.id, dossier_id: @dossier.id, format: 'csv')
|
||||
,
|
||||
= link_to "au format xlsx", bilans_bdf_instructeur_dossier_path(procedure_id: @dossier.procedure.id, dossier_id: @dossier.id, format: 'xlsx')
|
||||
ou
|
||||
= link_to "au format ods", bilans_bdf_instructeur_dossier_path(procedure_id: @dossier.procedure.id, dossier_id: @dossier.id, format: 'ods')
|
||||
- else
|
||||
%tr
|
||||
%td.libelle
|
||||
Bilans Banque de France :
|
||||
%td Les 3 derniers bilans connus de votre entreprise par la Banque de France ont été joints à votre dossier.
|
||||
- if etablissement.entreprise_attestation_sociale.attached?
|
||||
%td.libelle SIRET du siège social:
|
||||
%td= etablissement.entreprise.siret_siege_social
|
||||
%tr
|
||||
%td.libelle Attestation sociale :
|
||||
- if profile == 'instructeur'
|
||||
%td= link_to "Consulter l'attestation", url_for(etablissement.entreprise_attestation_sociale)
|
||||
- else
|
||||
%td Une attestation de vigilance délivrée par l'ACOSS a été jointe à votre dossier.
|
||||
|
||||
- if etablissement.entreprise_attestation_fiscale.attached?
|
||||
%td.libelle Forme juridique :
|
||||
%td= sanitize(etablissement.entreprise.forme_juridique)
|
||||
%tr
|
||||
%td.libelle Attestation fiscale :
|
||||
- if profile == 'instructeur'
|
||||
%td= link_to "Consulter l'attestation", url_for(etablissement.entreprise_attestation_fiscale)
|
||||
- else
|
||||
%td Une attestation fiscale délivrée par l'URSSAF a été jointe à votre dossier.
|
||||
|
||||
- if etablissement.association?
|
||||
%td.libelle Libellé NAF :
|
||||
%td= etablissement.libelle_naf
|
||||
%tr
|
||||
%td.libelle Numéro RNA :
|
||||
%td= etablissement.association_rna
|
||||
%tr
|
||||
%td.libelle Titre :
|
||||
%td= etablissement.association_titre
|
||||
%tr
|
||||
%td.libelle Objet :
|
||||
%td= etablissement.association_objet
|
||||
%td.libelle Code NAF :
|
||||
%td= etablissement.naf
|
||||
%tr
|
||||
%td.libelle Date de création :
|
||||
%td= try_format_date(etablissement.association_date_creation)
|
||||
%td= try_format_date(etablissement.entreprise.date_creation)
|
||||
- if profile == 'instructeur'
|
||||
%tr
|
||||
%td.libelle
|
||||
Effectif mensuel
|
||||
= try_format_mois_effectif(etablissement)
|
||||
(URSSAF) :
|
||||
%td= etablissement.entreprise_effectif_mensuel
|
||||
%tr
|
||||
%td.libelle
|
||||
Effectif moyen annuel
|
||||
= etablissement.entreprise_effectif_annuel_annee
|
||||
(URSSAF) :
|
||||
%td= etablissement.entreprise_effectif_annuel
|
||||
%tr
|
||||
%td.libelle Date de publication :
|
||||
%td= try_format_date(etablissement.association_date_publication)
|
||||
%td.libelle Effectif de l'organisation (INSEE) :
|
||||
%td
|
||||
= effectif(etablissement)
|
||||
%tr
|
||||
%td.libelle Date de déclaration :
|
||||
%td= try_format_date(etablissement.association_date_declaration)
|
||||
%td.libelle Numéro de TVA intracommunautaire :
|
||||
%td= etablissement.entreprise.numero_tva_intracommunautaire
|
||||
%tr
|
||||
%td.libelle Adresse :
|
||||
%td
|
||||
- etablissement.adresse.split("\n").each do |line|
|
||||
= line
|
||||
%br
|
||||
%tr
|
||||
%td.libelle Capital social :
|
||||
%td= pretty_currency(etablissement.entreprise.capital_social)
|
||||
%tr
|
||||
%td.libelle Chiffre d’affaires :
|
||||
%td
|
||||
- if profile == 'instructeur'
|
||||
%details
|
||||
- etablissement.exercices.each_with_index do |exercice, index|
|
||||
= "#{exercice.date_fin_exercice.year} : "
|
||||
= pretty_currency(exercice.ca)
|
||||
%br
|
||||
- elsif etablissement.exercices.present?
|
||||
= t('activemodel.models.exercices_summary', count: etablissement.exercices.count)
|
||||
|
||||
%p
|
||||
= link_to "➡ Autres informations sur l’organisme sur « annuaire-entreprises.data.gouv.fr » (ex: fiche d’immatriculation RNCS)",
|
||||
annuaire_link(etablissement.siren),
|
||||
target: "_blank"
|
||||
|
||||
- if etablissement.entreprise_bilans_bdf.present?
|
||||
- if profile == 'instructeur'
|
||||
= render partial: 'shared/dossiers/identite_entreprise_bilan_detail',
|
||||
locals: { libelle: 'Résultat exercice', key: 'resultat_exercice', etablissement: etablissement }
|
||||
|
||||
= render partial: 'shared/dossiers/identite_entreprise_bilan_detail',
|
||||
locals: { libelle: "Excédent brut d’exploitation", key: 'excedent_brut_exploitation', etablissement: etablissement }
|
||||
|
||||
= render partial: 'shared/dossiers/identite_entreprise_bilan_detail',
|
||||
locals: { libelle: 'Fonds de roulement net global', key: 'fonds_roulement_net_global', etablissement: etablissement }
|
||||
|
||||
= render partial: 'shared/dossiers/identite_entreprise_bilan_detail',
|
||||
locals: { libelle: 'Besoin en fonds de roulement', key: 'besoin_en_fonds_de_roulement', etablissement: etablissement }
|
||||
%tr
|
||||
%td.libelle
|
||||
Chiffres financiers clés (Banque de France)
|
||||
= "en #{pretty_currency_unit(etablissement.entreprise_bilans_bdf_monnaie)} :"
|
||||
|
||||
- if controller.is_a?(Instructeurs::AvisController)
|
||||
%td
|
||||
Les consulter
|
||||
= link_to "au format csv", bilans_bdf_instructeur_avis_path(@avis, format: 'csv')
|
||||
,
|
||||
= link_to "au format xlsx", bilans_bdf_instructeur_avis_path(@avis, format: 'xlsx')
|
||||
ou
|
||||
= link_to "au format ods", bilans_bdf_instructeur_avis_path(@avis, format: 'ods')
|
||||
- else
|
||||
%td
|
||||
Les consulter
|
||||
= link_to "au format csv", bilans_bdf_instructeur_dossier_path(procedure_id: @dossier.procedure.id, dossier_id: @dossier.id, format: 'csv')
|
||||
,
|
||||
= link_to "au format xlsx", bilans_bdf_instructeur_dossier_path(procedure_id: @dossier.procedure.id, dossier_id: @dossier.id, format: 'xlsx')
|
||||
ou
|
||||
= link_to "au format ods", bilans_bdf_instructeur_dossier_path(procedure_id: @dossier.procedure.id, dossier_id: @dossier.id, format: 'ods')
|
||||
- else
|
||||
%tr
|
||||
%td.libelle
|
||||
Bilans Banque de France :
|
||||
%td Les 3 derniers bilans connus de votre entreprise par la Banque de France ont été joints à votre dossier.
|
||||
- if etablissement.entreprise_attestation_sociale.attached?
|
||||
%tr
|
||||
%td.libelle Attestation sociale :
|
||||
- if profile == 'instructeur'
|
||||
%td= link_to "Consulter l'attestation", url_for(etablissement.entreprise_attestation_sociale)
|
||||
- else
|
||||
%td Une attestation de vigilance délivrée par l'ACOSS a été jointe à votre dossier.
|
||||
|
||||
- if etablissement.entreprise_attestation_fiscale.attached?
|
||||
%tr
|
||||
%td.libelle Attestation fiscale :
|
||||
- if profile == 'instructeur'
|
||||
%td= link_to "Consulter l'attestation", url_for(etablissement.entreprise_attestation_fiscale)
|
||||
- else
|
||||
%td Une attestation fiscale délivrée par l'URSSAF a été jointe à votre dossier.
|
||||
|
||||
- if etablissement.association?
|
||||
%tr
|
||||
%td.libelle Numéro RNA :
|
||||
%td= etablissement.association_rna
|
||||
%tr
|
||||
%td.libelle Titre :
|
||||
%td= etablissement.association_titre
|
||||
%tr
|
||||
%td.libelle Objet :
|
||||
%td= etablissement.association_objet
|
||||
%tr
|
||||
%td.libelle Date de création :
|
||||
%td= try_format_date(etablissement.association_date_creation)
|
||||
%tr
|
||||
%td.libelle Date de publication :
|
||||
%td= try_format_date(etablissement.association_date_publication)
|
||||
%tr
|
||||
%td.libelle Date de déclaration :
|
||||
%td= try_format_date(etablissement.association_date_declaration)
|
||||
|
||||
- unless local_assigns[:short_identity]
|
||||
%p
|
||||
= link_to "➡ Autres informations sur l’organisme sur « annuaire-entreprises.data.gouv.fr » (ex: fiche d’immatriculation RNCS)",
|
||||
annuaire_link(etablissement.siren),
|
||||
target: "_blank"
|
||||
|
|
17
app/views/users/dossiers/_identity_dropdown.html.haml
Normal file
17
app/views/users/dossiers/_identity_dropdown.html.haml
Normal file
|
@ -0,0 +1,17 @@
|
|||
.dropdown.edit-identity-action{ data: { controller: 'menu-button', popover: 'true' } }
|
||||
%button.button.dropdown-button{ data: { menu_button_target: 'button' } }
|
||||
= t("views.shared.dossiers.demande.my_identity")
|
||||
|
||||
#edit-identity-content.dropdown-content.fade-in-down{ data: { menu_button_target: 'menu' } }
|
||||
- if dossier.procedure.for_individual
|
||||
= render partial: "shared/dossiers/identite_individual", locals: { individual: dossier.individual }
|
||||
|
||||
.center
|
||||
= link_to t('views.shared.dossiers.demande.edit_identity'), identite_dossier_path(dossier), class: 'button'
|
||||
|
||||
- elsif dossier.etablissement
|
||||
= render partial: "shared/dossiers/identite_entreprise", locals: { etablissement: dossier.etablissement, short_identity: true, profile: "usager" }
|
||||
|
||||
.center
|
||||
= link_to t('views.shared.dossiers.demande.edit_siret'), siret_dossier_path(dossier), class: 'button'
|
||||
|
|
@ -2,3 +2,4 @@ en:
|
|||
api_entreprise:
|
||||
errors:
|
||||
missing_token: "the API Entreprise token cannot be blank"
|
||||
token_expired: "API Entreprise token has expired."
|
||||
|
|
|
@ -2,3 +2,4 @@ fr:
|
|||
api_entreprise:
|
||||
errors:
|
||||
missing_token: "le jeton API Entreprise ne peut être vide"
|
||||
token_expired: "Le jeton API Entreprise a expiré."
|
||||
|
|
|
@ -133,6 +133,7 @@ en:
|
|||
write_message_to_administration_placeholder: "Write your message to the administration here"
|
||||
demande:
|
||||
requester_identity: "Identity of the requester"
|
||||
my_identity: "My identity"
|
||||
form: "Form"
|
||||
edit_siret: "Edit SIRET"
|
||||
edit_identity: "Edit identity data"
|
||||
|
|
|
@ -128,6 +128,7 @@ fr:
|
|||
write_message_to_administration_placeholder: "Écrivez votre message à l’administration ici"
|
||||
demande:
|
||||
requester_identity: "Identité du demandeur"
|
||||
my_identity: "Mon identité"
|
||||
form: "Formulaire"
|
||||
edit_siret: "Modifier le SIRET"
|
||||
edit_identity: "Modifier l’identité"
|
||||
|
|
|
@ -271,7 +271,7 @@ describe Users::DossiersController, type: :controller do
|
|||
let(:api_etablissement_status) { 200 }
|
||||
let(:token_expired) { true }
|
||||
|
||||
it_behaves_like 'the request fails with an error', I18n.t('errors.messages.siret_unknown')
|
||||
it_behaves_like 'the request fails with an error', I18n.t('errors.messages.siret_network_error')
|
||||
end
|
||||
|
||||
context 'when all API informations available' do
|
||||
|
|
|
@ -267,7 +267,7 @@ describe APIEntreprise::API do
|
|||
end
|
||||
|
||||
it 'makes no call to api-entreprise' do
|
||||
subject
|
||||
expect { subject }.to raise_error(APIEntrepriseToken::TokenError)
|
||||
expect(WebMock).not_to have_requested(:get, /https:\/\/entreprise.api.gouv.fr\/v2\/entreprises\/#{siren}/)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -52,4 +52,27 @@ describe 'dossiers/show/header.html.haml', type: :view do
|
|||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe "identity edit" do
|
||||
context "when the identity is individual" do
|
||||
let(:procedure) { create(:procedure, for_individual: true) }
|
||||
let(:dossier) { create(:dossier, :with_individual, state: "brouillon", procedure: procedure) }
|
||||
|
||||
it "display identity with an edit link" do
|
||||
expect(rendered).to have_text(/Nom\s+#{dossier.individual.nom}/)
|
||||
expect(rendered).to have_link("Modifier l’identité")
|
||||
end
|
||||
end
|
||||
|
||||
context "when the identity is an enterprise" do
|
||||
let(:procedure) { create(:procedure, for_individual: false) }
|
||||
let(:dossier) { create(:dossier, :with_entreprise, state: "brouillon", procedure: procedure) }
|
||||
|
||||
it "display short identity with an edit siret link" do
|
||||
expect(rendered).to have_text(/Dénomination :\s+#{dossier.etablissement.entreprise_raison_sociale}/)
|
||||
expect(rendered).not_to have_text("Numéro de TVA")
|
||||
expect(rendered).to have_link("Modifier le SIRET")
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue