mirror of
				https://gitlab.com/Chill-Projet/chill-bundles.git
				synced 2025-11-04 03:08:25 +00:00 
			
		
		
		
	Feature: add a list for people with their associated accompanying course
This commit is contained in:
		
							
								
								
									
										5
									
								
								.changes/unreleased/Feature-20230707-123609.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								.changes/unreleased/Feature-20230707-123609.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
			
		||||
kind: Feature
 | 
			
		||||
body: '[export] Add a list for people with their associated course'
 | 
			
		||||
time: 2023-07-07T12:36:09.596469063+02:00
 | 
			
		||||
custom:
 | 
			
		||||
  Issue: "125"
 | 
			
		||||
@@ -97,7 +97,7 @@ interface ExportInterface extends ExportElementInterface
 | 
			
		||||
     * @param mixed[] $values The values from the result. if there are duplicates, those might be given twice. Example: array('FR', 'BE', 'CZ', 'FR', 'BE', 'FR')
 | 
			
		||||
     * @param mixed $data The data from the export's form (as defined in `buildForm`)
 | 
			
		||||
     *
 | 
			
		||||
     * @return callable(null|string|int|float|'_header' $value): string|int|\DateTimeInterface where the first argument is the value, and the function should return the label to show in the formatted file. Example : `function($countryCode) use ($countries) { return $countries[$countryCode]->getName(); }`
 | 
			
		||||
     * @return (callable(null|string|int|float|'_header' $value): string|int|\DateTimeInterface) where the first argument is the value, and the function should return the label to show in the formatted file. Example : `function($countryCode) use ($countries) { return $countries[$countryCode]->getName(); }`
 | 
			
		||||
     */
 | 
			
		||||
    public function getLabels($key, array $values, $data);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,149 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
declare(strict_types=1);
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Chill is a software for social workers
 | 
			
		||||
 *
 | 
			
		||||
 * For the full copyright and license information, please view
 | 
			
		||||
 * the LICENSE file that was distributed with this source code.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
namespace Chill\PersonBundle\Export\Export;
 | 
			
		||||
 | 
			
		||||
use Chill\MainBundle\Export\ExportElementValidatedInterface;
 | 
			
		||||
use Chill\MainBundle\Export\FormatterInterface;
 | 
			
		||||
use Chill\MainBundle\Export\GroupedExportInterface;
 | 
			
		||||
use Chill\MainBundle\Export\Helper\ExportAddressHelper;
 | 
			
		||||
use Chill\MainBundle\Export\ListInterface;
 | 
			
		||||
use Chill\MainBundle\Form\Type\ChillDateType;
 | 
			
		||||
use Chill\MainBundle\Form\Type\PickRollingDateType;
 | 
			
		||||
use Chill\MainBundle\Service\RollingDate\RollingDate;
 | 
			
		||||
use Chill\MainBundle\Service\RollingDate\RollingDateConverterInterface;
 | 
			
		||||
use Chill\PersonBundle\Entity\AccompanyingPeriod;
 | 
			
		||||
use Chill\PersonBundle\Entity\Person;
 | 
			
		||||
use Chill\PersonBundle\Entity\Person\PersonCenterHistory;
 | 
			
		||||
use Chill\PersonBundle\Export\Declarations;
 | 
			
		||||
use Chill\PersonBundle\Export\Helper\ListAccompanyingPeriodHelper;
 | 
			
		||||
use Chill\PersonBundle\Export\Helper\ListPersonHelper;
 | 
			
		||||
use Chill\PersonBundle\Security\Authorization\PersonVoter;
 | 
			
		||||
use DateTimeImmutable;
 | 
			
		||||
use Doctrine\ORM\AbstractQuery;
 | 
			
		||||
use Doctrine\ORM\EntityManagerInterface;
 | 
			
		||||
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
 | 
			
		||||
use Symfony\Component\Form\FormBuilderInterface;
 | 
			
		||||
use Symfony\Component\Validator\Constraints\Callback;
 | 
			
		||||
