Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import type { Metadata } from 'next';
import { redirect } from 'next/navigation';

import { GestionnaireRéseau } from '@potentiel-domain/reseau';
import { Utilisateur } from '@potentiel-domain/utilisateur';
import { Role, Utilisateur } from '@potentiel-domain/utilisateur';
import { Option } from '@potentiel-libraries/monads';
import { Routes } from '@potentiel-applications/routes';
import { mapToPlainObject } from '@potentiel-domain/core';
Expand Down Expand Up @@ -35,7 +35,7 @@ export default async function Page({ params: { identifiant } }: PageProps) {
decodeParameter(identifiant),
);

await récupérerLauréatNonAbandonné(identifiantProjet.formatter());
const projet = await récupérerLauréatNonAbandonné(identifiantProjet.formatter());

const raccordement = await mediator.send<Lauréat.Raccordement.ConsulterRaccordementQuery>({
type: 'Lauréat.Raccordement.Query.ConsulterRaccordement',
Expand Down Expand Up @@ -73,7 +73,11 @@ export default async function Page({ params: { identifiant } }: PageProps) {
<DétailsRaccordementDuProjetPage
identifiantProjet={mapToPlainObject(identifiantProjet)}
gestionnaireRéseau={mapToPlainObject(gestionnaireRéseau)}
dossiers={mapToDossierActions(utilisateur, raccordement.dossiers)}
dossiers={mapToDossierActions({
rôle: utilisateur.rôle,
projetAchevé: projet.statut.estAchevé(),
dossiers: raccordement.dossiers,
})}
actions={mapToRaccordementActions(utilisateur)}
lienRetour={lienRetour}
/>
Expand All @@ -82,10 +86,13 @@ export default async function Page({ params: { identifiant } }: PageProps) {
);
}

const mapToDossierActions = (
{ rôle }: Utilisateur.ValueType,
dossiers: Lauréat.Raccordement.ConsulterRaccordementReadModel['dossiers'],
): DétailsRaccordementPageProps['dossiers'] =>
type MapToDossierActions = (args: {
rôle: Role.ValueType;
projetAchevé: boolean;
dossiers: Lauréat.Raccordement.ConsulterRaccordementReadModel['dossiers'];
}) => DétailsRaccordementPageProps['dossiers'];

const mapToDossierActions: MapToDossierActions = ({ rôle, projetAchevé, dossiers }) =>
dossiers.map((dossier) =>
mapToPlainObject({
...dossier,
Expand All @@ -94,7 +101,9 @@ const mapToDossierActions = (

demandeComplèteRaccordement: {
transmettre: rôle.aLaPermission('raccordement.demande-complète-raccordement.transmettre'),
modifier: rôle.aLaPermission('raccordement.demande-complète-raccordement.modifier'),
modifier:
!projetAchevé &&
rôle.aLaPermission('raccordement.demande-complète-raccordement.modifier'),
modifierRéférence:
rôle.aLaPermission('raccordement.référence-dossier.modifier') &&
!rôle.aLaPermission('raccordement.demande-complète-raccordement.modifier'),
Expand Down
8 changes: 8 additions & 0 deletions packages/domain/projet/src/lauréat/raccordement/errors.ts
Original file line number Diff line number Diff line change
Expand Up @@ -103,3 +103,11 @@ export class DossierRaccordementPasEnServiceError extends InvalidOperationError
super(`Le dossier de raccordement n'est pas en service`);
}
}

export class DemandeComplèteRaccordementNonModifiableCarProjetAchevéError extends InvalidOperationError {
constructor() {
super(
`La demande complète de raccordement du dossier ne peut pas être modifiée car le projet est achevé`,
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ import {
RéférenceDossierRaccordementDéjàExistantePourLeProjetError,
RéférenceDossierRaccordementNonModifiableCarDossierAvecDateDeMiseEnServiceError,
RéférencesDossierRaccordementIdentiquesError,
DemandeComplèteRaccordementNonModifiableCarProjetAchevéError,
} from './errors';
import { TransmettrePropositionTechniqueEtFinancièreOptions } from './transmettre/propositionTechniqueEtFinancière/transmettrePropositionTechniqueEtFinancière.options';
import { TransmettreDemandeOptions } from './transmettre/demandeComplèteDeRaccordement/transmettreDemandeComplèteRaccordement.options';
Expand Down Expand Up @@ -351,6 +352,10 @@ export class RaccordementAggregate extends AbstractAggregate<
référenceDossierRaccordement,
rôle,
}: ModifierDemandeComplèteOptions) {
if (this.lauréat.achèvement.estAchevé) {
throw new DemandeComplèteRaccordementNonModifiableCarProjetAchevéError();
}

if (dateQualification.estDansLeFutur()) {
throw new DateDansLeFuturError();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,3 +56,9 @@ Fonctionnalité: Modifier une demande complète de raccordement
Et une date de mise en service pour le dossier de raccordement du projet lauréat
Quand la dreal modifie la demande complète de raccordement
Alors la dreal devrait être informé que "La demande complète de raccordement du dossier ne peut pas être modifiée car celui-ci dispose déjà d'une date de mise en service"

Scénario: Impossible pour un porteur de modifier une demande complète de raccordement si le projet est achevé
Etant donné une attestation de conformité transmise pour le projet lauréat
Et une demande complète de raccordement pour le projet lauréat
Quand le porteur modifie la demande complète de raccordement
Alors le porteur devrait être informé que "La demande complète de raccordement du dossier ne peut pas être modifiée car le projet est achevé"
Original file line number Diff line number Diff line change
Expand Up @@ -182,7 +182,7 @@ async function modifierDemandeComplèteRaccordement(
});

try {
await mediator.send<Lauréat.Raccordement.RaccordementUseCase>({
await mediator.send<Lauréat.Raccordement.ModifierDemandeComplèteRaccordementUseCase>({
type: 'Lauréat.Raccordement.UseCase.ModifierDemandeComplèteRaccordement',
data: {
identifiantProjetValue: identifiantProjet,
Expand Down
Loading