Skip to content

Commit

Permalink
feat: fix nb into tags & add Aucune as admin response
Browse files Browse the repository at this point in the history
  • Loading branch information
maximeperrault authored and maximeperraultdev committed Jul 31, 2024
1 parent 8aaf5e7 commit b1bcab0
Show file tree
Hide file tree
Showing 7 changed files with 52 additions and 27 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,5 @@ enum class AdministrativeResponseEnum {
SANCTION,
REGULARIZATION,
PENDING,
NONE,
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package fr.gouv.cacem.monitorenv.infrastructure.api.inputs.actions
package fr.gouv.cacem.monitorenv.infrastructure.api.adapters.missions

import fr.gouv.cacem.monitorenv.domain.entities.VehicleTypeEnum
import fr.gouv.cacem.monitorenv.domain.entities.mission.ActionCompletionEnum
Expand Down
5 changes: 3 additions & 2 deletions frontend/src/domain/entities/missions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -124,12 +124,13 @@ export const formalNoticeLabels = {
libelle: 'En attente'
}
}
export type AdministrativeResponseType = 'SANCTION' | 'REGULARIZATION' | 'PENDING'
export type AdministrativeResponseType = 'SANCTION' | 'REGULARIZATION' | 'PENDING' | 'NONE'

export const administrativeResponseOptions: { label: string; value: AdministrativeResponseType }[] = [
{ label: 'Sanction', value: 'SANCTION' },
{ label: 'Régularisation', value: 'REGULARIZATION' },
{ label: 'En attente', value: 'PENDING' }
{ label: 'En attente', value: 'PENDING' },
{ label: 'Aucune', value: 'NONE' }
]