use Symfony\Component\Validator\Context\ExecutionContextInterface;
 | 
			
		||||
use function array_key_exists;
 | 
			
		||||
use function count;
 | 
			
		||||
use function in_array;
 | 
			
		||||
use function strlen;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * List the persons having an accompanying period, with the accompanying period details
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
final readonly class ListPersonWithAccompanyingPeriodDetails implements ListInterface, GroupedExportInterface
 | 
			
		||||
{
 | 
			
		||||
    public function __construct(
 | 
			
		||||
        private ListPersonHelper $listPersonHelper,
 | 
			
		||||
        private ListAccompanyingPeriodHelper $listAccompanyingPeriodHelper,
 | 
			
		||||
        private EntityManagerInterface $entityManager,
 | 
			
		||||
        private RollingDateConverterInterface $rollingDateConverter,
 | 
			
		||||
    ) {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function buildForm(FormBuilderInterface $builder)
 | 
			
		||||
    {
 | 
			
		||||
        $builder->add('address_date', PickRollingDateType::class, [
 | 
			
		||||
            'label' => 'Data valid at this date',
 | 
			
		||||
            'help' => 'Data regarding center, addresses, and so on will be computed at this date',
 | 
			
		||||
        ]);
 | 
			
		||||
    }
 | 
			
		||||
    public function getFormDefaultData(): array
 | 
			
		||||
    {
 | 
			
		||||
        return ['address_date' => new RollingDate(RollingDate::T_TODAY)];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getAllowedFormattersTypes()
 | 
			
		||||
    {
 | 
			
		||||
        return [FormatterInterface::TYPE_LIST];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getDescription()
 | 
			
		||||
    {
 | 
			
		||||
        return 'export.list.person_with_acp.Create a list of people having an accompaying periods with details of period, according to various filters.';
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getGroup(): string
 | 
			
		||||
    {
 | 
			
		||||
        return 'Exports of persons';
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getLabels($key, array $values, $data)
 | 
			
		||||
    {
 | 
			
		||||
        if (in_array($key, $this->listPersonHelper->getAllKeys(), true)) {
 | 
			
		||||
            return $this->listPersonHelper->getLabels($key, $values, $data);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return $this->listAccompanyingPeriodHelper->getLabels($key, $values, $data);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getQueryKeys($data)
 | 
			
		||||
    {
 | 
			
		||||
        return array_merge(
 | 
			
		||||
            $this->listPersonHelper->getAllKeys(),
 | 
			
		||||
            $this->listAccompanyingPeriodHelper->getQueryKeys($data),
 | 
			
		||||
        );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getResult($query, $data)
 | 
			
		||||
    {
 | 
			
		||||
        return $query->getQuery()->getResult(AbstractQuery::HYDRATE_SCALAR);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getTitle()
 | 
			
		||||
    {
 | 
			
		||||
        return 'export.list.person_with_acp.List peoples having an accompanying period with period details';
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getType()
 | 
			
		||||
    {
 | 
			
		||||
        return Declarations::PERSON_TYPE;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * param array{fields: string[], address_date: DateTimeImmutable} $data.
 | 
			
		||||
     */
 | 
			
		||||
    public function initiateQuery(array $requiredModifiers, array $acl, array $data = [])
 | 
			
		||||
    {
 | 
			
		||||
        $centers = array_map(static fn ($el) => $el['center'], $acl);
 | 
			
		||||
 | 
			
		||||
        $qb = $this->entityManager->createQueryBuilder();
 | 
			
		||||
 | 
			
		||||
        $qb->from(Person::class, 'person')
 | 
			
		||||
            ->join('person.accompanyingPeriodParticipations', 'acppart')
 | 
			
		||||
            ->join('acppart.accompanyingPeriod', 'acp')
 | 
			
		||||
            ->andWhere($qb->expr()->neq('acp.step', "'" . AccompanyingPeriod::STEP_DRAFT . "'"))
 | 
			
		||||
            ->andWhere(
 | 
			
		||||
                $qb->expr()->exists(
 | 
			
		||||
                    'SELECT 1 FROM ' . PersonCenterHistory::class . ' pch WHERE pch.person = person.id AND pch.center IN (:authorized_centers)'
 | 
			
		||||
                )
 | 
			
		||||
            )->setParameter('authorized_centers', $centers);
 | 
			
		||||
 | 
			
		||||
        $this->listPersonHelper->addSelect($qb, ListPersonHelper::FIELDS, $this->rollingDateConverter->convert($data['address_date']));
 | 
			
		||||
        $this->listAccompanyingPeriodHelper->addSelectClauses($qb, $this->rollingDateConverter->convert($data['address_date']));
 | 
			
		||||
 | 
			
		||||
        return $qb;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function requiredRole(): string
 | 
			
		||||
    {
 | 
			
		||||
        return PersonVoter::LISTS;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function supportsModifiers()
 | 
			
		||||
    {
 | 
			
		||||
        return [Declarations::PERSON_TYPE, Declarations::PERSON_IMPLIED_IN, Declarations::ACP_TYPE];
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -58,10 +58,10 @@ final readonly class ListAccompanyingPeriodHelper
 | 
			
		||||
        'requestorThirdPartyId',
 | 
			
		||||
        'scopes',
 | 
			
		||||
        'socialIssues',
 | 
			
		||||
        'createdAt',
 | 
			
		||||
        'createdBy',
 | 
			
		||||
        'updatedAt',
 | 
			
		||||
        'updatedBy',
 | 
			
		||||
        'acpCreatedAt',
 | 
			
		||||
        'acpCreatedBy',
 | 
			
		||||
        'acpUpdatedAt',
 | 
			
		||||
        'acpUpdatedBy',
 | 
			
		||||
    ];
 | 
			
		||||
 | 
			
		||||
    public function __construct(
 | 
			
		||||
@@ -82,14 +82,14 @@ final readonly class ListAccompanyingPeriodHelper
 | 
			
		||||
    {
 | 
			
		||||
        return array_merge(
 | 
			
		||||
            ListAccompanyingPeriodHelper::FIELDS,
 | 
			
		||||
            $this->addressHelper->getKeys(ExportAddressHelper::F_ALL, 'address_fields')
 | 
			
		||||
            $this->addressHelper->getKeys(ExportAddressHelper::F_ALL, 'acp_address_fields')
 | 
			
		||||
        );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getLabels($key, array $values, $data)
 | 
			
		||||
    {
 | 
			
		||||
        if (substr($key, 0, strlen('address_fields')) === 'address_fields') {
 | 
			
		||||
            return $this->addressHelper->getLabel($key, $values, $data, 'address_fields');
 | 
			
		||||
        if (str_starts_with($key, 'acp_address_fields')) {
 | 
			
		||||
            return $this->addressHelper->getLabel($key, $values, $data, 'acp_address_fields');
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        switch ($key) {
 | 
			
		||||
@@ -97,8 +97,8 @@ final readonly class ListAccompanyingPeriodHelper
 | 
			
		||||
            case 'openingDate':
 | 
			
		||||
            case 'closingDate':
 | 
			
		||||
            case 'referrerSince':
 | 
			
		||||
            case 'createdAt':
 | 
			
		||||
            case 'updatedAt':
 | 
			
		||||
            case 'acpCreatedAt':
 | 
			
		||||
            case 'acpUpdatedAt':
 | 
			
		||||
                return $this->dateTimeHelper->getLabel('export.list.acp.' . $key);
 | 
			
		||||
 | 
			
		||||
            case 'origin':
 | 
			
		||||
@@ -220,14 +220,23 @@ final readonly class ListAccompanyingPeriodHelper
 | 
			
		||||
    public function addSelectClauses(QueryBuilder $qb, \DateTimeImmutable $calcDate): void
 | 
			
		||||
    {
 | 
			
		||||
        $qb->addSelect('acp.id AS acpId');
 | 
			
		||||
        $qb->addSelect('acp.createdAt AS acpCreatedAt');
 | 
			
		||||
        $qb->addSelect('acp.updatedAt AS acpUpdatedAt');
 | 
			
		||||
 | 
			
		||||
        // add the regular fields
 | 
			
		||||
        foreach (['openingDate', 'closingDate', 'confidential', 'emergency', 'intensity', 'createdAt', 'updatedAt'] as $field) {
 | 
			
		||||
        foreach (['openingDate', 'closingDate', 'confidential', 'emergency', 'intensity'] as $field) {
 | 
			
		||||
            $qb->addSelect(sprintf('acp.%s AS %s', $field, $field));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // add the field which are simple association
 | 
			
		||||
        foreach (['origin' => 'label', 'closingMotive' => 'name', 'job' => 'label', 'createdBy' => 'label', 'updatedBy' => 'label', 'administrativeLocation' => 'name'] as $entity => $field) {
 | 
			
		||||
        $qb
 | 
			
		||||
            ->leftJoin('acp.createdBy', "acp_created_by_t")
 | 
			
		||||
            ->addSelect('acp_created_by_t.label AS acpCreatedBy');
 | 
			
		||||
        $qb
 | 
			
		||||
            ->leftJoin('acp.updatedBy', "acp_updated_by_t")
 | 
			
		||||
            ->addSelect('acp_updated_by_t.label AS acpUpdatedBy');
 | 
			
		||||
 | 
			
		||||
        foreach (['origin' => 'label', 'closingMotive' => 'name', 'job' => 'label', 'administrativeLocation' => 'name'] as $entity => $field) {
 | 
			
		||||
            $qb
 | 
			
		||||
                ->leftJoin(sprintf('acp.%s', $entity), "{$entity}_t")
 | 
			
		||||
                ->addSelect(sprintf('%s_t.%s AS %s', $entity, $field, $entity));
 | 
			
		||||
@@ -279,13 +288,13 @@ final readonly class ListAccompanyingPeriodHelper
 | 
			
		||||
            )
 | 
			
		||||
            ->leftJoin(
 | 
			
		||||
                PersonHouseholdAddress::class,
 | 
			
		||||
                'personAddress',
 | 
			
		||||
                'acpPersonAddress',
 | 
			
		||||
                Join::WITH,
 | 
			
		||||
                'locationHistory.personLocation = personAddress.person AND (personAddress.validFrom <= :calcDate AND (personAddress.validTo IS NULL OR personAddress.validTo > :calcDate))'
 | 
			
		||||
                'locationHistory.personLocation = acpPersonAddress.person AND (acpPersonAddress.validFrom <= :calcDate AND (acpPersonAddress.validTo IS NULL OR acpPersonAddress.validTo > :calcDate))'
 | 
			
		||||
            )
 | 
			
		||||
            ->leftJoin(Address::class, 'acp_address', Join::WITH, 'COALESCE(IDENTITY(locationHistory.addressLocation), IDENTITY(personAddress.address)) = acp_address.id');
 | 
			
		||||
            ->leftJoin(Address::class, 'acp_address', Join::WITH, 'COALESCE(IDENTITY(locationHistory.addressLocation), IDENTITY(acpPersonAddress.address)) = acp_address.id');
 | 
			
		||||
 | 
			
		||||
        $this->addressHelper->addSelectClauses(ExportAddressHelper::F_ALL, $qb, 'acp_address', 'address_fields');
 | 
			
		||||
        $this->addressHelper->addSelectClauses(ExportAddressHelper::F_ALL, $qb, 'acp_address', 'acp_address_fields');
 | 
			
		||||
 | 
			
		||||
        // requestor
 | 
			
		||||
        $qb
 | 
			
		||||
 
 | 
			
		||||
@@ -11,6 +11,7 @@ declare(strict_types=1);
 | 
			
		||||
 | 
			
		||||
namespace Chill\PersonBundle\Export\Helper;
 | 
			
		||||
 | 
			
		||||
use Chill\MainBundle\Entity\Language;
 | 
			
		||||
use Chill\MainBundle\Export\Helper\ExportAddressHelper;
 | 
			
		||||
use Chill\MainBundle\Repository\CenterRepositoryInterface;
 | 
			
		||||
use Chill\MainBundle\Repository\CivilityRepositoryInterface;
 | 
			
		||||
@@ -114,7 +115,26 @@ class ListPersonHelper
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param array|value-of<self::FIELDS>[] $fields
 | 
			
		||||
     * Those keys are the "direct" keys, which are created when we decide to use to list all the keys.
 | 
			
		||||
     *
 | 
			
		||||
     * This method must be used in `getKeys` instead of the `self::FIELDS`
 | 
			
		||||
     *
 | 
			
		||||
     * @return array<string>
 | 
			
		||||
     */
 | 
			
		||||
    public function getAllKeys(): array
 | 
			
		||||
    {
 | 
			
		||||
        return [
 | 
			
		||||
            ...array_filter(
 | 
			
		||||
                ListPersonHelper::FIELDS,
 | 
			
		||||
                fn (string $key) => !in_array($key, ['address_fields', 'lifecycleUpdate'], true)
 | 
			
		||||
            ),
 | 
			
		||||
            ...$this->addressHelper->getKeys(ExportAddressHelper::F_ALL, 'address_fields'),
 | 
			
		||||
            ...['createdAt', 'createdBy', 'updatedAt', 'updatedBy'],
 | 
			
		||||
        ];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param array<value-of<self::FIELDS>> $fields
 | 
			
		||||
     */
 | 
			
		||||
    public function addSelect(QueryBuilder $qb, array $fields, DateTimeImmutable $computedDate): void
 | 
			
		||||
    {
 | 
			
		||||
@@ -143,25 +163,7 @@ class ListPersonHelper
 | 
			
		||||
                    break;
 | 
			
		||||
 | 
			
		||||
                case 'spokenLanguages':
 | 
			
		||||
                    $qb
 | 
			
		||||
                        ->leftJoin('person.spokenLanguages', 'spokenLanguage')
 | 
			
		||||
                        ->addSelect('AGGREGATE(spokenLanguage.id) AS spokenLanguages')
 | 
			
		||||
                        ->addGroupBy('person');
 | 
			
		||||
 | 
			
		||||
                    if (in_array('center', $fields, true)) {
 | 
			
		||||
                        $qb->addGroupBy('center');
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    if (in_array('address_fields', $fields, true)) {
 | 
			
		||||
                        $qb
 | 
			
		||||
                            ->addGroupBy('address_fieldsid')
 | 
			
		||||
                            ->addGroupBy('address_fieldscountry_t.id')
 | 
			
		||||
                            ->addGroupBy('address_fieldspostcode_t.id');
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    if (in_array('household_id', $fields, true)) {
 | 
			
		||||
                        $qb->addGroupBy('household_id');
 | 
			
		||||
                    }
 | 
			
		||||
                    $qb->addSelect('(SELECT AGGREGATE(language.id) FROM ' . Language::class . ' language WHERE language MEMBER OF person.spokenLanguages) AS spokenLanguages');
 | 
			
		||||
 | 
			
		||||
                    break;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -4,35 +4,27 @@ services:
 | 
			
		||||
        autowire: true
 | 
			
		||||
 | 
			
		||||
    ## Indicators
 | 
			
		||||
    chill.person.export.count_person:
 | 
			
		||||
        class: Chill\PersonBundle\Export\Export\CountPerson
 | 
			
		||||
        autowire: true
 | 
			
		||||
        autoconfigure: true
 | 
			
		||||
    Chill\PersonBundle\Export\Export\CountPerson:
 | 
			
		||||
        tags:
 | 
			
		||||
            - { name: chill.export, alias: count_person }
 | 
			
		||||
 | 
			
		||||
    chill.person.export.count_person_with_accompanying_course:
 | 
			
		||||
        class: Chill\PersonBundle\Export\Export\CountPersonWithAccompanyingCourse
 | 
			
		||||
        autowire: true
 | 
			
		||||
        autoconfigure: true
 | 
			
		||||
    Chill\PersonBundle\Export\Export\CountPersonWithAccompanyingCourse:
 | 
			
		||||
        tags:
 | 
			
		||||
            - { name: chill.export, alias: count_person_with_accompanying_course }
 | 
			
		||||
 | 
			
		||||
    Chill\PersonBundle\Export\Export\ListPerson:
 | 
			
		||||
        autowire: true
 | 
			
		||||
        autoconfigure: true
 | 
			
		||||
        tags:
 | 
			
		||||
            - { name: chill.export, alias: list_person }
 | 
			
		||||
 | 
			
		||||
    Chill\PersonBundle\Export\Export\ListPersonHavingAccompanyingPeriod:
 | 
			
		||||
        autowire: true
 | 
			
		||||
        autoconfigure: true
 | 
			
		||||
        tags:
 | 
			
		||||
            - { name: chill.export, alias: list_person_with_acp }
 | 
			
		||||
 | 
			
		||||
    Chill\PersonBundle\Export\Export\ListPersonWithAccompanyingPeriodDetails:
 | 
			
		||||
        tags:
 | 
			
		||||
            - { name: chill.export, alias: list_person_with_acp_details }
 | 
			
		||||
 | 
			
		||||
    Chill\PersonBundle\Export\Export\ListAccompanyingPeriod:
 | 
			
		||||
        autowire: true
 | 
			
		||||
        autoconfigure: true
 | 
			
		||||
        tags:
 | 
			
		||||
            - { name: chill.export, alias: list_acp }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1148,7 +1148,9 @@ export:
 | 
			
		||||
    list:
 | 
			
		||||
        person_with_acp:
 | 
			
		||||
            List peoples having an accompanying period: Liste des usagers ayant un parcours d'accompagnement
 | 
			
		||||
            List peoples having an accompanying period with period details: Liste des usagers concernés avec détail de chaque parcours
 | 
			
		||||
            Create a list of people having an accompaying periods, according to various filters.: Génère une liste des usagers ayant un parcours d'accompagnement, selon différents critères liés au parcours ou à l'usager
 | 
			
		||||
            Create a list of people having an accompaying periods with details of period, according to various filters.: Génère une liste des usagers ayant un parcours d'accompagnement, selon différents critères liés au parcours ou à l'usager. Ajoute les détails du parcours à la liste.
 | 
			
		||||
        acp:
 | 
			
		||||
            List of accompanying periods: Liste des parcours d'accompagnements
 | 
			
		||||
            Generate a list of accompanying periods, filtered on different parameters.: Génère une liste des parcours d'accompagnement, filtrée sur différents paramètres.
 | 
			
		||||
@@ -1162,14 +1164,14 @@ export:
 | 
			
		||||
            confidential: Confidentiel
 | 
			
		||||
            emergency: Urgent
 | 
			
		||||
            intensity: Intensité
 | 
			
		||||
            createdAt: Créé le
 | 
			
		||||
            updatedAt: Dernière mise à jour le
 | 
			
		||||
            acpCreatedAt: Créé le
 | 
			
		||||
            acpUpdatedAt: Dernière mise à jour le
 | 
			
		||||
            acpOrigin: Origine du parcours
 | 
			
		||||
            origin: Origine du parcours
 | 
			
		||||
            acpClosingMotive: Motif de fermeture
 | 
			
		||||
            acpJob: Métier du parcours
 | 
			
		||||
            createdBy: Créé par
 | 
			
		||||
            updatedBy: Dernière modification par
 | 
			
		||||
            acpCreatedBy: Créé par
 | 
			
		||||
            acpUpdatedBy: Dernière modification par
 | 
			
		||||
            administrativeLocation: Location administrative
 | 
			
		||||
            step: Etape
 | 
			
		||||
            stepSince: Dernière modification de l'étape
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user