Skip to content

Commit

Permalink
v1
Browse files Browse the repository at this point in the history
  • Loading branch information
rmonnier9 committed Nov 5, 2024
1 parent 590de2f commit d326d6f
Show file tree
Hide file tree
Showing 13 changed files with 426 additions and 138 deletions.
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import FAQLink from '#components-ui/faq-link';
import { SeePersonPageLink } from '#components-ui/see-personn-page-link';
import { FullTable } from '#components/table/full';
import { IUniteLegale } from '#models/core/types';
Expand All @@ -10,14 +11,47 @@ type IDirigeantContentProps = {
uniteLegale: IUniteLegale;
};

export function DirigeantContent({
const dataSourceTooltip = ({
dataType,
isInIg,
isInInpi,
}: {
dataType: string;
isInIg?: boolean;
isInInpi?: boolean;
}) => {
return (
<>
{!isInIg && (
<FAQLink tooltipLabel={<i>données différentes</i>}>
Ce {dataType} n‘apparait pas dans les données d‘Infogreffe
</FAQLink>
)}
{!isInInpi && (
<FAQLink tooltipLabel={<i>données différentes</i>}>
Ce {dataType} n‘apparait pas dans les données de l‘INPI
</FAQLink>
)}
</>
);
};

export default function DirigeantsContent({
dirigeants,
uniteLegale,
}: IDirigeantContentProps) {
const formatDirigeant = (dirigeant: IEtatCivil | IPersonneMorale) => {
if (isPersonneMorale(dirigeant)) {
const infos = [
dirigeant.role,
dirigeant.roles?.map((role) => (
<>
<span>{role.label}</span>
{dataSourceTooltip({
...role,
dataType: 'role',
})}
</>
)) || <>{dirigeant.role}</>,
<>
<strong>{dirigeant.denomination}</strong>
{dirigeant.siren ? (
Expand All @@ -32,6 +66,10 @@ export function DirigeantContent({
)}
<br />
{dirigeant.natureJuridique}
{dataSourceTooltip({
...dirigeant,
dataType: 'dirigeant',
})}
</>,
];

Expand All @@ -50,7 +88,15 @@ export function DirigeantContent({
}${(dirigeant.nom || '').toUpperCase()}`;

return [
dirigeant.role,
dirigeant.roles?.map((role) => (
<>
<span>{role.label}</span>
{dataSourceTooltip({
...role,
dataType: 'role',
})}
</>
)) || <>{dirigeant.role}</>,
<>
{nomComplet}
{dirigeant.dateNaissance || dirigeant.dateNaissancePartial
Expand All @@ -62,6 +108,10 @@ export function DirigeantContent({
dirigeant.lieuNaissance ? `, à ${dirigeant.lieuNaissance}` : ''
}`
: ''}
{dataSourceTooltip({
...dirigeant,
dataType: 'dirigeant',
})}
</>,
...(dirigeant.dateNaissancePartial
? [
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,35 +7,30 @@ import { UniteLegalePageLink } from '#components/unite-legale-page-link';
import { EAdministration } from '#models/administrations/EAdministration';
import { IUniteLegale } from '#models/core/types';
import { IDirigeantsFetching } from '.';
import { DirigeantContent } from './dirigeant-content';
import DirigeantsContent from './dirigeants-content';

type IProps = {
dirigeants: IDirigeantsFetching;
uniteLegale: IUniteLegale;
isProtected: boolean;
warning: JSX.Element;
};

/**
* Dirigeants section
*/
function DirigeantsSection({
export default function DirigeantsSection({
uniteLegale,
dirigeants,
isProtected,
warning,
}: IProps) {
const sources = [EAdministration.INPI];

if (isProtected) {
sources.push(EAdministration.INFOGREFFE);
}

return (
<AsyncDataSectionClient
id="rne-dirigeants"
id="dirigeants-section"
title="Dirigeant(s)"
sources={sources}
sources={[
EAdministration.INPI,
...(isProtected ? [EAdministration.INFOGREFFE] : []),
]}
data={dirigeants}
isProtected={isProtected}
notFoundInfo={
Expand All @@ -50,7 +45,6 @@ function DirigeantsSection({
return (
<>
{dirigeants.metadata?.isFallback && <InpiPartiallyDownWarning />}
{warning ? warning : null}
{isProtected ? (
<Info>
Ces informations proviennent d’
Expand Down Expand Up @@ -87,7 +81,7 @@ function DirigeantsSection({
&nbsp;:
</p>

<DirigeantContent
<DirigeantsContent
dirigeants={dirigeants}
uniteLegale={uniteLegale}
/>
Expand All @@ -99,5 +93,3 @@ function DirigeantsSection({
</AsyncDataSectionClient>
);
}

export default DirigeantsSection;
Original file line number Diff line number Diff line change
Expand Up @@ -4,81 +4,44 @@ import { HorizontalSeparator } from '#components-ui/horizontal-separator';
import BreakPageForPrint from '#components-ui/print-break-page';
import { IAPINotRespondingError } from '#models/api-not-responding';
import { IUniteLegale } from '#models/core/types';
import {
IDataFetchingState,
isDataLoading,
isDataSuccess,
isUnauthorized,
} from '#models/data-fetching';
import { IDataFetchingState } from '#models/data-fetching';
import { IDirigeants } from '#models/rne/types';
import { ApplicationRights, hasRights } from '#models/user/rights';
import { ISession } from '#models/user/session';
import { APIRoutesPaths } from 'app/api/data-fetching/routes-paths';
import { useAPIRouteData } from 'hooks/fetch/use-API-route-data';
import BeneficiairesSection from './beneficiaires';
import RCSRNEComparison from './rcs-rne-comparison';
import DirigeantsSection from './rne-dirigeants';
import DirigeantsSection from './dirigeants-section';
import DirigeantSummary from './summary';

export type IDirigeantsFetching =
| IDirigeants
| IAPINotRespondingError
| IDataFetchingState;

function mergeDirigeants(
dirigeantsRNE: IDirigeantsFetching,
dirigeantsRCS: IDirigeantsFetching
) {
if (isUnauthorized(dirigeantsRCS)) {
return { dirigeants: dirigeantsRNE, isProtected: false };
} else {
if (isDataLoading(dirigeantsRCS) || isDataLoading(dirigeantsRNE)) {
return { dirigeants: IDataFetchingState.LOADING, isProtected: false };
}
if (isDataSuccess(dirigeantsRCS)) {
return { dirigeants: dirigeantsRCS, isProtected: true };
}
}
return { dirigeants: dirigeantsRNE, isProtected: false };
}

export function DirigeantInformation({
uniteLegale,
session,
}: {
uniteLegale: IUniteLegale;
session: ISession | null;
}) {
const dirigeantsRNE = useAPIRouteData(
APIRoutesPaths.RneDirigeants,
uniteLegale.siren,
session
);

const mandatairesRCS = useAPIRouteData(
APIRoutesPaths.EspaceAgentRcsMandataires,
const isProtected = hasRights(session, ApplicationRights.mandatairesRCS);
const dirigeants = useAPIRouteData(
isProtected
? APIRoutesPaths.EspaceAgentDirigeantsProtected
: APIRoutesPaths.RneDirigeants,
uniteLegale.siren,
session
);

const { dirigeants, isProtected } = mergeDirigeants(
dirigeantsRNE,
mandatairesRCS
);

return (
<>
<DirigeantSummary uniteLegale={uniteLegale} dirigeants={dirigeants} />
<DirigeantsSection
uniteLegale={uniteLegale}
dirigeants={dirigeants}
isProtected={isProtected}
warning={
<RCSRNEComparison
dirigeantsRCS={mandatairesRCS}
dirigeantsRNE={dirigeantsRNE}
uniteLegale={uniteLegale}
/>
}
/>
<BreakPageForPrint />
<HorizontalSeparator />
Expand Down

This file was deleted.

4 changes: 2 additions & 2 deletions app/api/data-fetching/routes-handlers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import { getOpqibi } from '#models/espace-agent/certificats/opqibi';
import { getQualibat } from '#models/espace-agent/certificats/qualibat';
import { getQualifelec } from '#models/espace-agent/certificats/qualifelec';
import { getConformiteEntreprise } from '#models/espace-agent/conformite';
import { getMandatairesRCS } from '#models/espace-agent/mandataires-rcs';
import { getDirigeantsProtected } from '#models/espace-agent/dirigeants-protected';
import { getDocumentsRNEProtected } from '#models/espace-agent/rne-protected/documents';
import { getDirigeantsRNE } from '#models/rne/dirigeants';
import { getRNEObservations } from '#models/rne/observations';
Expand All @@ -26,7 +26,7 @@ export const APIRoutesHandlers = {
[APIRoutesPaths.EspaceAgentCnetp]: getCnetp,
[APIRoutesPaths.EspaceAgentQualibat]: getQualibat,
[APIRoutesPaths.EspaceAgentQualifelec]: getQualifelec,
[APIRoutesPaths.EspaceAgentRcsMandataires]: getMandatairesRCS,
[APIRoutesPaths.EspaceAgentDirigeantsProtected]: getDirigeantsProtected,
[APIRoutesPaths.EspaceAgentBeneficiaires]: getBeneficiairesController,
[APIRoutesPaths.EspaceAgentRneDocuments]: getDocumentsRNEProtected,
[APIRoutesPaths.EspaceAgentAssociationProtected]: getAssociationProtected,
Expand Down
2 changes: 1 addition & 1 deletion app/api/data-fetching/routes-paths.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ export enum APIRoutesPaths {
EspaceAgentCnetp = 'espace-agent/cnetp',
EspaceAgentQualibat = 'espace-agent/qualibat',
EspaceAgentQualifelec = 'espace-agent/qualifelec',
EspaceAgentRcsMandataires = 'espace-agent/rcs-mandataires',
EspaceAgentDirigeantsProtected = 'espace-agent/dirigeants-protected',
EspaceAgentBeneficiaires = 'espace-agent/beneficiaires',
EspaceAgentRneDocuments = 'espace-agent/rne/documents',
EspaceAgentAssociationProtected = 'espace-agent/association-protected',
Expand Down
3 changes: 2 additions & 1 deletion app/api/data-fetching/routes-scopes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,10 @@ export const APIRoutesScopes: Record<APIRoutesPaths, ApplicationRights> = {
[APIRoutesPaths.EspaceAgentQualibat]: ApplicationRights.protectedCertificats,
[APIRoutesPaths.EspaceAgentQualifelec]:
ApplicationRights.protectedCertificats,
[APIRoutesPaths.EspaceAgentRcsMandataires]: ApplicationRights.mandatairesRCS,
[APIRoutesPaths.EspaceAgentBeneficiaires]: ApplicationRights.beneficiaires,
[APIRoutesPaths.EspaceAgentRneDocuments]: ApplicationRights.documentsRne,
[APIRoutesPaths.EspaceAgentDirigeantsProtected]:
ApplicationRights.mandatairesRCS,
[APIRoutesPaths.EspaceAgentAssociationProtected]:
ApplicationRights.associationProtected,
[APIRoutesPaths.RneDirigeants]: ApplicationRights.opendata,
Expand Down
45 changes: 23 additions & 22 deletions clients/api-entreprise/mandataires-rcs/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,10 @@ export type IAPIEntrepriseMandatairesRCS = IAPIEntrepriseResponse<
* GET documents from API Entreprise
*/
export const clientApiEntrepriseMandatairesRCS = async (siren: Siren) => {
return await clientAPIEntreprise<IAPIEntrepriseMandatairesRCS, IDirigeants>(
return await clientAPIEntreprise<
IAPIEntrepriseMandatairesRCS,
IDirigeants['data']
>(
`${process.env.API_ENTREPRISE_URL}${routes.apiEntreprise.mandatairesRCS(
siren
)}`,
Expand All @@ -44,27 +47,25 @@ export const clientApiEntrepriseMandatairesRCS = async (siren: Siren) => {

const mapToDomainObject = (
response: IAPIEntrepriseMandatairesRCS
): IDirigeants => {
return {
data: response.data.map(({ data: dirigeant }) => {
if (dirigeant.type === 'personne_physique') {
return {
sexe: null,
nom: dirigeant.nom,
prenom: dirigeant.prenom,
prenoms: dirigeant.prenom,
role: dirigeant.fonction,
lieuNaissance: dirigeant.lieu_naissance,
dateNaissance: dirigeant.date_naissance,
dateNaissancePartial: dirigeant.date_naissance?.slice(0, 7),
} as IEtatCivil;
}
): IDirigeants['data'] => {
return response.data.map(({ data: dirigeant }) => {
if (dirigeant.type === 'personne_physique') {
return {
siren: dirigeant.numero_identification,
denomination: dirigeant.raison_sociale,
natureJuridique: null,
sexe: null,
nom: dirigeant.nom,
prenom: dirigeant.prenom,
prenoms: dirigeant.prenom,
role: dirigeant.fonction,
} as IPersonneMorale;
}),
};
lieuNaissance: dirigeant.lieu_naissance,
dateNaissance: dirigeant.date_naissance,
dateNaissancePartial: dirigeant.date_naissance?.slice(0, 7),
} as IEtatCivil;
}
return {
siren: dirigeant.numero_identification,
denomination: dirigeant.raison_sociale,
natureJuridique: null,
role: dirigeant.fonction,
} as IPersonneMorale;
});
};
Loading

0 comments on commit d326d6f

Please sign in to comment.