export const hasMissionOrderLabels = {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import { NewInfractionSchema } from '@features/missions/MissionForm/Schemas/Infraction'
import {
Accent,
Button,
Expand All @@ -12,11 +13,10 @@ import {
administrativeResponseOptions,
formalNoticeLabels,
infractionTypeLabels,
type EnvActionControl,
type Mission
type Infraction
} from 'domain/entities/missions'
import { TargetTypeEnum } from 'domain/entities/targetType'
import { useField, useFormikContext, type FormikErrors } from 'formik'
import { useField } from 'formik'
import { useState, type MouseEventHandler } from 'react'
import styled from 'styled-components'

Expand Down Expand Up @@ -46,21 +46,21 @@ export function InfractionForm({

const showTooltip = () => setIsVisibleTooltip(true)
const hideTooltip = () => setIsVisibleTooltip(false)
const { errors } = useFormikContext<Mission<EnvActionControl>>()
const infractionPath = `envActions[${envActionIndex}].infractions[${currentInfractionIndex}]`

const [infraction] = useField<Infraction>(infractionPath)
const [actionTargetField] = useField<string>(`envActions.${envActionIndex}.actionTargetType`)
const [nbTarget] = useField<number>(`${infractionPath}.nbTarget`)

function isInfractionFormInvalid(errorsForm: FormikErrors<Mission<EnvActionControl>>) {
const envActionErrors = (!!errorsForm.envActions &&
errorsForm.envActions[envActionIndex]) as FormikErrors<EnvActionControl>
const isValid = () => {
try {
NewInfractionSchema.validateSync(infraction.value)

return envActionErrors && !!envActionErrors.infractions
return true
} catch (error) {
return false
}
}

const isInvalid = isInfractionFormInvalid(errors)

const disableIdentificationFields = nbTarget.value > 1

return (
Expand Down Expand Up @@ -148,7 +148,7 @@ export function InfractionForm({
<Button accent={Accent.TERTIARY} onClick={removeInfraction}>
Supprimer l&apos;infraction
</Button>
<Button data-cy="infraction-form-validate" disabled={isInvalid} onClick={validateInfraction}>
<Button data-cy="infraction-form-validate" disabled={!isValid()} onClick={validateInfraction}>
Valider l&apos;infraction
</Button>
</ButtonContainer>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,12 @@ export function InfractionFormHeaderVehicle({ envActionIndex, infractionPath, is
{vehicleTypeField?.value === VehicleTypeEnum.VESSEL && (
<>
<StyledVesselForm>
<FormikTextInput label="MMSI" name={`${infractionPath}.mmsi`} />
<FormikTextInput
disabled={isDisabled}
isUndefinedWhenDisabled
label="MMSI"
name={`${infractionPath}.mmsi`}
/>
<FormikTextInput
data-cy="infraction-form-vesselName"
disabled={isDisabled}
Expand All @@ -50,7 +55,7 @@ export function InfractionFormHeaderVehicle({ envActionIndex, infractionPath, is
/>
</StyledVesselForm>
<StyledVesselForm>
<FormikTextInput label="IMO" name={`${infractionPath}.imo`} />
<FormikTextInput disabled={isDisabled} isUndefinedWhenDisabled label="IMO" name={`${infractionPath}.imo`} />
<FormikTextInput
data-cy="infraction-form-controlledPersonIdentity"
disabled={isDisabled}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,9 @@ export const NewInfractionSchema: Yup.SchemaOf<Infraction> = Yup.object().shape(
})

export const CompletionInfractionSchema: Yup.SchemaOf<Infraction> = NewInfractionSchema.shape({
administrativeResponse: Yup.mixed<AdministrativeResponseType>()
.oneOf(['SANCTION', 'REGULARIZATION', 'NONE'])
.required(),
formalNotice: Yup.mixed().oneOf([FormalNoticeEnum.YES, FormalNoticeEnum.NO]).required(),
infractionType: Yup.mixed().oneOf([InfractionTypeEnum.WITH_REPORT, InfractionTypeEnum.WITHOUT_REPORT]).required()
})
35 changes: 25 additions & 10 deletions frontend/src/features/missions/Missions.helpers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ import type { LegacyControlUnit } from '../../domain/entities/legacyControlUnit'
import type { AtLeast } from '../../types'

export const infractionFactory = (infraction?: Partial<Infraction>): NewInfraction => ({
administrativeResponse: 'NONE',
id: uuidv4(),
natinf: [],
nbTarget: 1,
Expand Down Expand Up @@ -168,17 +169,31 @@ export const controlUnitFactory = ({ ...resourceUnit } = {}): Omit<LegacyControl
})

export const getControlInfractionsTags = (actionNumberOfControls: number, infractions: Infraction[]) => {
const totalInfractions = infractions?.length || 0
const totalInfractions = infractions?.reduce((acc, infraction) => acc + infraction.nbTarget, 0)
const ras = (actionNumberOfControls || 0) - totalInfractions
const infractionsWithReport =
infractions?.filter(inf => inf.infractionType === InfractionTypeEnum.WITH_REPORT)?.length || 0
const infractionsWithoutReport =
infractions?.filter(inf => inf.infractionType === InfractionTypeEnum.WITHOUT_REPORT)?.length || 0
const infractionsWithWaitingReport =
infractions?.filter(inf => inf.infractionType === InfractionTypeEnum.WAITING)?.length || 0
const med = infractions?.filter(inf => inf.formalNotice === FormalNoticeEnum.YES)?.length || 0
const sanctionAdmin = infractions?.filter(inf => inf.administrativeResponse === 'SANCTION')?.length || 0
const regulAdmin = infractions?.filter(inf => inf.administrativeResponse === 'REGULARIZATION')?.length || 0

const infractionsWithReport = infractions
?.filter(inf => inf.infractionType === InfractionTypeEnum.WITH_REPORT)
.reduce((acc, infraction) => acc + infraction.nbTarget, 0)

const infractionsWithoutReport = infractions
?.filter(inf => inf.infractionType === InfractionTypeEnum.WITHOUT_REPORT)
.reduce((acc, infraction) => acc + infraction.nbTarget, 0)

const infractionsWithWaitingReport = infractions
?.filter(inf => inf.infractionType === InfractionTypeEnum.WAITING)
.reduce((acc, infraction) => acc + infraction.nbTarget, 0)

const med = infractions
?.filter(inf => inf.formalNotice === FormalNoticeEnum.YES)
.reduce((acc, infraction) => acc + infraction.nbTarget, 0)

const sanctionAdmin = infractions
?.filter(inf => inf.administrativeResponse === 'SANCTION')
.reduce((acc, infraction) => acc + infraction.nbTarget, 0)
const regulAdmin = infractions
?.filter(inf => inf.administrativeResponse === 'REGULARIZATION')
.reduce((acc, infraction) => acc + infraction.nbTarget, 0)

return {
infractionsWithoutReport,
Expand Down

0 comments on commit b1bcab0

Please sign in to comment.