Skip to content

Commit

Permalink
🎨 Bloquer le front si abandon / achevement ETQ PP (#2659)
Browse files Browse the repository at this point in the history
  • Loading branch information
VioMrqs authored Jan 24, 2025
1 parent 5b0a61a commit 4a8e228
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 15 deletions.
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
import { mediator } from 'mediateur';
import { Actionnaire } from '@potentiel-domain/laureat';
import { Abandon, Actionnaire } from '@potentiel-domain/laureat';

import { Option } from '@potentiel-libraries/monads';
import { Candidature } from '@potentiel-domain/candidature';
import { Routes } from '@potentiel-applications/routes';
import { Role } from '@potentiel-domain/utilisateur';
import { getLogger } from '@potentiel-libraries/monitoring';
import { IdentifiantProjet } from '@potentiel-domain/common';
import { getAbandonStatut } from './getAbandon';
import { getAttestationDeConformité } from './getAttestationDeConformité';

export type GetActionnaireForProjectPage =
| {
Expand All @@ -19,11 +21,17 @@ export type GetActionnaireForProjectPage =
}
| undefined;

export const getActionnaire = async (
identifiantProjet: IdentifiantProjet.ValueType,
rôle: string,
demandeNécessiteInstruction: boolean,
): Promise<GetActionnaireForProjectPage> => {
type Props = {
identifiantProjet: IdentifiantProjet.ValueType;
rôle: string;
demandeNécessiteInstruction: boolean;
};

export const getActionnaire = async ({
identifiantProjet,
rôle,
demandeNécessiteInstruction,
}: Props): Promise<GetActionnaireForProjectPage> => {
try {
const utilisateur = Role.convertirEnValueType(rôle);

Expand All @@ -32,6 +40,14 @@ export const getActionnaire = async (
data: { identifiantProjet: identifiantProjet.formatter() },
});

const estAbandonnéOuEnCoursAbandonOuAchevé = await checkAbandonAndAchèvement(
identifiantProjet,
rôle,
);

const nePeutFaireAucuneAction =
utilisateur.nom === 'porteur-projet' && estAbandonnéOuEnCoursAbandonOuAchevé;

if (Option.isSome(actionnaire)) {
const demandeExistanteDeChangement =
await mediator.send<Actionnaire.ConsulterChangementActionnaireQuery>({
Expand All @@ -46,12 +62,14 @@ export const getActionnaire = async (
const peutFaireUneDemandeDeChangement =
demandeNécessiteInstruction &&
utilisateur.aLaPermission('actionnaire.demanderChangement') &&
!aUneDemandeEnCours;
!aUneDemandeEnCours &&
!nePeutFaireAucuneAction;

const peutModifierDirectement =
const peutModifier =
!demandeNécessiteInstruction &&
utilisateur.aLaPermission('actionnaire.modifier') &&
!aUneDemandeEnCours;
!aUneDemandeEnCours &&
!nePeutFaireAucuneAction;

return {
nom: actionnaire.actionnaire,
Expand All @@ -60,7 +78,7 @@ export const getActionnaire = async (
url: Routes.Actionnaire.changement.demander(identifiantProjet.formatter()),
label: "Demander une modification de l'actionnariat",
}
: peutModifierDirectement
: peutModifier
? {
url: Routes.Actionnaire.modifier(identifiantProjet.formatter()),
label: 'Modifier l’actionnariat',
Expand Down Expand Up @@ -102,3 +120,18 @@ export const getActionnaire = async (
return undefined;
}
};

const checkAbandonAndAchèvement = async (
identifiantProjet: Props['identifiantProjet'],
rôle: Props['rôle'],
) => {
const statutAbandon = await getAbandonStatut(identifiantProjet);
const attestationConformitéExistante = await getAttestationDeConformité(identifiantProjet, rôle);

return (
statutAbandon?.statut === 'accordé' ||
(statutAbandon &&
Abandon.StatutAbandon.convertirEnValueType(statutAbandon?.statut).estEnCours()) ||
!!attestationConformitéExistante
);
};
Original file line number Diff line number Diff line change
Expand Up @@ -204,11 +204,11 @@ v1Router.get(
garantiesFinancières,
représentantLégal: await getReprésentantLégal(identifiantProjetValueType, user.role),
demandeRecours: await getRecours(identifiantProjetValueType),
actionnaire: await getActionnaire(
identifiantProjetValueType,
user.role,
demandeNécessiteInstructionPourActionnaire,
),
actionnaire: await getActionnaire({
identifiantProjet: identifiantProjetValueType,
rôle: user.role,
demandeNécessiteInstruction: demandeNécessiteInstructionPourActionnaire,
}),
hasAttestationConformité: !!attestationConformité,
modificationsNonPermisesParLeCDCActuel:
project.cahierDesChargesActuel.type === 'initial' &&
Expand Down

0 comments on commit 4a8e228

Please sign in to comment.