Browse Source

refactoring Enum

Vincent 1 year ago
parent
commit
0496febfb7
100 changed files with 908 additions and 985 deletions
  1. 11 11
      config/opentalent/enum.yaml
  2. 4 17
      src/ApiResources/Core/File/Upload.php
  3. 5 4
      src/ApiResources/Cotisation/Cotisation.php
  4. 4 11
      src/ApiResources/Export/ExportRequest.php
  5. 2 3
      src/ApiResources/Export/LicenceCmf/LicenceCmfOrganizationER.php
  6. 6 3
      src/ApiResources/OnlineRegistration/RegistrationStatus.php
  7. 6 3
      src/ApiResources/Profile/AccessProfile.php
  8. 11 6
      src/ApiResources/Profile/OrganizationProfile.php
  9. 15 15
      src/Entity/Access/FunctionType.php
  10. 5 5
      src/Entity/Access/OrganizationFunction.php
  11. 4 5
      src/Entity/AccessWish/AccessWish.php
  12. 9 19
      src/Entity/AccessWish/EducationStudentWish.php
  13. 4 11
      src/Entity/Booking/AbstractBooking.php
  14. 4 5
      src/Entity/Core/AbstractInformation.php
  15. 5 5
      src/Entity/Core/ContactPoint.php
  16. 24 42
      src/Entity/Core/File.php
  17. 5 5
      src/Entity/Education/CriteriaNotation.php
  18. 5 5
      src/Entity/Education/Cycle.php
  19. 4 5
      src/Entity/Message/AbstractMessage.php
  20. 4 5
      src/Entity/Message/AbstractReport.php
  21. 35 35
      src/Entity/Organization/Organization.php
  22. 5 5
      src/Entity/Organization/OrganizationAddressPostal.php
  23. 31 30
      src/Entity/Organization/Parameters.php
  24. 5 5
      src/Entity/Organization/Settings.php
  25. 10 10
      src/Entity/Organization/TypeOfPractice.php
  26. 5 5
      src/Entity/Person/Person.php
  27. 5 5
      src/Entity/Person/PersonAddressPostal.php
  28. 16 13
      src/Enum/Access/DeparturesCauseEnum.php
  29. 47 102
      src/Enum/Access/FunctionEnum.php
  30. 13 12
      src/Enum/Access/RoleEnum.php
  31. 9 7
      src/Enum/Access/TypeFunctionEnum.php
  32. 7 6
      src/Enum/Booking/VisibilityEnum.php
  33. 8 11
      src/Enum/Core/ContactPointTypeEnum.php
  34. 7 8
      src/Enum/Core/EmailSendingTypeEnum.php
  35. 6 6
      src/Enum/Core/FileHostEnum.php
  36. 4 0
      src/Enum/Core/FileSizeEnum.php
  37. 9 10
      src/Enum/Core/FileStatusEnum.php
  38. 11 12
      src/Enum/Core/FileTypeEnum.php
  39. 7 8
      src/Enum/Core/FileVisibilityEnum.php
  40. 9 11
      src/Enum/Core/NotificationTypeEnum.php
  41. 7 13
      src/Enum/Core/TimeZoneEnum.php
  42. 8 10
      src/Enum/Cotisation/AlertStateEnum.php
  43. 9 7
      src/Enum/Cotisation/CategoryTypeOfPracticeEnum.php
  44. 42 40
      src/Enum/Cotisation/TypeOfPracticeEnum.php
  45. 6 6
      src/Enum/Education/AdvancedEducationNotationTypeEnum.php
  46. 10 8
      src/Enum/Education/CycleEnum.php
  47. 8 6
      src/Enum/Education/PeriodicityEnum.php
  48. 7 8
      src/Enum/Education/TypeCriteriaEnum.php
  49. 31 0
      src/Enum/EnumMethodsTrait.php
  50. 10 14
      src/Enum/Export/ExportFormatEnum.php
  51. 12 13
      src/Enum/Message/MessageStatusEnum.php
  52. 27 27
      src/Enum/Message/ReportMessageStatusEnum.php
  53. 6 6
      src/Enum/Message/SendStatusEnum.php
  54. 10 8
      src/Enum/Network/LeadingCauseEnum.php
  55. 10 11
      src/Enum/Network/NetworkEnum.php
  56. 9 10
      src/Enum/OnlineRegistration/RegistrationStatusEnum.php
  57. 8 9
      src/Enum/OnlineRegistration/ValidationStateEnum.php
  58. 8 9
      src/Enum/OnlineRegistration/WishRegistrationEnum.php
  59. 9 13
      src/Enum/Organization/AddressPostalOrganizationTypeEnum.php
  60. 6 4
      src/Enum/Organization/BulletinOutputEnum.php
  61. 8 6
      src/Enum/Organization/BulletinPeriodEnum.php
  62. 11 9
      src/Enum/Organization/CategoryEnum.php
  63. 7 7
      src/Enum/Organization/LegalEnum.php
  64. 31 29
      src/Enum/Organization/OpcaEnum.php
  65. 8 9
      src/Enum/Organization/OrganizationIdsEnum.php
  66. 14 20
      src/Enum/Organization/PrincipalTypeEnum.php
  67. 12 10
      src/Enum/Organization/SchoolCategoryEnum.php
  68. 7 5
      src/Enum/Organization/SendToBulletinEnum.php
  69. 9 25
      src/Enum/Organization/SettingsProductEnum.php
  70. 6 4
      src/Enum/Organization/TypeEstablishmentDetailEnum.php
  71. 6 4
      src/Enum/Organization/TypeEstablishmentEnum.php
  72. 6 4
      src/Enum/Person/AddressPostalPersonTypeEnum.php
  73. 6 6
      src/Enum/Person/GenderEnum.php
  74. 6 7
      src/Enum/Public/PublicEventOriginEnum.php
  75. 5 4
      src/Enum/Utils/EnvironnementVarEnum.php
  76. 2 3
      src/Repository/Access/AccessRepository.php
  77. 5 4
      src/Repository/Core/ContactPointRepository.php
  78. 8 8
      src/Repository/Network/NetworkOrganizationRepository.php
  79. 3 2
      src/Repository/Organization/OrganizationAddressPostalRepository.php
  80. 2 2
      src/Security/Voter/EntityVoter/Core/FileVoter.php
  81. 3 3
      src/Service/Access/AccessProfileCreator.php
  82. 2 2
      src/Service/Access/OptionalsRoles/CriteriaNotationOptionalRole.php
  83. 1 1
      src/Service/Core/ContactPointUtils.php
  84. 2 2
      src/Service/Cotisation/CotisationCreator.php
  85. 10 10
      src/Service/Cotisation/Utils.php
  86. 2 2
      src/Service/Cron/Job/CleanTempFiles.php
  87. 35 33
      src/Service/Dolibarr/DolibarrSyncService.php
  88. 1 1
      src/Service/Education/EducationNotationUtils.php
  89. 5 5
      src/Service/Export/BaseExporter.php
  90. 1 1
      src/Service/Export/Encoder/DocXEncoder
  91. 1 1
      src/Service/Export/Encoder/DocXEncoder.php
  92. 2 2
      src/Service/Export/Encoder/PdfEncoder.php
  93. 2 2
      src/Service/Export/LicenceCmfExporter.php
  94. 1 1
      src/Service/File/Storage/ApiLegacyStorage.php
  95. 10 10
      src/Service/File/Storage/LocalStorage.php
  96. 8 6
      src/Service/Mailer/Builder/AbstractBuilder.php
  97. 3 1
      src/Service/Mailer/Builder/AbstractBuilderInterface.php
  98. 4 4
      src/Service/Mailer/Builder/OnSubdomainChangeMailBuilder.php
  99. 8 6
      src/Service/Mailer/EmailRecipient.php
  100. 16 16
      src/Service/Mailer/Mailer.php

+ 11 - 11
config/opentalent/enum.yaml

@@ -1,17 +1,17 @@
 parameters:
     opentalent.enum:
         #AccessAndFunction
-          function: 'App\Enum\AccessAndFunction\FunctionEnum'
-          function_activities: 'App\Enum\AccessAndFunction\ActivitiesFunctionEnum'
-          function_administratives: 'App\Enum\AccessAndFunction\AdministrativesFunctionEnum'
-          function_associatives: 'App\Enum\AccessAndFunction\AssociativesFunctionEnum'
-          function_departures_cause: 'App\Enum\AccessAndFunction\DeparturesCauseEnum'
-          function_pedagogics: 'App\Enum\AccessAndFunction\PedagogicsFunctionEnum'
-          function_other: 'App\Enum\AccessAndFunction\OtherFunctionEnum'
-          function_type: 'App\Enum\AccessAndFunction\TypeFunctionEnum'
-          license_type: 'App\Enum\AccessAndFunction\LicenseTypeEnum'
-          license_rate: 'App\Enum\AccessAndFunction\LicenseRateEnum'
-          function_role: 'App\Enum\AccessAndFunction\FunctionalRoleEnum'
+          function: 'App\Enum\Access\FunctionEnum'
+          function_activities: 'App\Enum\Access\ActivitiesFunctionEnum'
+          function_administratives: 'App\Enum\Access\AdministrativesFunctionEnum'
+          function_associatives: 'App\Enum\Access\AssociativesFunctionEnum'
+          function_departures_cause: 'App\Enum\Access\DeparturesCauseEnum'
+          function_pedagogics: 'App\Enum\Access\PedagogicsFunctionEnum'
+          function_other: 'App\Enum\Access\OtherFunctionEnum'
+          function_type: 'App\Enum\Access\TypeFunctionEnum'
+          license_type: 'App\Enum\Access\LicenseTypeEnum'
+          license_rate: 'App\Enum\Access\LicenseRateEnum'
+          function_role: 'App\Enum\Access\FunctionalRoleEnum'
 
         #AccessSocial
           professional_status: 'App\Enum\AccessSocial\ProfessionalStatusEnum'

+ 4 - 17
src/ApiResources/Core/File/Upload.php

@@ -56,10 +56,9 @@ class Upload
 
     /**
      * Le type de fichier uploadé, si connu
-     * @var string
      */
-    #[Assert\Choice(callback: [FileTypeEnum::class, 'toArray'])]
-    private string $type = "NONE";
+    #[Assert\Type(type: FileTypeEnum::class)]
+    private FileTypeEnum $type = FileTypeEnum::NONE;
 
     /**
      * Visibilité du fichier
@@ -79,11 +78,6 @@ class Upload
      */
     private ?string $config = null;
 
-    public function __construct()
-    {
-        $this->type = FileTypeEnum::NONE()->getValue();
-    }
-
     /**
      * @return int
      */
@@ -155,19 +149,12 @@ class Upload
         return $this;
     }
 
-    /**
-     * @return string
-     */
-    public function getType(): string
+    public function getType(): FileTypeEnum
     {
         return $this->type;
     }
 
-    /**
-     * @param string $type
-     * @return self
-     */
-    public function setType(string $type): self
+    public function setType(FileTypeEnum $type): self
     {
         $this->type = $type;
         return $this;

+ 5 - 4
src/ApiResources/Cotisation/Cotisation.php

@@ -7,6 +7,7 @@ use ApiPlatform\Metadata\Get;
 use ApiPlatform\Metadata\ApiResource;
 use ApiPlatform\Metadata\ApiProperty;
 use App\ApiResources\ApiResourcesInterface;
+use App\Enum\Cotisation\AlertStateEnum;
 use App\State\Provider\Cotisation\CotisationProvider;
 use Symfony\Component\Validator\Constraints as Assert;
 
@@ -28,8 +29,8 @@ class Cotisation implements ApiResourcesInterface
     #[ApiProperty(identifier: true)]
     private int $organizationId;
 
-    #[Assert\Choice(callback: ['\\App\\Enum\\Cotisation\\AlertStateEnum', 'toArray'], message: 'invalid-alert-state-enum')]
-    private ?string $alertState = null;
+    #[Assert\Type(type: AlertStateEnum::class)]
+    private ?AlertStateEnum $alertState = null;
 
     private ?int $cotisationYear = null;
 
@@ -44,12 +45,12 @@ class Cotisation implements ApiResourcesInterface
         return $this;
     }
 
-    public function getAlertState(): ?string
+    public function getAlertState(): ?AlertStateEnum
     {
         return $this->alertState;
     }
 
-    public function setAlertState(?string $alertState): self
+    public function setAlertState(?AlertStateEnum $alertState): self
     {
         $this->alertState = $alertState;
         return $this;

+ 4 - 11
src/ApiResources/Export/ExportRequest.php

@@ -24,10 +24,9 @@ abstract class ExportRequest
 
     /**
      * Format de sortie attendu (pdf, txt...)
-     * @var string
      */
-    #[Assert\Choice(callback: [ExportFormatEnum::class, 'toArray'], message: 'invalid-output-format')]
-    protected string $format;
+    #[Assert\Type(type: ExportFormatEnum::class)]
+    protected ExportFormatEnum $format;
 
     /**
      * The id of the access requesting this export
@@ -55,18 +54,12 @@ abstract class ExportRequest
         return $this->id;
     }
 
-    /**
-     * @return string
-     */
-    public function getFormat(): string
+    public function getFormat(): ExportFormatEnum
     {
         return $this->format;
     }
 
-    /**
-     * @param string $format
-     */
-    public function setFormat(string $format): void
+    public function setFormat(ExportFormatEnum $format): void
     {
         $this->format = $format;
     }

+ 2 - 3
src/ApiResources/Export/LicenceCmf/LicenceCmfOrganizationER.php

@@ -12,6 +12,7 @@ use ApiPlatform\Metadata\Get;
 use ApiPlatform\Metadata\ApiResource;
 use App\ApiResources\Export\ExportRequest;
 use App\ApiResources\Export\ExportRequestInterface;
+use App\Enum\Export\ExportFormatEnum;
 use App\State\Processor\Export\LicenceCmf\ExportRequestProcessor;
 use Symfony\Component\Validator\Constraints as Assert;
 
@@ -37,10 +38,8 @@ class LicenceCmfOrganizationER extends ExportRequest
 {
     /**
     * Format de sortie attendu (pdf seulement ici)
-    * @var string
     */
-    #[Assert\EqualTo('pdf')]
-    protected string $format = 'pdf';
+    protected ExportFormatEnum $format = ExportFormatEnum::PDF;
 
     /**
     * Retourne l'année de la licence

+ 6 - 3
src/ApiResources/OnlineRegistration/RegistrationStatus.php

@@ -6,8 +6,10 @@ use ApiPlatform\Metadata\ApiProperty;
 use ApiPlatform\Metadata\ApiResource;
 use ApiPlatform\Metadata\Get;
 use App\ApiResources\ApiResourcesInterface;
+use App\Enum\OnlineRegistration\RegistrationStatusEnum;
 use App\State\Provider\OnlineRegistration\RegistrationStatusProvider;
 use Symfony\Component\Serializer\Annotation\Groups;
+use Symfony\Component\Validator\Constraints as Assert;
 
 #[ApiResource(
     operations: [
@@ -24,7 +26,8 @@ class RegistrationStatus implements ApiResourcesInterface
     #[ApiProperty(identifier: true)]
     private int $accessId;
 
-    private ?string $status = null;
+    #[Assert\Type(type: RegistrationStatusEnum::class)]
+    private ?RegistrationStatusEnum $status = null;
 
     public function getAccessId(): int
     {
@@ -36,12 +39,12 @@ class RegistrationStatus implements ApiResourcesInterface
         $this->accessId = $accessId;
     }
 
-    public function getStatus(): ?string
+    public function getStatus(): ?RegistrationStatusEnum
     {
         return $this->status;
     }
 
-    public function setStatus(?string $status): void
+    public function setStatus(?RegistrationStatusEnum $status): void
     {
         $this->status = $status;
     }

+ 6 - 3
src/ApiResources/Profile/AccessProfile.php

@@ -8,6 +8,7 @@ use ApiPlatform\Metadata\ApiResource;
 use ApiPlatform\Metadata\ApiProperty;
 use ApiPlatform\Metadata\Put;
 use App\ApiResources\ApiResourcesInterface;
+use App\Enum\Person\GenderEnum;
 use App\State\Processor\Access\AdminAccessProcessor;
 use App\State\Provider\Access\AccessProfileProvider;
 use App\State\Provider\Access\AdminAccessProvider;
@@ -15,6 +16,7 @@ use JetBrains\PhpStorm\Pure;
 use Symfony\Component\Serializer\Annotation\Groups;
 use Doctrine\Common\Collections\ArrayCollection;
 use Doctrine\Common\Collections\Collection;
+use Symfony\Component\Validator\Constraints as Assert;
 
 /**
  * Classe resource qui contient les champs disponibles lors d'un appel à my_profile.
@@ -48,7 +50,8 @@ class AccessProfile implements ApiResourcesInterface
     private ?string $givenName = null;
 
     #[Groups('access_profile_read')]
-    private ?string $gender = null;
+    #[Assert\Type(type: GenderEnum::class)]
+    private ?GenderEnum $gender = null;
 
     #[Groups('access_profile_read')]
     private ?int $avatarId = null;
@@ -155,12 +158,12 @@ class AccessProfile implements ApiResourcesInterface
         return $this;
     }
 
-    public function getGender(): ?string
+    public function getGender(): ?GenderEnum
     {
         return $this->gender;
     }
 
-    public function setGender(?string $gender): self
+    public function setGender(?GenderEnum $gender): self
     {
         $this->gender = $gender;
         return $this;

+ 11 - 6
src/ApiResources/Profile/OrganizationProfile.php

@@ -8,7 +8,10 @@ use ApiPlatform\Metadata\ApiProperty;
 use ApiPlatform\Metadata\Get;
 use App\ApiResources\ApiResourcesInterface;
 use App\Entity\Organization\Organization;
+use App\Enum\Organization\LegalEnum;
+use App\Enum\Organization\SettingsProductEnum;
 use Symfony\Component\Serializer\Annotation\Groups;
+use Symfony\Component\Validator\Constraints as Assert;
 
 /**
  * Classe resource qui contient les champs relatifs aux organizations présentent dans la requete my_profile.
@@ -28,10 +31,12 @@ class OrganizationProfile implements ApiResourcesInterface
     private ?string $name = null;
 
     #[Groups('access_profile_read')]
-    private ?string $product = null;
+    #[Assert\Type(type: SettingsProductEnum::class)]
+    private ?SettingsProductEnum $product = null;
 
     #[Groups('access_profile_read')]
-    private ?string $legalStatus = null;
+    #[Assert\Type(type: LegalEnum::class)]
+    private ?LegalEnum $legalStatus = null;
 
     /** @var list<string> $networks  */
     #[Groups('access_profile_read')]
@@ -82,23 +87,23 @@ class OrganizationProfile implements ApiResourcesInterface
         return $this;
     }
 
-    public function getProduct(): ?string
+    public function getProduct(): ?SettingsProductEnum
     {
         return $this->product;
     }
 
-    public function setProduct(?string $product): self
+    public function setProduct(?SettingsProductEnum $product): self
     {
         $this->product = $product;
         return $this;
     }
 
-    public function getLegalStatus(): ?string
+    public function getLegalStatus(): ?LegalEnum
     {
         return $this->legalStatus;
     }
 
-    public function setLegalStatus(?string $legalStatus): self
+    public function setLegalStatus(?LegalEnum $legalStatus): self
     {
         $this->legalStatus = $legalStatus;
         return $this;

+ 15 - 15
src/Entity/Access/FunctionType.php

@@ -3,6 +3,9 @@ declare(strict_types=1);
 
 namespace App\Entity\Access;
 
+use App\Enum\Access\FunctionEnum;
+use App\Enum\Access\RoleEnum;
+use App\Enum\Access\TypeFunctionEnum;
 use App\Repository\Access\FunctionTypeRepository;
 //use DH\Auditor\Provider\Doctrine\Auditing\Annotation\Auditable;
 use Doctrine\ORM\Mapping as ORM;
@@ -21,51 +24,48 @@ class FunctionType
     #[ORM\Column]
     private ?int $id = null;
 
-    #[ORM\Column]
-    #[Assert\Choice(callback: ['\App\Enum\Access\TypeFunctionEnum', 'toArray'], message: 'invalid-function-type')]
-    private string $functionType;
+    #[ORM\Column(length: 50, enumType: TypeFunctionEnum::class)]
+    private TypeFunctionEnum $functionType;
 
-    #[ORM\Column]
-    #[Assert\Choice(callback: ['\App\Enum\Access\FunctionEnum', 'toArray'], message: 'invalid-function')]
-    private string $mission;
+    #[ORM\Column(length: 50, enumType: FunctionEnum::class)]
+    private FunctionEnum $mission;
 
-    #[ORM\Column]
-    #[Assert\Choice(callback: ['\App\Enum\Access\RoleEnum', 'toArray'], message: 'invalid-role')]
-    private string $roleByDefault;
+    #[ORM\Column(length: 50, enumType: RoleEnum::class)]
+    private RoleEnum $roleByDefault;
 
     public function getId(): ?int
     {
         return $this->id;
     }
 
-    public function getFunctionType(): string
+    public function getFunctionType(): TypeFunctionEnum
     {
         return $this->functionType;
     }
 
-    public function setFunctionType(string $functionType): self
+    public function setFunctionType(TypeFunctionEnum $functionType): self
     {
         $this->functionType = $functionType;
         return $this;
     }
 
-    public function getMission(): string
+    public function getMission(): FunctionEnum
     {
         return $this->mission;
     }
 
-    public function setMission(string $mission): self
+    public function setMission(FunctionEnum $mission): self
     {
         $this->mission = $mission;
         return $this;
     }
 
-    public function getRoleByDefault(): string
+    public function getRoleByDefault(): RoleEnum
     {
         return $this->roleByDefault;
     }
 
-    public function setRoleByDefault(string $roleByDefault): self
+    public function setRoleByDefault(RoleEnum $roleByDefault): self
     {
         $this->roleByDefault = $roleByDefault;
         return $this;

+ 5 - 5
src/Entity/Access/OrganizationFunction.php

@@ -7,6 +7,7 @@ use ApiPlatform\Metadata\ApiResource;
 use App\Attribute\DateTimeConstraintAware;
 use App\Entity\Organization\Activity;
 use App\Entity\Traits\ActivityPeriodTrait;
+use App\Enum\Access\DeparturesCauseEnum;
 use App\Repository\Access\OrganizationFunctionRepository;
 //use DH\Auditor\Provider\Doctrine\Auditing\Annotation\Auditable;
 use Doctrine\ORM\Mapping as ORM;
@@ -43,9 +44,8 @@ class OrganizationFunction
     #[ORM\JoinColumn(referencedColumnName: 'id', nullable: true, onDelete: 'SET NULL')]
     private Activity $activity;
 
-    #[ORM\Column(length: 255, nullable: true)]
-    #[Assert\Choice(callback: ['\\App\\Enum\\Access\\DeparturesCauseEnum', 'toArray'], message: 'invalid-departure-cause')]
-    private ?string $departureCause = null;
+    #[ORM\Column(length: 255, nullable: true, enumType: DeparturesCauseEnum::class)]
+    private ?DeparturesCauseEnum $departureCause = null;
 
     #[ORM\Column(options: ['default' => true])]
     private bool $isMemberSection = true;
@@ -88,13 +88,13 @@ class OrganizationFunction
         return $this;
     }
 
-    public function setDepartureCause(?string $departureCause): self
+    public function setDepartureCause(?DeparturesCauseEnum $departureCause): self
     {
         $this->departureCause = $departureCause;
         return $this;
     }
 
-    public function getDepartureCause(): ?string
+    public function getDepartureCause(): ?DeparturesCauseEnum
     {
         return $this->departureCause;
     }

+ 4 - 5
src/Entity/AccessWish/AccessWish.php

@@ -63,9 +63,8 @@ class AccessWish
     #[ORM\InverseJoinColumn(name: 'tag_id', referencedColumnName: 'id')]
     private Collection $tags;
 
-    #[ORM\Column(length: 50)]
-    #[Assert\Choice(callback: [ValidationStateEnum::class, 'toArray'])]
-    private string $validationState;
+    #[ORM\Column(length: 50, enumType: ValidationStateEnum::class)]
+    private ValidationStateEnum $validationState;
 
     /**
      * Date de création dde l'entité
@@ -288,12 +287,12 @@ class AccessWish
         $this->updateDate = $updateDate;
     }
 
-    public function getValidationState(): string
+    public function getValidationState(): ValidationStateEnum
     {
         return $this->validationState;
     }
 
-    public function setValidationState(string $validationState): void
+    public function setValidationState(ValidationStateEnum $validationState): void
     {
         $this->validationState = $validationState;
     }

+ 9 - 19
src/Entity/AccessWish/EducationStudentWish.php

@@ -25,21 +25,11 @@ class EducationStudentWish
     #[ORM\GeneratedValue]
     private ?int $id = null;
 
-    /**
-     * TODO: Documenter
-     * @var string|null
-     */
-    #[ORM\Column(length: 50)]
-    #[Assert\Choice(callback: [WishRegistrationEnum::class, 'toArray'])]
-    private ?string $wishRegistration = null;
-
-    /**
-     * Statut de l'enregistrement en ligne
-     * @var string|null
-     */
-    #[ORM\Column(length: 50)]
-    #[Assert\Choice(callback: [RegistrationStatusEnum::class, 'toArray'])]
-    private ?string $registrationStatus = null;
+    #[ORM\Column(length: 50, enumType: WishRegistrationEnum::class)]
+    private ?WishRegistrationEnum $wishRegistration = null;
+
+    #[ORM\Column(length: 50, enumType: RegistrationStatusEnum::class)]
+    private ?RegistrationStatusEnum $registrationStatus = null;
 
     #[ORM\ManyToOne]
     #[ORM\JoinColumn(referencedColumnName: 'id' ,nullable: true, onDelete: 'SET NULL')]
@@ -68,22 +58,22 @@ class EducationStudentWish
         return $this->id;
     }
 
-    public function getWishRegistration(): ?string
+    public function getWishRegistration(): ?WishRegistrationEnum
     {
         return $this->wishRegistration;
     }
 
-    public function setWishRegistration(?string $wishRegistration): void
+    public function setWishRegistration(?WishRegistrationEnum $wishRegistration): void
     {
         $this->wishRegistration = $wishRegistration;
     }
 
-    public function getRegistrationStatus(): ?string
+    public function getRegistrationStatus(): ?RegistrationStatusEnum
     {
         return $this->registrationStatus;
     }
 
-    public function setRegistrationStatus(?string $registrationStatus): void
+    public function setRegistrationStatus(?RegistrationStatusEnum $registrationStatus): void
     {
         $this->registrationStatus = $registrationStatus;
     }

+ 4 - 11
src/Entity/Booking/AbstractBooking.php

@@ -36,9 +36,8 @@ abstract class AbstractBooking
     #[ORM\Column(type: 'datetime', nullable: true)]
     protected ?\DateTimeInterface $datetimeEnd = null;
 
-    #[ORM\Column(nullable: false)]
-    #[Assert\Choice(callback: [VisibilityEnum::class, 'toArray'])]
-    protected string $visibility;
+    #[ORM\Column(length: 50 ,nullable: false, enumType: VisibilityEnum::class)]
+    protected VisibilityEnum $visibility;
 
     #[ORM\Column(unique: true)]
     protected string $uuid;
@@ -90,18 +89,12 @@ abstract class AbstractBooking
         return $this->datetimeEnd;
     }
 
-    /**
-     * @return string|null
-     */
-    public function getVisibility(): ?string
+    public function getVisibility(): ?VisibilityEnum
     {
         return $this->visibility;
     }
 
-    /**
-     * @param string|null $visibility
-     */
-    public function setVisibility(?string $visibility): self
+    public function setVisibility(?VisibilityEnum $visibility): self
     {
         $this->visibility = $visibility;
 

+ 4 - 5
src/Entity/Core/AbstractInformation.php

@@ -63,9 +63,8 @@ class AbstractInformation
     #[ORM\Column(type: 'json', length: 4294967295, nullable: true)]
     protected mixed $message = [];
 
-    #[ORM\Column(nullable: true)]
-    #[Assert\Choice(callback: [NotificationTypeEnum::class, 'toArray'], message: 'invalid-type')]
-    protected ?string $type = null;
+    #[ORM\Column(length: 50, nullable: true, enumType: NotificationTypeEnum::class)]
+    protected ?NotificationTypeEnum $type = null;
 
     #[ORM\Column(length: 255, nullable: true)]
     protected ?string $link = null;
@@ -176,13 +175,13 @@ class AbstractInformation
         return $this->message;
     }
 
-    public function setType(?string $type): self
+    public function setType(?NotificationTypeEnum $type): self
     {
         $this->type = $type;
         return $this;
     }
 
-    public function getType(): ?string
+    public function getType(): ?NotificationTypeEnum
     {
         return $this->type;
     }

+ 5 - 5
src/Entity/Core/ContactPoint.php

@@ -14,6 +14,7 @@ use App\Entity\Person\Person;
 use App\Entity\Place\Place;
 
 //use DH\Auditor\Provider\Doctrine\Auditing\Annotation\Auditable;
+use App\Enum\Core\ContactPointTypeEnum;
 use JetBrains\PhpStorm\Pure;
 use libphonenumber\PhoneNumber;
 use App\Repository\Core\ContactPointRepository;
@@ -40,9 +41,8 @@ class ContactPoint
     #[ORM\GeneratedValue]
     private ?int $id = null;
 
-    #[ORM\Column(length: 255)]
-    #[Assert\Choice(callback: ['\\App\\Enum\\Core\\ContactPointTypeEnum', 'toArray'], message: 'invalid-contact-type')]
-    private string $contactType;
+    #[ORM\Column(length: 50, enumType: ContactPointTypeEnum::class)]
+    private ContactPointTypeEnum $contactType;
 
     #[ORM\Column(length: 255, nullable: true)]
     #[Assert\Email(message: 'invalid-email-format', mode: 'strict')]
@@ -100,12 +100,12 @@ class ContactPoint
         return $this->id;
     }
 
-    public function getContactType(): string
+    public function getContactType(): ContactPointTypeEnum
     {
         return $this->contactType;
     }
 
-    public function setContactType(string $contactType): self
+    public function setContactType(ContactPointTypeEnum $contactType): self
     {
         $this->contactType = $contactType;
         return $this;

+ 24 - 42
src/Entity/Core/File.php

@@ -115,11 +115,10 @@ class File
 
     /**
      * Type de document (uploaded, mail, bill...etc)
-     * @var string
+     * @var FileTypeEnum
      */
-    #[ORM\Column(length: 50, options: ['default' => 'NONE'])]
-    #[Assert\Choice(callback: [FileTypeEnum::class, 'toArray'])]
-    private string $type = "NONE";
+    #[ORM\Column(length: 50, enumType: FileTypeEnum::class ,options: ['default' => FileTypeEnum::NONE])]
+    private FileTypeEnum $type = FileTypeEnum::NONE;
 
     /**
      * Taille du document en octets
@@ -168,19 +167,15 @@ class File
 
     /**
      * Statut du fichier (en cours de génération, prêt, supprimé, etc.)
-     * @var string | null
      */
-    #[ORM\Column(length: 50)]
-    #[Assert\Choice(callback: [FileStatusEnum::class, 'toArray'])]
-    private ?string $status = null;
+    #[ORM\Column(length: 50, enumType: FileStatusEnum::class)]
+    private ?FileStatusEnum $status = null;
 
     /**
      * Serveur sur lequel le fichier est physiquement stocké
-     * @var string | null
      */
-    #[ORM\Column(length: 5)]
-    #[Assert\Choice(callback: [FileHostEnum::class, 'toArray'])]
-    private ?string $host = 'ap2i';
+    #[ORM\Column(length: 5, enumType: FileHostEnum::class)]
+    private ?FileHostEnum $host = FileHostEnum::AP2I;
 
     //    #[ORM\Column]
     //    private ?int $eventReport_id;
@@ -282,7 +277,7 @@ class File
      * @param Person|null $person
      * @return File
      */
-    public function setPerson(?Person $person): File
+    public function setPerson(?Person $person): self
     {
         $this->person = $person;
         return $this;
@@ -300,7 +295,7 @@ class File
      * @param Organization|null $organization
      * @return File
      */
-    public function setOrganization(?Organization $organization): File
+    public function setOrganization(?Organization $organization): self
     {
         $this->organization = $organization;
         return $this;
@@ -405,25 +400,25 @@ class File
      * @param string $visibility
      * @return File
      */
-    public function setVisibility(string $visibility): File
+    public function setVisibility(string $visibility): self
     {
         $this->visibility = $visibility;
         return $this;
     }
 
     /**
-     * @return string
+     * @return FileTypeEnum
      */
-    public function getType(): string
+    public function getType(): FileTypeEnum
     {
         return $this->type;
     }
 
     /**
-     * @param string $type
+     * @param FileTypeEnum $type
      * @return File
      */
-    public function setType(string $type): File
+    public function setType(FileTypeEnum $type): self
     {
         $this->type = $type;
         return $this;
@@ -441,7 +436,7 @@ class File
      * @param int|null $size
      * @return File
      */
-    public function setSize(?int $size): File
+    public function setSize(?int $size): self
     {
         $this->size = $size;
         return $this;
@@ -459,7 +454,7 @@ class File
      * @param bool $isTemporaryFile
      * @return File
      */
-    public function setIsTemporaryFile(bool $isTemporaryFile): File
+    public function setIsTemporaryFile(bool $isTemporaryFile): self
     {
         $this->isTemporaryFile = $isTemporaryFile;
         return $this;
@@ -477,7 +472,7 @@ class File
      * @param DateTime $createDate
      * @return File
      */
-    public function setCreateDate(DateTime $createDate): File
+    public function setCreateDate(DateTime $createDate): self
     {
         $this->createDate = $createDate;
         return $this;
@@ -495,7 +490,7 @@ class File
      * @param int|null $createdBy
      * @return File
      */
-    public function setCreatedBy(?int $createdBy): File
+    public function setCreatedBy(?int $createdBy): self
     {
         $this->createdBy = $createdBy;
         return $this;
@@ -513,7 +508,7 @@ class File
      * @param DateTime $updateDate
      * @return File
      */
-    public function setUpdateDate(DateTime $updateDate): File
+    public function setUpdateDate(DateTime $updateDate): self
     {
         $this->updateDate = $updateDate;
         return $this;
@@ -531,42 +526,29 @@ class File
      * @param int|null $updatedBy
      * @return File
      */
-    public function setUpdatedBy(?int $updatedBy): File
+    public function setUpdatedBy(?int $updatedBy): self
     {
         $this->updatedBy = $updatedBy;
         return $this;
     }
 
-    /**
-     * @return string|null
-     */
-    public function getStatus(): ?string
+    public function getStatus(): ?FileStatusEnum
     {
         return $this->status;
     }
 
-    /**
-     * @param string|null $status
-     * @return File
-     */
-    public function setStatus(?string $status): File
+    public function setStatus(?FileStatusEnum $status): self
     {
         $this->status = $status;
         return $this;
     }
 
-    /**
-     * @return string|null
-     */
-    public function getHost(): ?string
+    public function getHost(): ?FileHostEnum
     {
         return $this->host;
     }
 
-    /**
-     * @param string|null $host
-     */
-    public function setHost(?string $host): self
+    public function setHost(?FileHostEnum $host): self
     {
         $this->host = $host;
 

+ 5 - 5
src/Entity/Education/CriteriaNotation.php

@@ -8,6 +8,7 @@ use ApiPlatform\Metadata\ApiResource;
 use App\Entity\Organization\Organization;
 
 //use DH\Auditor\Provider\Doctrine\Auditing\Annotation\Auditable;
+use App\Enum\Education\TypeCriteriaEnum;
 use Doctrine\Common\Collections\ArrayCollection;
 use Doctrine\Common\Collections\Collection;
 use Doctrine\ORM\Mapping as ORM;
@@ -39,9 +40,8 @@ class CriteriaNotation
     #[ORM\OneToMany(mappedBy: 'criteriaNotation', targetEntity: EducationNotationCriteriaConfig::class, cascade: ['persist', 'remove'], orphanRemoval: true)]
     private Collection $educationNotationCriteriaConfigs;
 
-    #[ORM\Column]
-    #[Assert\Choice(callback: ['\\App\\Enum\\Education\\TypeCriteriaEnum', 'toArray'], message: 'invalid-type')]
-    private string $type;
+    #[ORM\Column(length: 50, enumType: TypeCriteriaEnum::class)]
+    private TypeCriteriaEnum $type;
 
     #[ORM\Column]
     #[Assert\GreaterThanOrEqual(value: 0)]
@@ -155,12 +155,12 @@ class CriteriaNotation
         return $this;
     }
 
-    public function getType(): ?string
+    public function getType(): ?TypeCriteriaEnum
     {
         return $this->type;
     }
 
-    public function setType(string $type): self
+    public function setType(TypeCriteriaEnum $type): self
     {
         $this->type = $type;
         return $this;

+ 5 - 5
src/Entity/Education/Cycle.php

@@ -7,6 +7,7 @@ use ApiPlatform\Metadata\GetCollection;
 use ApiPlatform\Metadata\Put;
 use ApiPlatform\Metadata\Get;
 use ApiPlatform\Metadata\ApiResource;
+use App\Enum\Education\CycleEnum;
 use App\Repository\Education\CycleRepository;
 use App\Entity\Organization\Organization;
 
@@ -56,9 +57,8 @@ class Cycle
     #[ORM\Column(length: 255)]
     private string $label;
 
-    #[ORM\Column(length: 255)]
-    #[Assert\Choice(callback: ['\\App\\Enum\\Education\\CycleEnum', 'toArray'], message: 'invalid-cycle')]
-    private string $cycleEnum;
+    #[ORM\Column(length: 50, enumType: CycleEnum::class)]
+    private CycleEnum $cycleEnum;
 
     #[ORM\Column(options: ['default' => false])]
     private bool $isSystem = false;
@@ -109,13 +109,13 @@ class Cycle
         return $this->label;
     }
 
-    public function setCycleEnum(string $cycleEnum): self
+    public function setCycleEnum(CycleEnum $cycleEnum): self
     {
         $this->cycleEnum = $cycleEnum;
         return $this;
     }
 
-    public function getCycleEnum(): string
+    public function getCycleEnum(): CycleEnum
     {
         return $this->cycleEnum;
     }

+ 4 - 5
src/Entity/Message/AbstractMessage.php

@@ -45,9 +45,8 @@ abstract class AbstractMessage
     #[ORM\JoinColumn(nullable: true)]
     protected Organization $organization;
 
-    #[ORM\Column(type: 'string', options: ['default' => 'DRAFT'])]
-    #[Assert\Choice(callback: [MessageStatusEnum::class, 'toArray'], message: 'invalid-departure-cause')]
-    protected string $status;
+    #[ORM\Column(length: 50, enumType: MessageStatusEnum::class, options: ['default' => 'DRAFT'])]
+    protected MessageStatusEnum $status = MessageStatusEnum::DRAFT;
 
     // @todo remplacer par le nom sendingDate
     #[ORM\Column(type: 'datetime', nullable: true)]
@@ -102,14 +101,14 @@ abstract class AbstractMessage
         return html_entity_decode($this->text);
     }
 
-    public function setStatus(string $status): self
+    public function setStatus(MessageStatusEnum $status): self
     {
         $this->status = $status;
 
         return $this;
     }
 
-    public function getStatus(): string
+    public function getStatus(): MessageStatusEnum
     {
         return $this->status;
     }

+ 4 - 5
src/Entity/Message/AbstractReport.php

@@ -19,9 +19,8 @@ class AbstractReport
     #[ORM\Column(type: 'datetime', nullable: true)]
     protected ?\DatetimeInterface $dateSend;
 
-    #[ORM\Column(length: 255)]
-    #[Assert\Choice(callback: [ReportMessageStatusEnum::class, 'toArray'], message: 'invalid-report-type')]
-    protected string $status;
+    #[ORM\Column(length: 50, enumType: ReportMessageStatusEnum::class)]
+    protected ReportMessageStatusEnum $status;
 
     #[ORM\ManyToOne(inversedBy: 'report')]
     protected ?Access $access;
@@ -53,12 +52,12 @@ class AbstractReport
         return $this;
     }
 
-    public function getStatus(): string
+    public function getStatus(): ReportMessageStatusEnum
     {
         return $this->status;
     }
 
-    public function setStatus(string $status): self
+    public function setStatus(ReportMessageStatusEnum $status): self
     {
         $this->status = $status;
         return $this;

+ 35 - 35
src/Entity/Organization/Organization.php

@@ -36,6 +36,13 @@ use App\Entity\Person\Commission;
 use App\Entity\Place\Place;
 use App\Entity\Product\Equipment;
 use App\Entity\Product\Intangible;
+use App\Enum\Organization\CategoryEnum;
+use App\Enum\Organization\LegalEnum;
+use App\Enum\Organization\OpcaEnum;
+use App\Enum\Organization\PrincipalTypeEnum;
+use App\Enum\Organization\SchoolCategoryEnum;
+use App\Enum\Organization\TypeEstablishmentDetailEnum;
+use App\Enum\Organization\TypeEstablishmentEnum;
 use App\Repository\Organization\OrganizationRepository;
 use App\State\Processor\Organization\OrganizationProcessor;
 use \App\Entity\Organization\OnlineRegistrationSettings;
@@ -70,13 +77,11 @@ class Organization
     #[ORM\Column(length: 128)]
     private string $identifier;
 
-    #[ORM\Column(length: 255, nullable: true)]
-    #[Assert\Choice(callback: ['\\App\\Enum\\Organization\\LegalEnum', 'toArray'], message: 'invalid-legal-status')]
-    private ?string $legalStatus = null;
+    #[ORM\Column(length: 50, nullable: true, enumType: LegalEnum::class)]
+    private ?LegalEnum $legalStatus = null;
 
-    #[ORM\Column(length: 255, nullable: true)]
-    #[Assert\Choice(callback: ['\\App\\Enum\\Organization\\PrincipalTypeEnum', 'toArray'], message: 'invalid-principal-type')]
-    private ?string $principalType = null;
+    #[ORM\Column(length: 255, nullable: true, enumType: PrincipalTypeEnum::class)]
+    private ?PrincipalTypeEnum $principalType = null;
 
     #[ORM\OneToOne(mappedBy: 'organization', cascade: ['persist', 'remove'])]
     private Settings $settings;
@@ -145,9 +150,8 @@ class Organization
     #[ORM\Column(length: 35, nullable: true)]
     private ?string $collectiveAgreement = null;
 
-    #[ORM\Column(length: 255, nullable: true)]
-    #[Assert\Choice(callback: ['\\App\\Enum\\Organization\\OpcaEnum', 'toArray'], message: 'invalid-opca')]
-    private ?string $opca = null;
+    #[ORM\Column(length: 50, nullable: true, enumType: OpcaEnum::class)]
+    private ?OpcaEnum $opca = null;
 
     #[ORM\Column(length: 35, nullable: true)]
     private ?string $icomNumber = null;
@@ -170,21 +174,17 @@ class Organization
     #[ORM\Column(length: 20, nullable: true)]
     private ?string $prefectureNumber = null;
 
-    #[ORM\Column(length: 255, nullable: true)]
-    #[Assert\Choice(callback: ['\\App\\Enum\\Organization\\CategoryEnum', 'toArray'], message: 'invalid-category')]
-    private ?string $category = null;
+    #[ORM\Column(length: 50, nullable: true, enumType: CategoryEnum::class)]
+    private ?CategoryEnum $category = null;
 
-    #[ORM\Column(length: 255, nullable: true)]
-    #[Assert\Choice(callback: ['\\App\\Enum\\Organization\\SchoolCategoryEnum', 'toArray'], message: 'invalid-school-category')]
-    private ?string $schoolCategory = null;
+    #[ORM\Column(length: 50, nullable: true, enumType: SchoolCategoryEnum::class)]
+    private ?SchoolCategoryEnum $schoolCategory = null;
 
-    #[ORM\Column(length: 255, nullable: true)]
-    #[Assert\Choice(callback: ['\\App\\Enum\\Organization\\TypeEstablishmentEnum', 'toArray'], message: 'invalid-type-establishment')]
-    private ?string $typeEstablishment = null;
+    #[ORM\Column(length: 50, nullable: true, enumType: TypeEstablishmentEnum::class)]
+    private ?TypeEstablishmentEnum $typeEstablishment = null;
 
-    #[ORM\Column(length: 255, nullable: true)]
-    #[Assert\Choice(callback: ['\\App\\Enum\\Organization\\TypeEstablishmentDetailEnum', 'toArray'], message: 'invalid-type-establishment-detail')]
-    private ?string $typeEstablishmentDetail = null;
+    #[ORM\Column(length: 50, nullable: true, enumType: TypeEstablishmentDetailEnum::class)]
+    private ?TypeEstablishmentDetailEnum $typeEstablishmentDetail = null;
 
     #[ORM\Column(nullable: true)]
     private ?float $budget = null;
@@ -390,23 +390,23 @@ class Organization
         return $this;
     }
 
-    public function getLegalStatus(): ?string
+    public function getLegalStatus(): ?LegalEnum
     {
         return $this->legalStatus;
     }
 
-    public function setLegalStatus(?string $legalStatus): self
+    public function setLegalStatus(?LegalEnum $legalStatus): self
     {
         $this->legalStatus = $legalStatus;
         return $this;
     }
 
-    public function getPrincipalType(): ?string
+    public function getPrincipalType(): ?PrincipalTypeEnum
     {
         return $this->principalType;
     }
 
-    public function setPrincipalType(?string $principalType): self
+    public function setPrincipalType(?PrincipalTypeEnum $principalType): self
     {
         $this->principalType = $principalType;
         return $this;
@@ -685,12 +685,12 @@ class Organization
         return $this;
     }
 
-    public function getOpca(): ?string
+    public function getOpca(): ?OpcaEnum
     {
         return $this->opca;
     }
 
-    public function setOpca(?string $opca): self
+    public function setOpca(?OpcaEnum $opca): self
     {
         $this->opca = $opca;
         return $this;
@@ -773,45 +773,45 @@ class Organization
         return $this;
     }
 
-    public function getCategory(): ?string
+    public function getCategory(): ?CategoryEnum
     {
         return $this->category;
     }
 
-    public function setCategory(?string $category): self
+    public function setCategory(?CategoryEnum $category): self
     {
         $this->category = $category;
         return $this;
     }
 
-    public function getSchoolCategory(): ?string
+    public function getSchoolCategory(): ?SchoolCategoryEnum
     {
         return $this->schoolCategory;
     }
 
-    public function setSchoolCategory(?string $schoolCategory): self
+    public function setSchoolCategory(?SchoolCategoryEnum $schoolCategory): self
     {
         $this->schoolCategory = $schoolCategory;
         return $this;
     }
 
-    public function getTypeEstablishment(): ?string
+    public function getTypeEstablishment(): ?TypeEstablishmentEnum
     {
         return $this->typeEstablishment;
     }
 
-    public function setTypeEstablishment(?string $typeEstablishment): self
+    public function setTypeEstablishment(?TypeEstablishmentEnum $typeEstablishment): self
     {
         $this->typeEstablishment = $typeEstablishment;
         return $this;
     }
 
-    public function getTypeEstablishmentDetail(): ?string
+    public function getTypeEstablishmentDetail(): ?TypeEstablishmentDetailEnum
     {
         return $this->typeEstablishmentDetail;
     }
 
-    public function setTypeEstablishmentDetail(?string $typeEstablishmentDetail): self
+    public function setTypeEstablishmentDetail(?TypeEstablishmentDetailEnum $typeEstablishmentDetail): self
     {
         $this->typeEstablishmentDetail = $typeEstablishmentDetail;
         return $this;

+ 5 - 5
src/Entity/Organization/OrganizationAddressPostal.php

@@ -11,6 +11,7 @@ use ApiPlatform\Metadata\Get;
 use ApiPlatform\Metadata\ApiResource;
 use App\Attribute\OrganizationDefaultValue;
 use App\Entity\Core\AddressPostal;
+use App\Enum\Organization\AddressPostalOrganizationTypeEnum;
 use App\Repository\Organization\OrganizationAddressPostalRepository;
 
 //use DH\Auditor\Provider\Doctrine\Auditing\Annotation\Auditable;
@@ -52,10 +53,9 @@ class OrganizationAddressPostal
     #[Groups("address")]
     private AddressPostal $addressPostal;
 
-    #[ORM\Column(length: 255)]
-    #[Assert\Choice(callback: ['\\App\\Enum\\Organization\\AddressPostalOrganizationTypeEnum', 'toArray'], message: 'invalid-address-postal-type')]
+    #[ORM\Column(length: 50, enumType: AddressPostalOrganizationTypeEnum::class)]
     #[Groups("address")]
-    private string $type;
+    private AddressPostalOrganizationTypeEnum $type;
 
     public function getId(): ?int
     {
@@ -84,12 +84,12 @@ class OrganizationAddressPostal
         return $this;
     }
 
-    public function getType(): string
+    public function getType(): AddressPostalOrganizationTypeEnum
     {
         return $this->type;
     }
 
-    public function setType(string $type): self
+    public function setType(AddressPostalOrganizationTypeEnum $type): self
     {
         $this->type = $type;
         return $this;

+ 31 - 30
src/Entity/Organization/Parameters.php

@@ -9,6 +9,13 @@ use ApiPlatform\Metadata\Get;
 use ApiPlatform\Metadata\ApiResource;
 use App\Entity\Access\Access;
 use App\Entity\Core\File;
+use App\Enum\Core\FileTypeEnum;
+use App\Enum\Core\TimeZoneEnum;
+use App\Enum\Education\AdvancedEducationNotationTypeEnum;
+use App\Enum\Education\PeriodicityEnum;
+use App\Enum\Organization\BulletinOutputEnum;
+use App\Enum\Organization\BulletinPeriodEnum;
+use App\Enum\Organization\SendToBulletinEnum;
 use App\Repository\Organization\ParametersRepository;
 use App\State\Processor\Organization\ParametersProcessor;
 
@@ -88,9 +95,8 @@ class Parameters
     #[ORM\OneToMany(mappedBy: 'publicationDirector', targetEntity: Access::class)]
     private Collection $publicationDirectors;
 
-    #[ORM\Column(length: 255, nullable: true)]
-    #[Assert\Choice(callback: ['\\App\\Enum\\Organization\\BulletinPeriodEnum', 'toArray'], message: 'invalid-bulletin-period')]
-    private ?string $bulletinPeriod = null;
+    #[ORM\Column(length: 255, nullable: true, enumType: BulletinOutputEnum::class)]
+    private ?BulletinPeriodEnum $bulletinPeriod = null;
 
     #[ORM\Column(options: ['default' => false])]
     private bool $bulletinWithTeacher = false;
@@ -116,16 +122,14 @@ class Parameters
     #[ORM\Column(options: ['default' => true])]
     private bool $bulletinShowAverages = true;
 
-    #[ORM\Column(length: 255, nullable: true)]
-    #[Assert\Choice(callback: ['\\App\\Enum\\Organization\\BulletinOutputEnum', 'toArray'], message: 'invalid-bulletin-output')]
-    private ?string $bulletinOutput = null;
+    #[ORM\Column(length: 255, nullable: true, enumType: BulletinOutputEnum::class)]
+    private ?BulletinOutputEnum $bulletinOutput = null;
 
     #[ORM\Column(options: ['default' => true])]
     private bool $bulletinEditWithoutEvaluation = true;
 
-    #[ORM\Column(length: 255, nullable: true, options: ['default' => 'STUDENTS_AND_THEIR_GUARDIANS'])]
-    #[Assert\Choice(callback: ['\\App\\Enum\\Organization\\SendToBulletinEnum', 'toArray'], message: 'invalid-send-to-bulletin')]
-    private ?string $bulletinReceiver = null;
+    #[ORM\Column(length: 255, nullable: true, enumType: SendToBulletinEnum::class, options: ['default' => SendToBulletinEnum::STUDENTS_AND_THEIR_GUARDIANS])]
+    private ?SendToBulletinEnum $bulletinReceiver = null;
 
     #[ORM\Column(length: 255, nullable: true)]
     private ?string $usernameSMS = null;
@@ -143,17 +147,14 @@ class Parameters
     #[ORM\JoinColumn(referencedColumnName: 'id', nullable: true, onDelete: 'SET NULL')]
     private ?File $qrCode = null;
 
-    #[ORM\Column(length: 255, options: ['default' => 'Europe/Paris'])]
-    #[Assert\Choice(callback: ['\\App\\Enum\\Core\\TimeZoneEnum', 'toArray'], message: 'invalid-timezone')]
-    private ?string $timezone = "Europe/Paris";
+    #[ORM\Column(length: 255, enumType: TimeZoneEnum::class, options: ['default' => TimeZoneEnum::EUROPE_PARIS])]
+    private ?TimeZoneEnum $timezone = null;
 
-    #[ORM\Column(length: 255, nullable: false, options: ['default' => 'ANNUAL'])]
-    #[Assert\Choice(callback: ['\\App\\Enum\\Education\\PeriodicityEnum', 'toArray'], message: 'invalid-periodicity')]
-    private ?string $educationPeriodicity = 'ANNUAL';
+    #[ORM\Column(length: 255, nullable: false, enumType: PeriodicityEnum::class, options: ['default' => PeriodicityEnum::ANNUAL])]
+    private ?PeriodicityEnum $educationPeriodicity = null;
 
-    #[ORM\Column(length: 255, nullable: true, options: ['default' => 'BY_EDUCATION'])]
-    #[Assert\Choice(callback: ['\\App\\Enum\\Education\\AdvancedEducationNotationTypeEnum', 'toArray'], message: 'invalid-advanced-education-notation-type')]
-    private ?string $advancedEducationNotationType = null;
+    #[ORM\Column(length: 255, nullable: true, enumType: AdvancedEducationNotationTypeEnum::class, options: ['default' => AdvancedEducationNotationTypeEnum::BY_EDUCATION])]
+    private ?AdvancedEducationNotationTypeEnum $advancedEducationNotationType = null;
 
     #[ORM\Column(options: ['default' => false])]
     private bool $sendAttendanceEmail = false;
@@ -324,12 +325,12 @@ class Parameters
         return $this;
     }
 
-    public function getBulletinPeriod(): ?string
+    public function getBulletinPeriod(): ?BulletinPeriodEnum
     {
         return $this->bulletinPeriod;
     }
 
-    public function setBulletinPeriod(?string $bulletinPeriod): self
+    public function setBulletinPeriod(?BulletinPeriodEnum $bulletinPeriod): self
     {
         $this->bulletinPeriod = $bulletinPeriod;
         return $this;
@@ -448,12 +449,12 @@ class Parameters
         return $this;
     }
 
-    public function getBulletinOutput(): ?string
+    public function getBulletinOutput(): ?BulletinOutputEnum
     {
         return $this->bulletinOutput;
     }
 
-    public function setBulletinOutput(?string $bulletinOutput): self
+    public function setBulletinOutput(?BulletinOutputEnum $bulletinOutput): self
     {
         $this->bulletinOutput = $bulletinOutput;
         return $this;
@@ -492,12 +493,12 @@ class Parameters
         return $this;
     }
 
-    public function getBulletinReceiver(): ?string
+    public function getBulletinReceiver(): ?SendToBulletinEnum
     {
         return $this->bulletinReceiver;
     }
 
-    public function setBulletinReceiver(?string $bulletinReceiver): self
+    public function setBulletinReceiver(?SendToBulletinEnum $bulletinReceiver): self
     {
         $this->bulletinReceiver = $bulletinReceiver;
         return $this;
@@ -525,34 +526,34 @@ class Parameters
         return $this;
     }
 
-    public function getTimezone(): string
+    public function getTimezone(): TimeZoneEnum
     {
         return $this->timezone;
     }
 
-    public function setTimezone(string $timezone): self
+    public function setTimezone(TimeZoneEnum $timezone): self
     {
         $this->timezone = $timezone;
         return $this;
     }
 
-    public function getEducationPeriodicity(): ?string
+    public function getEducationPeriodicity(): ?PeriodicityEnum
     {
         return $this->educationPeriodicity;
     }
 
-    public function setEducationPeriodicity(?string $educationPeriodicity): self
+    public function setEducationPeriodicity(?PeriodicityEnum $educationPeriodicity): self
     {
         $this->educationPeriodicity = $educationPeriodicity;
         return $this;
     }
 
-    public function getAdvancedEducationNotationType(): ?string
+    public function getAdvancedEducationNotationType(): ?AdvancedEducationNotationTypeEnum
     {
         return $this->advancedEducationNotationType;
     }
 
-    public function setAdvancedEducationNotationType(?string $advancedEducationNotationType): self
+    public function setAdvancedEducationNotationType(?AdvancedEducationNotationTypeEnum $advancedEducationNotationType): self
     {
         $this->advancedEducationNotationType = $advancedEducationNotationType;
         return $this;

+ 5 - 5
src/Entity/Organization/Settings.php

@@ -12,6 +12,7 @@ use ApiPlatform\Metadata\Get;
 use ApiPlatform\Metadata\ApiResource;
 use ApiPlatform\Metadata\ApiProperty;
 use ApiPlatform\Metadata\ApiFilter;
+use App\Enum\Organization\SettingsProductEnum;
 use App\Repository\Organization\SettingsRepository;
 
 //use DH\Auditor\Provider\Doctrine\Auditing\Annotation\Auditable;
@@ -35,9 +36,8 @@ class Settings
     #[ORM\JoinColumn(nullable: false)]
     private ?Organization $organization = null;
 
-    #[ORM\Column(length: 255)]
-    #[Assert\Choice(callback: ['\\App\\Enum\\Organization\\SettingsProductEnum', 'toArray'], message: 'invalid-product')]
-    private string $product;
+    #[ORM\Column(length: 50, enumType: SettingsProductEnum::class)]
+    private SettingsProductEnum $product;
 
     /** @var mixed[]|null  */
     #[ORM\Column(type: 'json', length: 4294967295, nullable: true)]
@@ -66,12 +66,12 @@ class Settings
         return $this;
     }
 
-    public function getProduct(): string
+    public function getProduct(): SettingsProductEnum
     {
         return $this->product;
     }
 
-    public function setProduct(string $product): self
+    public function setProduct(SettingsProductEnum $product): self
     {
         $this->product = $product;
         return $this;

+ 10 - 10
src/Entity/Organization/TypeOfPractice.php

@@ -6,6 +6,8 @@ namespace App\Entity\Organization;
 use ApiPlatform\Metadata\GetCollection;
 use ApiPlatform\Metadata\Get;
 use ApiPlatform\Metadata\ApiResource;
+use App\Enum\Cotisation\CategoryTypeOfPracticeEnum;
+use App\Enum\Cotisation\TypeOfPracticeEnum;
 use App\Repository\Organization\TypeOfPracticeRepository;
 
 //use DH\Auditor\Provider\Doctrine\Auditing\Annotation\Auditable;
@@ -30,15 +32,13 @@ class TypeOfPractice
     #[Groups(["read"])]
     private ?int $id = null;
 
-    #[ORM\Column(length: 255, nullable: true)]
-    #[Assert\Choice(callback: ['\\App\\Enum\\Cotisation\\TypeOfPracticeEnum', 'toArray'], message: 'invalid-name')]
+    #[ORM\Column(length: 50, nullable: true, enumType: TypeOfPracticeEnum::class)]
     #[Groups(["read"])]
-    private ?string $name = null;
+    private ?TypeOfPracticeEnum $name = null;
 
-    #[ORM\Column(length: 255, nullable: true)]
-    #[Assert\Choice(callback: ['\\App\\Enum\\Cotisation\\CategoryTypeOfPracticeEnum', 'toArray'], message: 'invalid-category')]
+    #[ORM\Column(length: 50, nullable: true, enumType: CategoryTypeOfPracticeEnum::class)]
     #[Groups(["read"])]
-    private ?string $category = null;
+    private ?CategoryTypeOfPracticeEnum $category = null;
 
     #[ORM\ManyToMany(targetEntity: Organization::class, inversedBy: 'typeOfPractices')]
     #[ORM\JoinTable(name: 'organization_type_of_practices')]
@@ -57,23 +57,23 @@ class TypeOfPractice
         return $this->id;
     }
 
-    public function getName(): ?string
+    public function getName(): ?TypeOfPracticeEnum
     {
         return $this->name;
     }
 
-    public function setName(?string $name): self
+    public function setName(?TypeOfPracticeEnum $name): self
     {
         $this->name = $name;
         return $this;
     }
 
-    public function getCategory(): ?string
+    public function getCategory(): ?CategoryTypeOfPracticeEnum
     {
         return $this->category;
     }
 
-    public function setCategory(?string $category): self
+    public function setCategory(?CategoryTypeOfPracticeEnum $category): self
     {
         $this->category = $category;
         return $this;

+ 5 - 5
src/Entity/Person/Person.php

@@ -11,6 +11,7 @@ use App\Entity\Core\BankAccount;
 use App\Entity\Core\ContactPoint;
 use App\Entity\Core\Country;
 use App\Entity\Core\File;
+use App\Enum\Person\GenderEnum;
 use App\Repository\Person\PersonRepository;
 
 //use DH\Auditor\Provider\Doctrine\Auditing\Annotation\Auditable;
@@ -66,9 +67,8 @@ class Person implements UserInterface, PasswordAuthenticatedUserInterface
     #[Groups("access_address")]
     private Collection $personAddressPostal;
 
-    #[ORM\Column(nullable: true)]
-    #[Assert\Choice(callback: ['\\App\\Enum\\Person\\GenderEnum', 'toArray'], message: 'invalid-gender')]
-    private ?string $gender = null;
+    #[ORM\Column(length: 50,nullable: true, enumType: GenderEnum::class)]
+    private ?GenderEnum $gender = null;
 
     #[ORM\ManyToOne(inversedBy: 'personImages')]
     #[ORM\JoinColumn(referencedColumnName: 'id', nullable: true, onDelete: 'SET NULL')]
@@ -216,13 +216,13 @@ class Person implements UserInterface, PasswordAuthenticatedUserInterface
         return "{$this->getName()} {$this->getGivenName()}";
     }
 
-    public function setGender(?string $gender): self
+    public function setGender(?GenderEnum $gender): self
     {
         $this->gender = $gender;
         return $this;
     }
 
-    public function getGender(): ?string
+    public function getGender(): ?GenderEnum
     {
         return $this->gender;
     }

+ 5 - 5
src/Entity/Person/PersonAddressPostal.php

@@ -6,6 +6,7 @@ namespace App\Entity\Person;
 use ApiPlatform\Metadata\Get;
 use ApiPlatform\Metadata\ApiResource;
 use App\Entity\Core\AddressPostal;
+use App\Enum\Person\AddressPostalPersonTypeEnum;
 use App\Repository\Person\PersonAddressPostalRepository;
 
 //use DH\Auditor\Provider\Doctrine\Auditing\Annotation\Auditable;
@@ -35,10 +36,9 @@ class PersonAddressPostal
     #[Groups("access_address")]
     private AddressPostal $addressPostal;
 
-    #[ORM\Column(length: 255)]
-    #[Assert\Choice(callback: ['\\App\\Enum\\Person\\AddressPostalPersonTypeEnum', 'toArray'], message: 'invalid-address-postal-type')]
+    #[ORM\Column(length: 50, enumType: AddressPostalPersonTypeEnum::class)]
     #[Groups("access_address")]
-    private string $type;
+    private AddressPostalPersonTypeEnum $type;
 
     public function getId(): ?int
     {
@@ -67,12 +67,12 @@ class PersonAddressPostal
         return $this;
     }
 
-    public function getType(): string
+    public function getType(): AddressPostalPersonTypeEnum
     {
         return $this->type;
     }
 
-    public function setType(string $type): self
+    public function setType(AddressPostalPersonTypeEnum $type): self
     {
         $this->type = $type;
         return $this;

+ 16 - 13
src/Enum/Access/DeparturesCauseEnum.php

@@ -1,23 +1,26 @@
 <?php
+
 declare(strict_types=1);
 
 namespace App\Enum\Access;
 
-use MyCLabs\Enum\Enum;
+use App\Enum\EnumMethodsTrait;
 
 /**
  * Due to departures.
  */
-class DeparturesCauseEnum extends Enum
+enum DeparturesCauseEnum: string
 {
-    private const LEFT_THE_STRUCTURE = 'LEFT_THE_STRUCTURE';
-    private const DEATH = 'DEATH';
-    private const REFERENCE = 'REFERENCE';
-    private const ABANDONMENT = 'ABANDONMENT';
-    private const SABBATICAL = 'SABBATICAL';
-    private const OTHER = 'OTHER';
-    private const MOVE = 'MOVE';
-    private const DISEASE = 'DISEASE';
-    private const RESIGNATION = 'RESIGNATION';
-    private const END_OF_TERM = 'END_OF_TERM';
-}
+    use EnumMethodsTrait;
+
+    case LEFT_THE_STRUCTURE = 'LEFT_THE_STRUCTURE';
+    case DEATH = 'DEATH';
+    case REFERENCE = 'REFERENCE';
+    case ABANDONMENT = 'ABANDONMENT';
+    case SABBATICAL = 'SABBATICAL';
+    case OTHER = 'OTHER';
+    case MOVE = 'MOVE';
+    case DISEASE = 'DISEASE';
+    case RESIGNATION = 'RESIGNATION';
+    case END_OF_TERM = 'END_OF_TERM';
+}

+ 47 - 102
src/Enum/Access/FunctionEnum.php

@@ -3,121 +3,66 @@ declare(strict_types=1);
 
 namespace App\Enum\Access;
 
-use MyCLabs\Enum\Enum;
+use App\Enum\EnumMethodsTrait;
 
 /**
  * Activities functions.
- * @method static STUDENT()
- * @method static ADHERENT()
- * @method static OTHER()
- * @method static PRESIDENT()
- * @method static TEACHER()
- * @method static ADMINISTRATIVE_STAFF()
- * @method static TREASURER()
- * @method static ARCHIVIST()
- * @method static DIRECTOR()
- * @method static MUSIC_DIRECTOR_AND_HEAD()
  */
-class FunctionEnum extends Enum
+enum FunctionEnum: string
 {
-    private const STUDENT = 'STUDENT';
-    private const TEACHER = 'TEACHER';
-    private const DIRECTOR = 'DIRECTOR';
-    private const DIRECTOR_ASSISTANT = 'DIRECTOR_ASSISTANT';
-    private const INITIATOR = 'INITIATOR';
-    private const MONITOR = 'MONITOR';
+    use EnumMethodsTrait;
 
-    private const MUSIC_DIRECTOR_AND_HEAD = 'MUSIC_DIRECTOR_AND_HEAD';
-    private const MUSIC_DIRECTOR_AND_HEAD_ASSISTANT = 'MUSIC_DIRECTOR_AND_HEAD_ASSISTANT';
-    private const DESK_OFFICER = 'DESK_OFFICER';
+    case STUDENT = 'STUDENT';
+    case TEACHER = 'TEACHER';
+    case DIRECTOR = 'DIRECTOR';
+    case DIRECTOR_ASSISTANT = 'DIRECTOR_ASSISTANT';
+    case INITIATOR = 'INITIATOR';
+    case MONITOR = 'MONITOR';
+    case MUSIC_DIRECTOR_AND_HEAD = 'MUSIC_DIRECTOR_AND_HEAD';
+    case MUSIC_DIRECTOR_AND_HEAD_ASSISTANT = 'MUSIC_DIRECTOR_AND_HEAD_ASSISTANT';
+    case DESK_OFFICER = 'DESK_OFFICER';
+    case ADMINISTRATIVE_OFFICER = 'ADMINISTRATIVE_OFFICER';
+    case ADMINISTRATIVE_SECRETARY = 'ADMINISTRATIVE_SECRETARY';
+    case ADMINISTRATIVE_DIRECTOR = 'ADMINISTRATIVE_DIRECTOR';
+    case ADMINISTRATIVE_DIRECTOR_ASSISTANT = 'ADMINISTRATIVE_DIRECTOR_ASSISTANT';
+    case ARCHIVIST = 'ARCHIVIST';
+    case PRESENTER = 'PRESENTER';
+    case ADMINISTRATIVE_STAFF = 'ADMINISTRATIVE_STAFF';
+    case NETWORK_ANIMATOR = 'NETWORK_ANIMATOR';
+    case CORRESPONDING = 'CORRESPONDING';
+    case COORDINATOR = 'COORDINATOR';
+    case TECHNICAL_STAFF = 'TECHNICAL_STAFF';
+    case ACCOUNTANT = 'ACCOUNTANT';
+    case ACTIVE_MEMBER_OF_THE_CA = 'ACTIVE_MEMBER_OF_THE_CA';
+    case HONORARY_PRESIDENT = 'HONORARY_PRESIDENT';
+    case PRESIDENT = 'PRESIDENT';
+    case YOUTH_REPRESENTATIVE = 'YOUTH_REPRESENTATIVE';
+    case SECRETARY = 'SECRETARY';
+    case ASSISTANT_SECRETARY = 'ASSISTANT_SECRETARY';
+    case TREASURER = 'TREASURER';
+    case TREASURER_ASSISTANT = 'TREASURER_ASSISTANT';
+    case VICE_PRESIDENT = 'VICE_PRESIDENT';
+    case ADHERENT = 'ADHERENT';
+    case NO_MEMBER = 'NO_MEMBER';
+    case VICE_PRESIDENT_OF_HONOR = 'VICE_PRESIDENT_OF_HONOR';
+    case HOUR_PRESIDENT = 'HOUR_PRESIDENT';
+    case PRESIDENT_ASSISTANT = 'PRESIDENT_ASSISTANT';
+    case ACTIVE_COOPTED_MEMBER_OF_THE_CA = 'ACTIVE_COOPTED_MEMBER_OF_THE_CA';
+    case ACTIVE_SUBSTITUTE_MEMBER_OF_THE_CA = 'ACTIVE_SUBSTITUTE_MEMBER_OF_THE_CA';
+    case MEMBER_OF_THE_BOARD = 'MEMBER_OF_THE_BOARD';
+    case MEMBER_OF_BOARD_OF_HONOR = 'MEMBER_OF_BOARD_OF_HONOR';
+    case HONORARY_MEMBER = 'HONORARY_MEMBER';
+    case BENEFACTOR_MEMBER = 'BENEFACTOR_MEMBER';
+    case HOUR_MEMBER = 'HOUR_MEMBER';
+    case OTHER = 'OTHER';
 
-    private const ADMINISTRATIVE_OFFICER = 'ADMINISTRATIVE_OFFICER';
-    private const ADMINISTRATIVE_SECRETARY = 'ADMINISTRATIVE_SECRETARY';
-    private const ADMINISTRATIVE_DIRECTOR = 'ADMINISTRATIVE_DIRECTOR';
-    private const ADMINISTRATIVE_DIRECTOR_ASSISTANT = 'ADMINISTRATIVE_DIRECTOR_ASSISTANT';
-    private const ARCHIVIST = 'ARCHIVIST';
-    private const PRESENTER = 'PRESENTER';
-    private const ADMINISTRATIVE_STAFF = 'ADMINISTRATIVE_STAFF';
-    private const NETWORK_ANIMATOR = 'NETWORK_ANIMATOR';
-    private const CORRESPONDING = 'CORRESPONDING';
-    private const COORDINATOR = 'COORDINATOR';
-    private const TECHNICAL_STAFF = 'TECHNICAL_STAFF';
-    private const ACCOUNTANT = 'ACCOUNTANT';
-
-    private const ACTIVE_MEMBER_OF_THE_CA = 'ACTIVE_MEMBER_OF_THE_CA';
-    private const HONORARY_PRESIDENT = 'HONORARY_PRESIDENT';
-    private const PRESIDENT = 'PRESIDENT';
-    private const YOUTH_REPRESENTATIVE = 'YOUTH_REPRESENTATIVE';
-    private const SECRETARY = 'SECRETARY';
-    private const ASSISTANT_SECRETARY = 'ASSISTANT_SECRETARY';
-    private const TREASURER = 'TREASURER';
-    private const TREASURER_ASSISTANT = 'TREASURER_ASSISTANT';
-    private const VICE_PRESIDENT = 'VICE_PRESIDENT';
-    private const ADHERENT = 'ADHERENT';
-    private const NO_MEMBER = 'NO_MEMBER';
-    private const VICE_PRESIDENT_OF_HONOR = 'VICE_PRESIDENT_OF_HONOR';
-    private const HOUR_PRESIDENT = 'HOUR_PRESIDENT';
-    private const PRESIDENT_ASSISTANT = 'PRESIDENT_ASSISTANT';
-    private const ACTIVE_COOPTED_MEMBER_OF_THE_CA = 'ACTIVE_COOPTED_MEMBER_OF_THE_CA';
-    private const ACTIVE_SUBSTITUTE_MEMBER_OF_THE_CA = 'ACTIVE_SUBSTITUTE_MEMBER_OF_THE_CA';
-    private const MEMBER_OF_THE_BOARD = 'MEMBER_OF_THE_BOARD';
-    private const MEMBER_OF_BOARD_OF_HONOR = 'MEMBER_OF_BOARD_OF_HONOR';
-    private const HONORARY_MEMBER = 'HONORARY_MEMBER';
-    private const BENEFACTOR_MEMBER = 'BENEFACTOR_MEMBER';
-    private const HOUR_MEMBER = 'HOUR_MEMBER';
-
-    private const OTHER = 'OTHER';
-
-    /**
-     * @return list<string>
-     */
-    public static function getOrganizationStaffAndBoardOfDirectorsMission(): array {
-        return [
-            self::ACTIVE_MEMBER_OF_THE_CA,
-            self::HONORARY_PRESIDENT,
-            self::PRESIDENT,
-            self::YOUTH_REPRESENTATIVE,
-            self::SECRETARY,
-            self::ASSISTANT_SECRETARY,
-            self::TREASURER,
-            self::TREASURER_ASSISTANT,
-            self::VICE_PRESIDENT,
-            self::VICE_PRESIDENT_OF_HONOR,
-            self::HOUR_PRESIDENT,
-            self::PRESIDENT_ASSISTANT,
-            self::ACTIVE_COOPTED_MEMBER_OF_THE_CA,
-            self::ACTIVE_SUBSTITUTE_MEMBER_OF_THE_CA,
-            self::MEMBER_OF_THE_BOARD,
-            self::MEMBER_OF_BOARD_OF_HONOR,
-            self::SECRETARY,
-            self::TREASURER,
-            self::DIRECTOR,
-            self::DIRECTOR_ASSISTANT,
-            self::ADMINISTRATIVE_DIRECTOR,
-            self::ADMINISTRATIVE_DIRECTOR_ASSISTANT,
-            self::MUSIC_DIRECTOR_AND_HEAD,
-            self::MUSIC_DIRECTOR_AND_HEAD_ASSISTANT,
-            self::DESK_OFFICER,
-            self::ADMINISTRATIVE_OFFICER,
-            self::ADMINISTRATIVE_SECRETARY,
-            self::ARCHIVIST,
-            self::PRESENTER,
-            self::ADMINISTRATIVE_STAFF,
-            self::NETWORK_ANIMATOR,
-            self::CORRESPONDING,
-            self::COORDINATOR,
-            self::TECHNICAL_STAFF,
-            self::ACCOUNTANT,
-            self::MUSIC_DIRECTOR_AND_HEAD
-        ];
-    }
 
     /**
      * Office missions
      *
      * Used by the DolibarrSyncService
      *
-     * @return list<string>
+     * @return list<FunctionEnum>
      */
     public static function getOfficeMissions(): array
     {

+ 13 - 12
src/Enum/Access/RoleEnum.php

@@ -3,23 +3,24 @@ declare(strict_types=1);
 
 namespace App\Enum\Access;
 
-use MyCLabs\Enum\Enum;
+use App\Enum\EnumMethodsTrait;
 
 /**
  * Role
- * @method static ROLE_ADMIN()
  */
-class RoleEnum extends Enum
+enum RoleEnum: string
 {
-    private const ROLE_ADMIN = 'ROLE_ADMIN';
-    private const ROLE_ADMINISTRATIF_MANAGER = 'ROLE_ADMINISTRATIF_MANAGER';
-    private const ROLE_PEDAGOGICS_MANAGER = 'ROLE_PEDAGOGICS_MANAGER';
-    private const ROLE_FINANCIAL_MANAGER = 'ROLE_FINANCIAL_MANAGER';
-    private const ROLE_CA = 'ROLE_CA';
-    private const ROLE_STUDENT = 'ROLE_STUDENT';
-    private const ROLE_TEACHER = 'ROLE_TEACHER';
-    private const ROLE_MEMBER = 'ROLE_MEMBER';
-    private const ROLE_OTHER = 'ROLE_OTHER';
+    use EnumMethodsTrait;
+
+    case ROLE_ADMIN = 'ROLE_ADMIN';
+    case ROLE_ADMINISTRATIF_MANAGER = 'ROLE_ADMINISTRATIF_MANAGER';
+    case ROLE_PEDAGOGICS_MANAGER = 'ROLE_PEDAGOGICS_MANAGER';
+    case ROLE_FINANCIAL_MANAGER = 'ROLE_FINANCIAL_MANAGER';
+    case ROLE_CA = 'ROLE_CA';
+    case ROLE_STUDENT = 'ROLE_STUDENT';
+    case ROLE_TEACHER = 'ROLE_TEACHER';
+    case ROLE_MEMBER = 'ROLE_MEMBER';
+    case ROLE_OTHER = 'ROLE_OTHER';
 }
 
 

+ 9 - 7
src/Enum/Access/TypeFunctionEnum.php

@@ -3,16 +3,18 @@ declare(strict_types=1);
 
 namespace App\Enum\Access;
 
-use MyCLabs\Enum\Enum;
+use App\Enum\EnumMethodsTrait;
 
 /**
  * Type of function.
  */
-class TypeFunctionEnum extends Enum
+enum TypeFunctionEnum: string
 {
-   private const ACTIVITIES_FUNCTION = 'ACTIVITIES_FUNCTION';
-   private const ADMINISTRATIVES_FUNCTION = 'ADMINISTRATIVES_FUNCTION';
-   private const PEDAGOGICS_FUNCTION = 'PEDAGOGICS_FUNCTION';
-   private const ASSOCIATIVES_FUNCTION = 'ASSOCIATIVES_FUNCTION';
-   private const OTHER_FUNCTION = 'OTHER_FUNCTION';
+    use EnumMethodsTrait;
+
+    case ACTIVITIES_FUNCTION = 'ACTIVITIES_FUNCTION';
+    case ADMINISTRATIVES_FUNCTION = 'ADMINISTRATIVES_FUNCTION';
+    case PEDAGOGICS_FUNCTION = 'PEDAGOGICS_FUNCTION';
+    case ASSOCIATIVES_FUNCTION = 'ASSOCIATIVES_FUNCTION';
+    case OTHER_FUNCTION = 'OTHER_FUNCTION';
 }

+ 7 - 6
src/Enum/Booking/VisibilityEnum.php

@@ -1,16 +1,17 @@
 <?php
+declare(strict_types=1);
 
 namespace App\Enum\Booking;
 
-use MyCLabs\Enum\Enum;
+use App\Enum\EnumMethodsTrait;
 
 /**
  * Visibilité des évènements
- * @method static PRIVATE_VISIBILITY()
- * @method static PUBLIC_VISIBILITY()
  */
-class VisibilityEnum extends Enum
+enum VisibilityEnum: string
 {
-    private const PRIVATE_VISIBILITY = 'PRIVATE_VISIBILITY';
-    private const PUBLIC_VISIBILITY = 'PUBLIC_VISIBILITY';
+    use EnumMethodsTrait;
+
+    case PRIVATE_VISIBILITY = 'PRIVATE_VISIBILITY';
+    case PUBLIC_VISIBILITY = 'PUBLIC_VISIBILITY';
 }

+ 8 - 11
src/Enum/Core/ContactPointTypeEnum.php

@@ -3,20 +3,17 @@ declare(strict_types=1);
 
 namespace App\Enum\Core;
 
-use MyCLabs\Enum\Enum;
+use App\Enum\EnumMethodsTrait;
 
 /**
  * Type de point de contact
- *
- * @method static BILL()
- * @method static CONTACT()
- * @method static PRINCIPAL()
- * @method static OTHER()
  */
-class ContactPointTypeEnum extends Enum
+enum ContactPointTypeEnum: string
 {
-    private const PRINCIPAL = 'PRINCIPAL';
-    private const BILL = 'BILL';
-    private const OTHER = 'OTHER';
-    private const CONTACT = 'CONTACT';
+    use EnumMethodsTrait;
+
+    case PRINCIPAL = 'PRINCIPAL';
+    case BILL = 'BILL';
+    case OTHER = 'OTHER';
+    case CONTACT = 'CONTACT';
 }

+ 7 - 8
src/Enum/Core/EmailSendingTypeEnum.php

@@ -3,18 +3,17 @@ declare(strict_types=1);
 
 namespace App\Enum\Core;
 
-use MyCLabs\Enum\Enum;
+use App\Enum\EnumMethodsTrait;
 
 /**
  * Type de point de contact
  *
- * @method static TO()
- * @method static BBC()
- * @method static CC()
  */
-class EmailSendingTypeEnum extends Enum
+enum EmailSendingTypeEnum: string
 {
-    private const TO = 'TO';
-    private const BBC = 'BBC';
-    private const CC = 'CC';
+    use EnumMethodsTrait;
+
+    case TO = 'TO';
+    case BBC = 'BBC';
+    case CC = 'CC';
 }

+ 6 - 6
src/Enum/Core/FileHostEnum.php

@@ -3,15 +3,15 @@ declare(strict_types=1);
 
 namespace App\Enum\Core;
 
-use MyCLabs\Enum\Enum;
+use App\Enum\EnumMethodsTrait;
 
 /**
  * Statuts des fichiers
- * @method static API1()
- * @method static AP2I()
  */
-class FileHostEnum extends Enum
+enum FileHostEnum: string
 {
-    private const API1 = 'api';
-    private const AP2I = 'ap2i';
+    use EnumMethodsTrait;
+
+    case API1 = 'api';
+    case AP2I = 'ap2i';
 }

+ 4 - 0
src/Enum/Core/FileSizeEnum.php

@@ -3,8 +3,12 @@ declare(strict_types=1);
 
 namespace App\Enum\Core;
 
+use App\Enum\EnumMethodsTrait;
+
 enum FileSizeEnum: string
 {
+    use EnumMethodsTrait;
+
     case SM = 'sm';
     case MD = 'md';
     case LG = 'lg';

+ 9 - 10
src/Enum/Core/FileStatusEnum.php

@@ -1,20 +1,19 @@
 <?php
+declare(strict_types=1);
 
 namespace App\Enum\Core;
 
-use MyCLabs\Enum\Enum;
+use App\Enum\EnumMethodsTrait;
 
 /**
  * Statuts des fichiers
- * @method static PENDING()
- * @method static READY()
- * @method static DELETED()
- * @method static ERROR()
  */
-class FileStatusEnum extends Enum
+enum FileStatusEnum: string
 {
-    private const PENDING = 'PENDING';
-    private const READY = 'READY';
-    private const DELETED = 'DELETED';
-    private const ERROR = 'ERROR';
+    use EnumMethodsTrait;
+
+    case PENDING = 'PENDING';
+    case READY = 'READY';
+    case DELETED = 'DELETED';
+    case ERROR = 'ERROR';
 }

+ 11 - 12
src/Enum/Core/FileTypeEnum.php

@@ -1,21 +1,20 @@
 <?php
+declare(strict_types=1);
 
 namespace App\Enum\Core;
 
-use MyCLabs\Enum\Enum;
+use App\Enum\EnumMethodsTrait;
 
 /**
- * @method static UNKNOWN()
- * @method static NONE()
- * @method static LICENCE_CMF()
- * @method static BILL()
- * @method static UPLOADED()
+ * Type de file
  */
-class FileTypeEnum extends Enum
+enum FileTypeEnum: string
 {
-    private const UNKNOWN = 'UNKNOWN';
-    private const NONE = 'NONE';
-    private const LICENCE_CMF ='LICENCE_CMF';
-    private const BILL ='BILL';
-    private const UPLOADED ='UPLOADED';
+    use EnumMethodsTrait;
+
+    case UNKNOWN = 'UNKNOWN';
+    case NONE = 'NONE';
+    case LICENCE_CMF ='LICENCE_CMF';
+    case BILL ='BILL';
+    case UPLOADED ='UPLOADED';
 }

+ 7 - 8
src/Enum/Core/FileVisibilityEnum.php

@@ -3,17 +3,16 @@ declare(strict_types=1);
 
 namespace App\Enum\Core;
 
-use MyCLabs\Enum\Enum;
+use App\Enum\EnumMethodsTrait;
 
 /**
  * Statuts des fichiers
- * @method static EVERYBODY()
- * @method static NOBODY()
- * @method static ONLY_ORGANIZATION()
  */
-class FileVisibilityEnum extends Enum
+enum FileVisibilityEnum: string
 {
-    private const EVERYBODY = 'EVERYBODY';
-    private const NOBODY = 'NOBODY';
-    private const ONLY_ORGANIZATION = 'ONLY_ORGANIZATION';
+    use EnumMethodsTrait;
+
+    case EVERYBODY = 'EVERYBODY';
+    case NOBODY = 'NOBODY';
+    case ONLY_ORGANIZATION = 'ONLY_ORGANIZATION';
 }

+ 9 - 11
src/Enum/Core/NotificationTypeEnum.php

@@ -3,21 +3,19 @@ declare(strict_types=1);
 
 namespace App\Enum\Core;
 
-use MyCLabs\Enum\Enum;
+use App\Enum\EnumMethodsTrait;
 
 /**
  * Type de notifications
  *
- * @method static FILE()
- * @method static MESSAGE()
- * @method static SYSTEM()
- * @method static ERROR()
  */
-class NotificationTypeEnum extends Enum
+enum NotificationTypeEnum: string
 {
-    private const SYSTEM = 'SYSTEM';
-    private const FILE = 'FILE';
-    private const MESSAGE = 'MESSAGE';
-    private const PRINTING = 'PRINTING';
-    private const ERROR = 'ERROR';
+    use EnumMethodsTrait;
+
+    case SYSTEM = 'SYSTEM';
+    case FILE = 'FILE';
+    case MESSAGE = 'MESSAGE';
+    case PRINTING = 'PRINTING';
+    case ERROR = 'ERROR';
 }

+ 7 - 13
src/Enum/Core/TimeZoneEnum.php

@@ -3,23 +3,17 @@ declare(strict_types=1);
 
 namespace App\Enum\Core;
 
-use MyCLabs\Enum\Enum;
+use App\Enum\EnumMethodsTrait;
 
 /**
  * TimeZone disponibles
  * @package App\Enum\Core
  */
-class TimeZoneEnum extends Enum
+enum TimeZoneEnum: string
 {
-    /**
-     * Return a custom array instead the original array
-     */
-    public static function toArray(): array
-    {
-        return [
-         'Indian/Reunion' => 'Indian/Reunion',
-         'Europe/Zurich' => 'Europe/Zurich',
-         'Europe/Paris' => 'Europe/Paris'
-        ];
-    }
+    use EnumMethodsTrait;
+
+    case INDIAN_REUNION = 'Indian/Reunion';
+    case EUROPE_ZURICH = 'Europe/Zurich';
+    case EUROPE_PARIS = 'Europe/Paris';
 }

+ 8 - 10
src/Enum/Cotisation/AlertStateEnum.php

@@ -3,19 +3,17 @@ declare(strict_types=1);
 
 namespace App\Enum\Cotisation;
 
-use MyCLabs\Enum\Enum;
+use App\Enum\EnumMethodsTrait;
 
 /**
  * état des alertes des cotisations disponibles.
- * @method static AFFILIATION()
- * @method static INSURANCE()
- * @method static INVOICE()
- * @method static ADVERTISINGINSURANCE()
  */
-class AlertStateEnum extends Enum
+enum AlertStateEnum: string
 {
-    private const AFFILIATION ='AFFILIATION';
-    private const INVOICE ='INVOICE';
-    private const INSURANCE = 'INSURANCE';
-    private const ADVERTISINGINSURANCE = 'ADVERTISINGINSURANCE';
+    use EnumMethodsTrait;
+
+    case AFFILIATION ='AFFILIATION';
+    case INVOICE ='INVOICE';
+    case INSURANCE = 'INSURANCE';
+    case ADVERTISINGINSURANCE = 'ADVERTISINGINSURANCE';
 }

+ 9 - 7
src/Enum/Cotisation/CategoryTypeOfPracticeEnum.php

@@ -3,16 +3,18 @@ declare(strict_types=1);
 
 namespace App\Enum\Cotisation;
 
-use MyCLabs\Enum\Enum;
+use App\Enum\EnumMethodsTrait;
 
 /**
  * catgorie des types de pratiques
  */
-class CategoryTypeOfPracticeEnum extends Enum
+enum CategoryTypeOfPracticeEnum: string
 {
-    private const CATEGORY_ORCHESTRE = 'CATEGORY_ORCHESTRE';
-    private const CATEGORY_AMBULATORY = 'CATEGORY_AMBULATORY';
-    private const CATEGORY_CHORUS = 'CATEGORY_CHORUS';
-    private const CATEGORY_BAND = 'CATEGORY_BAND';
-    private const CATEGORY_OTHER = 'CATEGORY_OTHER';
+    use EnumMethodsTrait;
+
+    case CATEGORY_ORCHESTRE = 'CATEGORY_ORCHESTRE';
+    case CATEGORY_AMBULATORY = 'CATEGORY_AMBULATORY';
+    case CATEGORY_CHORUS = 'CATEGORY_CHORUS';
+    case CATEGORY_BAND = 'CATEGORY_BAND';
+    case CATEGORY_OTHER = 'CATEGORY_OTHER';
 }

+ 42 - 40
src/Enum/Cotisation/TypeOfPracticeEnum.php

@@ -3,49 +3,51 @@ declare(strict_types=1);
 
 namespace App\Enum\Cotisation;
 
-use MyCLabs\Enum\Enum;
+use App\Enum\EnumMethodsTrait;
 
 /**
  * noms des types de pratiques
  */
-class TypeOfPracticeEnum extends Enum
+enum TypeOfPracticeEnum: string
 {
-    private const BATTERY_FANFARE = 'BATTERY_FANFARE';
-    private const BIG_BAND = 'BIG_BAND';
-    private const BRASS_BAND = 'BRASS_BAND';
-    private const MIXED_CHORUS = 'MIXED_CHORUS';
-    private const FEMAL_CHOIR = 'FEMAL_CHOIR';
-    private const MENS_CHOIR = 'MENS_CHOIR';
-    private const CHILDRENS_CHOIR = 'CHILDRENS_CHOIR';
-    private const ORCHESTRA_CLASS = 'ORCHESTRA_CLASS';
-    private const COPPER_BAND = 'COPPER_BAND';
-    private const JAZZ_BAND = 'JAZZ_BAND';
-    private const PERCUSSION_BAND = 'PERCUSSION_BAND';
-    private const PLUCKED_ORCHESTRA = 'PLUCKED_ORCHESTRA';
-    private const FOLKLORIC_BAND = 'FOLKLORIC_BAND';
-    private const VOCAL_BAND_UP_16 = 'VOCAL_BAND_UP_16';
-    private const FIFE_AND_DRUM = 'FIFE_AND_DRUM';
-    private const CURRENT_MUSIC_GROUP = 'CURRENT_MUSIC_GROUP';
-    private const CHAMBER_MUSIC_ENSEMBLE = 'CHAMBER_MUSIC_ENSEMBLE';
-    private const TRADITIONAL_MUSIC_ENSEMBLE = 'TRADITIONAL_MUSIC_ENSEMBLE';
-    private const VARIOUS_ORCHESTRA = 'VARIOUS_ORCHESTRA';
-    private const ACCORDION_ORCHESTRA = 'ACCORDION_ORCHESTRA';
-    private const HARMONY_ORCHESTRA = 'HARMONY_ORCHESTRA';
-    private const FANFARE_BAND = 'FANFARE_BAND';
-    private const SYMPHONY_ORCHESTRA = 'SYMPHONY_ORCHESTRA';
-    private const VIOLIN_BAND = 'VIOLIN_BAND';
-    private const SAXOPHONES_BAND = 'SAXOPHONES_BAND';
-    private const HUNTING_HORNS = 'HUNTING_HORNS';
-    private const STRING_ORCHESTRA = 'STRING_ORCHESTRA';
-    private const FLUTE_ENSEMBLE = 'FLUTE_ENSEMBLE';
-    private const CLARINET_CHOIR = 'CLARINET_CHOIR';
-    private const PHILHARMONIC_ORCHESTRA = 'PHILHARMONIC_ORCHESTRA';
-    private const BANDAS = 'BANDAS';
-    private const BAGAD = 'BAGAD';
-    private const BATTUCADA = 'BATTUCADA';
-    private const MARCHING_BAND = 'MARCHING_BAND';
-    private const EDUCATION = "EDUCATION";
-    private const CHEERLEADER = "CHEERLEADER";
-    private const TROOP = "TROOP";
-    private const OTHER = "OTHER";
+    use EnumMethodsTrait;
+
+    case BATTERY_FANFARE = 'BATTERY_FANFARE';
+    case BIG_BAND = 'BIG_BAND';
+    case BRASS_BAND = 'BRASS_BAND';
+    case MIXED_CHORUS = 'MIXED_CHORUS';
+    case FEMAL_CHOIR = 'FEMAL_CHOIR';
+    case MENS_CHOIR = 'MENS_CHOIR';
+    case CHILDRENS_CHOIR = 'CHILDRENS_CHOIR';
+    case ORCHESTRA_enum = 'ORCHESTRA_enum';
+    case COPPER_BAND = 'COPPER_BAND';
+    case JAZZ_BAND = 'JAZZ_BAND';
+    case PERCUSSION_BAND = 'PERCUSSION_BAND';
+    case PLUCKED_ORCHESTRA = 'PLUCKED_ORCHESTRA';
+    case FOLKLORIC_BAND = 'FOLKLORIC_BAND';
+    case VOCAL_BAND_UP_16 = 'VOCAL_BAND_UP_16';
+    case FIFE_AND_DRUM = 'FIFE_AND_DRUM';
+    case CURRENT_MUSIC_GROUP = 'CURRENT_MUSIC_GROUP';
+    case CHAMBER_MUSIC_ENSEMBLE = 'CHAMBER_MUSIC_ENSEMBLE';
+    case TRADITIONAL_MUSIC_ENSEMBLE = 'TRADITIONAL_MUSIC_ENSEMBLE';
+    case VARIOUS_ORCHESTRA = 'VARIOUS_ORCHESTRA';
+    case ACCORDION_ORCHESTRA = 'ACCORDION_ORCHESTRA';
+    case HARMONY_ORCHESTRA = 'HARMONY_ORCHESTRA';
+    case FANFARE_BAND = 'FANFARE_BAND';
+    case SYMPHONY_ORCHESTRA = 'SYMPHONY_ORCHESTRA';
+    case VIOLIN_BAND = 'VIOLIN_BAND';
+    case SAXOPHONES_BAND = 'SAXOPHONES_BAND';
+    case HUNTING_HORNS = 'HUNTING_HORNS';
+    case STRING_ORCHESTRA = 'STRING_ORCHESTRA';
+    case FLUTE_ENSEMBLE = 'FLUTE_ENSEMBLE';
+    case CLARINET_CHOIR = 'CLARINET_CHOIR';
+    case PHILHARMONIC_ORCHESTRA = 'PHILHARMONIC_ORCHESTRA';
+    case BANDAS = 'BANDAS';
+    case BAGAD = 'BAGAD';
+    case BATTUCADA = 'BATTUCADA';
+    case MARCHING_BAND = 'MARCHING_BAND';
+    case EDUCATION = "EDUCATION";
+    case CHEERLEADER = "CHEERLEADER";
+    case TROOP = "TROOP";
+    case OTHER = "OTHER";
 }

+ 6 - 6
src/Enum/Education/AdvancedEducationNotationTypeEnum.php

@@ -3,15 +3,15 @@ declare(strict_types=1);
 
 namespace App\Enum\Education;
 
-use MyCLabs\Enum\Enum;
+use App\Enum\EnumMethodsTrait;
 
 /**
  * Type possible sur lesquels les grilles péda doivent se baser
- * @method static BY_TEACHER()
- * @method static BY_EDUCATION()
  */
-class AdvancedEducationNotationTypeEnum extends Enum
+enum AdvancedEducationNotationTypeEnum: string
 {
-    private const BY_TEACHER ='BY_TEACHER';
-    private const BY_EDUCATION ='BY_EDUCATION';
+    use EnumMethodsTrait;
+
+    case BY_TEACHER ='BY_TEACHER';
+    case BY_EDUCATION ='BY_EDUCATION';
 }

+ 10 - 8
src/Enum/Education/CycleEnum.php

@@ -3,17 +3,19 @@ declare(strict_types=1);
 
 namespace App\Enum\Education;
 
-use MyCLabs\Enum\Enum;
+use App\Enum\EnumMethodsTrait;
 
 /**
  * Cycle Enum.
  */
-class CycleEnum extends Enum
+enum CycleEnum: string
 {
-    private const INITIATION_CYCLE = 'INITIATION_CYCLE';
-    private const CYCLE_1 = 'CYCLE_1';
-    private const CYCLE_2 = 'CYCLE_2';
-    private const CYCLE_3 = 'CYCLE_3';
-    private const CYCLE_4 = 'CYCLE_4';
-    private const OUT_CYCLE = 'OUT_CYCLE';
+    use EnumMethodsTrait;
+
+    case INITIATION_CYCLE = 'INITIATION_CYCLE';
+    case CYCLE_1 = 'CYCLE_1';
+    case CYCLE_2 = 'CYCLE_2';
+    case CYCLE_3 = 'CYCLE_3';
+    case CYCLE_4 = 'CYCLE_4';
+    case OUT_CYCLE = 'OUT_CYCLE';
 }

+ 8 - 6
src/Enum/Education/PeriodicityEnum.php

@@ -3,15 +3,17 @@ declare(strict_types=1);
 
 namespace App\Enum\Education;
 
-use MyCLabs\Enum\Enum;
+use App\Enum\EnumMethodsTrait;
 
 /**
  * Période disponibles.
  */
-class PeriodicityEnum extends Enum
+enum PeriodicityEnum: string
 {
-    private const MONTHLY ='MONTHLY';
-    private const QUARTERLY ='QUARTERLY';
-    private const HALF = 'HALF';
-    private const ANNUAL = 'ANNUAL';
+    use EnumMethodsTrait;
+
+    case MONTHLY ='MONTHLY';
+    case QUARTERLY ='QUARTERLY';
+    case HALF = 'HALF';
+    case ANNUAL = 'ANNUAL';
 }

+ 7 - 8
src/Enum/Education/TypeCriteriaEnum.php

@@ -1,19 +1,18 @@
 <?php
 declare(strict_types=1);
 
-
 namespace App\Enum\Education;
 
-use MyCLabs\Enum\Enum;
+use App\Enum\EnumMethodsTrait;
 
 /**
  * Type de critère possible pour les notations
- * @method static WITH_NOTATION()
- * @method static WITHOUT_NOTATION()
  */
-class TypeCriteriaEnum extends Enum
+enum TypeCriteriaEnum: string
 {
-    private const WITH_NOTATION   = 'WITH_NOTATION';
-    private const CUSTOM_NOTATION  = 'CUSTOM_NOTATION';
-    private const WITHOUT_NOTATION   = 'WITHOUT_NOTATION';
+    use EnumMethodsTrait;
+
+    case WITH_NOTATION   = 'WITH_NOTATION';
+    case CUSTOM_NOTATION  = 'CUSTOM_NOTATION';
+    case WITHOUT_NOTATION   = 'WITHOUT_NOTATION';
 }

+ 31 - 0
src/Enum/EnumMethodsTrait.php

@@ -0,0 +1,31 @@
+<?php
+declare(strict_types=1);
+
+namespace App\Enum;
+
+trait EnumMethodsTrait{
+
+    /**
+     * @return list<string|int>
+     */
+    public static function names(): array
+    {
+        return array_column(self::cases(), 'name');
+    }
+
+    /**
+     * @return list<string|int>
+     */
+    public static function values(): array
+    {
+        return array_column(self::cases(), 'value');
+    }
+
+    /**
+     * @return array<string, string|int>
+     */
+    public static function array(): array
+    {
+        return array_combine(self::values(), self::names());
+    }
+}

+ 10 - 14
src/Enum/Export/ExportFormatEnum.php

@@ -3,24 +3,20 @@ declare(strict_types=1);
 
 namespace App\Enum\Export;
 
-use MyCLabs\Enum\Enum;
+use App\Enum\EnumMethodsTrait;
 
 /**
  * Formats de sortie des fichiers exportés
  *
- * @method static PDF()
- * @method static CSV()
- * @method static TXT()
- * @method static XLSX()
- * @method static XML()
- * @method static DOCX()
  */
-class ExportFormatEnum extends Enum
+enum ExportFormatEnum: string
 {
-    private const PDF ='pdf';
-    private const CSV ='csv';
-    private const TXT = 'txt';
-    private const XLSX = 'xlsx';
-    private const XML = 'xml';
-    private const DOCX = 'docx';
+    use EnumMethodsTrait;
+
+    case PDF ='pdf';
+    case CSV ='csv';
+    case TXT = 'txt';
+    case XLSX = 'xlsx';
+    case XML = 'xml';
+    case DOCX = 'docx';
 }

+ 12 - 13
src/Enum/Message/MessageStatusEnum.php

@@ -3,22 +3,21 @@ declare(strict_types=1);
 
 namespace App\Enum\Message;
 
-use MyCLabs\Enum\Enum;
+use App\Enum\EnumMethodsTrait;
 
 /**
  * Cycle Enum.
- * @method static FAILED()
- * @method static SEND()
- * @method static NO_RECIPIENT()
  */
-class MessageStatusEnum extends Enum
+enum MessageStatusEnum: string
 {
-    private const DRAFT = 'DRAFT';
-    private const CREATING = 'CREATING';
-    private const READY = 'READY';
-    private const SEND = 'SEND';
-    private const PRINTED = 'PRINTED';
-    private const SENDING_IN_PROGRESS = 'SENDING_IN_PROGRESS';
-    private const FAILED = 'FAILED';
-    private const NO_RECIPIENT = 'NO_RECIPIENT';
+    use EnumMethodsTrait;
+
+    case DRAFT = 'DRAFT';
+    case CREATING = 'CREATING';
+    case READY = 'READY';
+    case SEND = 'SEND';
+    case PRINTED = 'PRINTED';
+    case SENDING_IN_PROGRESS = 'SENDING_IN_PROGRESS';
+    case FAILED = 'FAILED';
+    case NO_RECIPIENT = 'NO_RECIPIENT';
 }

+ 27 - 27
src/Enum/Message/ReportMessageStatusEnum.php

@@ -3,37 +3,37 @@ declare(strict_types=1);
 
 namespace App\Enum\Message;
 
-use MyCLabs\Enum\Enum;
+use App\Enum\EnumMethodsTrait;
 
 /**
  * Report Mail status.
  *
- * @method static MISSING()
- * @method static DELIVERED()
  */
-class ReportMessageStatusEnum extends Enum
+enum ReportMessageStatusEnum: string
 {
-  private const DELIVERED = 'DELIVERED';
-  private const PRINTED = 'PRINTED';
-  private const DELIVERY_IN_PROGRESS = 'DELIVERY_IN_PROGRESS';
-  private const NOT_DELIVERED = 'NOT_DELIVERED';
-  private const INVALID = 'INVALID';
-  private const MISSING = 'MISSING';
-  private const WAITING = "WAITING";
-  private const WAIT4DLVR = "WAITING_DELIVERY";
-  private const SENT = "SENT";
-  private const DLVRD = "DLVRD";
-  private const TOOM4USER = "TOO_MANY_SMS_FROM_USER";
-  private const TOOM4NUM = "TOO_MANY_SMS_FOR_NUMBER";
-  private const ERROR = "ERROR";
-  private const TIMEOUT = "TIMEOUT";
-  private const UNKNRCPT = "UNPARSABLE_RCPT";
-  private const UNKNPFX = "UNKNOWN_PREFIX";
-  private const DEMO = "SENT_IN_DEMO_MODE";
-  private const SCHEDULED = "WAITING_DELAYED";
-  private const INVALIDDST = "INVALID_DESTINATION";
-  private const BLACKLISTED = "NUMBER_BLACKLISTED";
-  private const NUMBER_USER_BLACKLISTED = "BLACKLISTED";
-  private const KO = "SMSC_REJECTED";
-  private const INVALIDCONTENTS = "INVALID_CONTENTS";
+    use EnumMethodsTrait;
+
+    case DELIVERED = 'DELIVERED';
+    case PRINTED = 'PRINTED';
+    case DELIVERY_IN_PROGRESS = 'DELIVERY_IN_PROGRESS';
+    case NOT_DELIVERED = 'NOT_DELIVERED';
+    case INVALID = 'INVALID';
+    case MISSING = 'MISSING';
+    case WAITING = "WAITING";
+    case WAIT4DLVR = "WAITING_DELIVERY";
+    case SENT = "SENT";
+    case DLVRD = "DLVRD";
+    case TOOM4USER = "TOO_MANY_SMS_FROM_USER";
+    case TOOM4NUM = "TOO_MANY_SMS_FOR_NUMBER";
+    case ERROR = "ERROR";
+    case TIMEOUT = "TIMEOUT";
+    case UNKNRCPT = "UNPARSABLE_RCPT";
+    case UNKNPFX = "UNKNOWN_PREFIX";
+    case DEMO = "SENT_IN_DEMO_MODE";
+    case SCHEDULED = "WAITING_DELAYED";
+    case INVALIDDST = "INVALID_DESTINATION";
+    case BLACKLISTED = "NUMBER_BLACKLISTED";
+    case NUMBER_USER_BLACKLISTED = "BLACKLISTED";
+    case KO = "SMSC_REJECTED";
+    case INVALIDCONTENTS = "INVALID_CONTENTS";
 }

+ 6 - 6
src/Enum/Message/SendStatusEnum.php

@@ -3,15 +3,15 @@ declare(strict_types=1);
 
 namespace App\Enum\Message;
 
-use MyCLabs\Enum\Enum;
+use App\Enum\EnumMethodsTrait;
 
 /**
  * Cycle Enum.
- * @method static READY()
- * @method static FAILED()
  */
-class SendStatusEnum extends Enum
+enum SendStatusEnum: string
 {
-    private const FAILED = 'FAILED';
-    private const READY = 'READY';
+    use EnumMethodsTrait;
+
+    case FAILED = 'FAILED';
+    case READY = 'READY';
 }

+ 10 - 8
src/Enum/Network/LeadingCauseEnum.php

@@ -3,17 +3,19 @@ declare(strict_types=1);
 
 namespace App\Enum\Network;
 
-use MyCLabs\Enum\Enum;
+use App\Enum\EnumMethodsTrait;
 
 /**
  * Liste des cause de départ d'une structure dans un réseau
  */
-class LeadingCauseEnum extends Enum
+enum LeadingCauseEnum: string
 {
-    private const DEPARTURE     = 'DEPARTURE';
-    private const RADIATION     = 'RADIATION';
-    private const DISSOLUTION   = 'DISSOLUTION';
-    private const FUSION        = 'FUSION';
-    private const OTHER         = 'OTHER';
-    private const SLEEP         = 'SLEEP';
+    use EnumMethodsTrait;
+
+    case DEPARTURE     = 'DEPARTURE';
+    case RADIATION     = 'RADIATION';
+    case DISSOLUTION   = 'DISSOLUTION';
+    case FUSION        = 'FUSION';
+    case OTHER         = 'OTHER';
+    case SLEEP         = 'SLEEP';
 }

+ 10 - 11
src/Enum/Network/NetworkEnum.php

@@ -3,20 +3,19 @@ declare(strict_types=1);
 
 namespace App\Enum\Network;
 
-use MyCLabs\Enum\Enum;
+use App\Enum\EnumMethodsTrait;
 
 /**
  * Liste des réseaux disponibles
- * @method static CMF()
- * @method static FFEC()
- * @method static CFBF()
  */
-class NetworkEnum extends Enum
+enum NetworkEnum: int
 {
-    private const CMF     = 3;
-    private const FFEC     = 4;
-    private const YAV   = 5;
-    private const OUTOFNET  = 6;
-    private const CFBF = 7;
-    private const DEUXIOS = 8;
+    use EnumMethodsTrait;
+
+    case CMF     = 3;
+    case FFEC     = 4;
+    case YAV   = 5;
+    case OUTOFNET  = 6;
+    case CFBF = 7;
+    case DEUXIOS = 8;
 }

+ 9 - 10
src/Enum/OnlineRegistration/RegistrationStatusEnum.php

@@ -1,21 +1,20 @@
 <?php
+declare(strict_types=1);
 
 namespace App\Enum\OnlineRegistration;
 
-use MyCLabs\Enum\Enum;
+use App\Enum\EnumMethodsTrait;
 
 /**
  * Statut de l'enregistrement en ligne
  *
- * @method static NEGOTIABLE()
- * @method static ACCEPTED()
- * @method static PENDING()
- * @method static DENIED()
  */
-class RegistrationStatusEnum extends Enum
+enum RegistrationStatusEnum: string
 {
-    private const NEGOTIABLE = 'NEGOTIABLE';
-    private const ACCEPTED = 'ACCEPTED';
-    private const PENDING = 'PENDING';
-    private const DENIED = 'DENIED';
+    use EnumMethodsTrait;
+
+    case NEGOTIABLE = 'NEGOTIABLE';
+    case ACCEPTED = 'ACCEPTED';
+    case PENDING = 'PENDING';
+    case DENIED = 'DENIED';
 }

+ 8 - 9
src/Enum/OnlineRegistration/ValidationStateEnum.php

@@ -1,21 +1,20 @@
 <?php
+declare(strict_types=1);
 
 namespace App\Enum\OnlineRegistration;
 
-use MyCLabs\Enum\Enum;
+use App\Enum\EnumMethodsTrait;
 
 /**
  * Niveau de validation d'une inscription en ligne
  *
- * TODO: à valider
  *
- * @method static OPEN()
- * @method static OPEN_FOR_EDUCATIONS()
- * @method static CLOSE()
  */
-class ValidationStateEnum extends Enum
+enum ValidationStateEnum: string
 {
-    const OPEN = 'OPEN';
-    const OPEN_FOR_EDUCATIONS = 'OPEN_FOR_EDUCATIONS';
-    const CLOSE = 'CLOSE';
+    use EnumMethodsTrait;
+
+    case OPEN = 'OPEN';
+    case OPEN_FOR_EDUCATIONS = 'OPEN_FOR_EDUCATIONS';
+    case CLOSE = 'CLOSE';
 }

+ 8 - 9
src/Enum/OnlineRegistration/WishRegistrationEnum.php

@@ -1,19 +1,18 @@
 <?php
+declare(strict_types=1);
 
 namespace App\Enum\OnlineRegistration;
 
-use MyCLabs\Enum\Enum;
+use App\Enum\EnumMethodsTrait;
 
 /**
  * TODO: documenter
- *
- * @method static NO_INFORMATION()
- * @method static REREGISTER()
- * @method static STOP_REGISTRATION()
  */
-class WishRegistrationEnum extends Enum
+enum WishRegistrationEnum: string
 {
-    const NO_INFORMATION = 'NO_INFORMATION';
-    const REREGISTER = 'REREGISTER';
-    const STOP_REGISTRATION = 'STOP_REGISTRATION';
+    use EnumMethodsTrait;
+
+    case NO_INFORMATION = 'NO_INFORMATION';
+    case REREGISTER = 'REREGISTER';
+    case STOP_REGISTRATION = 'STOP_REGISTRATION';
 }

+ 9 - 13
src/Enum/Organization/AddressPostalOrganizationTypeEnum.php

@@ -3,22 +3,18 @@ declare(strict_types=1);
 
 namespace App\Enum\Organization;
 
-use MyCLabs\Enum\Enum;
+use App\Enum\EnumMethodsTrait;
 
 /**
  * Type d'adresse postale pour une organization
- * @method static ADDRESS_BILL()
- * @method static ADDRESS_CONTACT()
- * @method static ADDRESS_HEAD_OFFICE()
- * @method static ADDRESS_PRACTICE()
- * @method static ADDRESS_OTHER()
- * @method static ADDRESS_PRINCIPAL()
  */
-class AddressPostalOrganizationTypeEnum extends Enum
+enum AddressPostalOrganizationTypeEnum: string
 {
-    private const ADDRESS_PRACTICE = 'ADDRESS_PRACTICE';
-    private const ADDRESS_HEAD_OFFICE = 'ADDRESS_HEAD_OFFICE';
-    private const ADDRESS_CONTACT = 'ADDRESS_CONTACT';
-    private const ADDRESS_BILL = 'ADDRESS_BILL';
-    private const ADDRESS_OTHER = 'ADDRESS_OTHER';
+    use EnumMethodsTrait;
+
+    case ADDRESS_PRACTICE = 'ADDRESS_PRACTICE';
+    case ADDRESS_HEAD_OFFICE = 'ADDRESS_HEAD_OFFICE';
+    case ADDRESS_CONTACT = 'ADDRESS_CONTACT';
+    case ADDRESS_BILL = 'ADDRESS_BILL';
+    case ADDRESS_OTHER = 'ADDRESS_OTHER';
 }

+ 6 - 4
src/Enum/Organization/BulletinOutputEnum.php

@@ -3,13 +3,15 @@ declare(strict_types=1);
 
 namespace App\Enum\Organization;
 
-use MyCLabs\Enum\Enum;
+use App\Enum\EnumMethodsTrait;
 
 /**
  * Sortie des bulletin
  */
-class BulletinOutputEnum extends Enum
+enum BulletinOutputEnum: string
 {
-    private const PRINTING = 'PRINTING';
-    private const SEND_BY_EMAIL = 'SEND_BY_EMAIL';
+    use EnumMethodsTrait;
+
+    case PRINTING = 'PRINTING';
+    case SEND_BY_EMAIL = 'SEND_BY_EMAIL';
 }

+ 8 - 6
src/Enum/Organization/BulletinPeriodEnum.php

@@ -3,15 +3,17 @@ declare(strict_types=1);
 
 namespace App\Enum\Organization;
 
-use MyCLabs\Enum\Enum;
+use App\Enum\EnumMethodsTrait;
 
 /**
  * Périodes des bulletin
  */
-class BulletinPeriodEnum extends Enum
+enum BulletinPeriodEnum: string
 {
-    private const YEAR = 'YEAR';
-    private const SEMESTER = 'SEMESTER';
-    private const TRIMESTER = 'TRIMESTER';
-    private const MONTH = 'MONTH';
+    use EnumMethodsTrait;
+
+    case YEAR = 'YEAR';
+    case SEMESTER = 'SEMESTER';
+    case TRIMESTER = 'TRIMESTER';
+    case MONTH = 'MONTH';
 }

+ 11 - 9
src/Enum/Organization/CategoryEnum.php

@@ -3,18 +3,20 @@ declare(strict_types=1);
 
 namespace App\Enum\Organization;
 
-use MyCLabs\Enum\Enum;
+use App\Enum\EnumMethodsTrait;
 
 /**
  * Catégorie de la structure
  */
-class CategoryEnum extends Enum
+enum CategoryEnum: string
 {
-    private const PROFESSIONAL = 'PROFESSIONAL';
-    private const ARTISTIC_ENSEMBLE = 'ARTISTIC_ENSEMBLE';
-    private const SCHOOL_OF_ARTS = 'SCHOOL_OF_ARTS';
-    private const NETWORK = 'NETWORK';
-    private const ORGANIZER = 'ORGANIZER';
-    private const PERSON = 'PERSON';
-    private const OTHER = 'OTHER';
+    use EnumMethodsTrait;
+
+    case PROFESSIONAL = 'PROFESSIONAL';
+    case ARTISTIC_ENSEMBLE = 'ARTISTIC_ENSEMBLE';
+    case SCHOOL_OF_ARTS = 'SCHOOL_OF_ARTS';
+    case NETWORK = 'NETWORK';
+    case ORGANIZER = 'ORGANIZER';
+    case PERSON = 'PERSON';
+    case OTHER = 'OTHER';
 }

+ 7 - 7
src/Enum/Organization/LegalEnum.php

@@ -3,16 +3,16 @@ declare(strict_types=1);
 
 namespace App\Enum\Organization;
 
-use MyCLabs\Enum\Enum;
+use App\Enum\EnumMethodsTrait;
 
 /**
  * Statut légal
- * @method static COMMERCIAL_SOCIETY()
- * @method static ASSOCIATION_LAW_1901()
  */
-class LegalEnum extends Enum
+enum LegalEnum: string
 {
-    private const LOCAL_AUTHORITY = 'LOCAL_AUTHORITY';
-    private const ASSOCIATION_LAW_1901 = 'ASSOCIATION_LAW_1901';
-    private const COMMERCIAL_SOCIETY = 'COMMERCIAL_SOCIETY';
+    use EnumMethodsTrait;
+
+    case LOCAL_AUTHORITY = 'LOCAL_AUTHORITY';
+    case ASSOCIATION_LAW_1901 = 'ASSOCIATION_LAW_1901';
+    case COMMERCIAL_SOCIETY = 'COMMERCIAL_SOCIETY';
 }

+ 31 - 29
src/Enum/Organization/OpcaEnum.php

@@ -3,38 +3,40 @@ declare(strict_types=1);
 
 namespace App\Enum\Organization;
 
-use MyCLabs\Enum\Enum;
+use App\Enum\EnumMethodsTrait;
 
 /**
  * Liste des OPCA
  */
-class OpcaEnum extends Enum
+enum OpcaEnum: string
 {
-    private const ACTALIANS = 'ACTALIANS';
-    private const AFDAS = 'AFDAS';
-    private const AGEFOS = 'AGEFOS';
-    private const ANFA = 'ANFA';
-    private const ANFH = 'ANFH';
-    private const APCMA = 'APCMA';
-    private const CONSTRUCTYS = 'CONSTRUCTYS';
-    private const FONGECIF = 'FONGECIF';
-    private const FAFIEC = 'FAFIEC';
-    private const FAFIH = 'FAFIH';
-    private const FAFSEA = 'FAFSEA';
-    private const FAF_TT = 'FAF_TT';
-    private const FIF_PL = 'FIF_PL';
-    private const FORCO = 'FORCO';
-    private const INTERGROS = 'INTERGROS';
-    private const OPCA3 = 'OPCA3_PLUS';
-    private const OPCA_DEFI = 'OPCA_DEFI';
-    private const OPCA_BAIA = 'OPCA_BAIA';
-    private const OPCA_TRANSPORTS = 'OPCA_TRANSPORTS';
-    private const OPCAIM = 'OPCAIM';
-    private const OPCALIA = 'OPCALIA';
-    private const OPCALIM = 'OPCALIM';
-    private const UNIFAF = 'UNIFAF';
-    private const UNIFORMATION = 'UNIFORMATION';
-    private const VIVEA = 'VIVEA';
-    private const AGEFOS_PME = 'AGEFOS_PME';
-    private const CNFPT = 'CNFPT';
+    use EnumMethodsTrait;
+
+    case ACTALIANS = 'ACTALIANS';
+    case AFDAS = 'AFDAS';
+    case AGEFOS = 'AGEFOS';
+    case ANFA = 'ANFA';
+    case ANFH = 'ANFH';
+    case APCMA = 'APCMA';
+    case CONSTRUCTYS = 'CONSTRUCTYS';
+    case FONGECIF = 'FONGECIF';
+    case FAFIEC = 'FAFIEC';
+    case FAFIH = 'FAFIH';
+    case FAFSEA = 'FAFSEA';
+    case FAF_TT = 'FAF_TT';
+    case FIF_PL = 'FIF_PL';
+    case FORCO = 'FORCO';
+    case INTERGROS = 'INTERGROS';
+    case OPCA3 = 'OPCA3_PLUS';
+    case OPCA_DEFI = 'OPCA_DEFI';
+    case OPCA_BAIA = 'OPCA_BAIA';
+    case OPCA_TRANSPORTS = 'OPCA_TRANSPORTS';
+    case OPCAIM = 'OPCAIM';
+    case OPCALIA = 'OPCALIA';
+    case OPCALIM = 'OPCALIM';
+    case UNIFAF = 'UNIFAF';
+    case UNIFORMATION = 'UNIFORMATION';
+    case VIVEA = 'VIVEA';
+    case AGEFOS_PME = 'AGEFOS_PME';
+    case CNFPT = 'CNFPT';
 }

+ 8 - 9
src/Enum/Organization/OrganizationIdsEnum.php

@@ -3,18 +3,17 @@ declare(strict_types=1);
 
 namespace App\Enum\Organization;
 
-use MyCLabs\Enum\Enum;
+use App\Enum\EnumMethodsTrait;
 
 /**
  * Id de structure spécifiques
- * @method static CMF()
- * @method static FFEC()
- * @method static _2IOS()
  */
-class OrganizationIdsEnum extends Enum
+enum OrganizationIdsEnum: int
 {
-    private const CMF     = 12097;
-    private const _2IOS   = 32366;
-    private const FFEC    = 91295;
-    private const OPENTALENT_BASE   = 13;
+    use EnumMethodsTrait;
+
+    case CMF     = 12097;
+    case _2IOS   = 32366;
+    case FFEC    = 91295;
+    case OPENTALENT_BASE   = 13;
 }

+ 14 - 20
src/Enum/Organization/PrincipalTypeEnum.php

@@ -3,29 +3,23 @@ declare(strict_types=1);
 
 namespace App\Enum\Organization;
 
-use MyCLabs\Enum\Enum;
+use App\Enum\EnumMethodsTrait;
 
 /**
  * Types principaux d'une organisation
- * @method static DELEGATION()
- * @method static GROUPMENT()
- * @method static LOCAL_FEDERATION()
- * @method static DEPARTEMENTAL_FEDERATION()
- * @method static REGIONAL_FEDERATION()
- * @method static NATIONAL_FEDERATION()
- * @method static ARTISTIC_EDUCATION_ONLY()
- * @method static ARTISTIC_PRACTICE_ONLY()
  */
-class PrincipalTypeEnum extends Enum
+enum PrincipalTypeEnum: string
 {
-    private const NATIONAL_FEDERATION = 'NATIONAL_FEDERATION';
-    private const REGIONAL_FEDERATION = 'REGIONAL_FEDERATION';
-    private const DEPARTEMENTAL_FEDERATION = 'DEPARTEMENTAL_FEDERATION';
-    private const LOCAL_FEDERATION = 'LOCAL_FEDERATION';
-    private const GROUPMENT = 'GROUPMENT';
-    private const DELEGATION = 'DELEGATION';
-    private const ARTISTIC_EDUCATION_ONLY = 'ARTISTIC_EDUCATION_ONLY';
-    private const ARTISTIC_PRACTICE_ONLY = 'ARTISTIC_PRACTICE_ONLY';
-    private const MUSIC_OPENTALENT = 'MUSIC_OPENTALENT';
-    private const ARTISTIC_PRACTICE_EDUCATION = 'ARTISTIC_PRACTICE_EDUCATION';
+    use EnumMethodsTrait;
+
+    case NATIONAL_FEDERATION = 'NATIONAL_FEDERATION';
+    case REGIONAL_FEDERATION = 'REGIONAL_FEDERATION';
+    case DEPARTEMENTAL_FEDERATION = 'DEPARTEMENTAL_FEDERATION';
+    case LOCAL_FEDERATION = 'LOCAL_FEDERATION';
+    case GROUPMENT = 'GROUPMENT';
+    case DELEGATION = 'DELEGATION';
+    case ARTISTIC_EDUCATION_ONLY = 'ARTISTIC_EDUCATION_ONLY';
+    case ARTISTIC_PRACTICE_ONLY = 'ARTISTIC_PRACTICE_ONLY';
+    case MUSIC_OPENTALENT = 'MUSIC_OPENTALENT';
+    case ARTISTIC_PRACTICE_EDUCATION = 'ARTISTIC_PRACTICE_EDUCATION';
 }

+ 12 - 10
src/Enum/Organization/SchoolCategoryEnum.php

@@ -3,19 +3,21 @@ declare(strict_types=1);
 
 namespace App\Enum\Organization;
 
-use MyCLabs\Enum\Enum;
+use App\Enum\EnumMethodsTrait;
 
 /**
  * Catégorie de l'école
  */
-class SchoolCategoryEnum extends Enum
+enum SchoolCategoryEnum: string
 {
-    private const CESMD = 'CESMD';
-    private const CNSMD = 'CNSMD';
-    private const CRC = 'CRC';
-    private const CRI = 'CRI';
-    private const CRD = 'CRD';
-    private const CRR = 'CRR';
-    private const EENC = 'EENC';
-    private const EMP = 'EMP';
+    use EnumMethodsTrait;
+
+    case CESMD = 'CESMD';
+    case CNSMD = 'CNSMD';
+    case CRC = 'CRC';
+    case CRI = 'CRI';
+    case CRD = 'CRD';
+    case CRR = 'CRR';
+    case EENC = 'EENC';
+    case EMP = 'EMP';
 }

+ 7 - 5
src/Enum/Organization/SendToBulletinEnum.php

@@ -3,15 +3,17 @@ declare(strict_types=1);
 
 namespace App\Enum\Organization;
 
-use MyCLabs\Enum\Enum;
+use App\Enum\EnumMethodsTrait;
 
 /**
  * Bulletin envoyés à...
  */
-class SendToBulletinEnum extends Enum
+enum SendToBulletinEnum: string
 {
-    private const STUDENTS_AND_THEIR_GUARDIANS = 'STUDENTS_AND_THEIR_GUARDIANS';
-    private const STUDENTS = 'STUDENTS';
-    private const GUARDIANS = 'GUARDIANS';
+    use EnumMethodsTrait;
+
+    case STUDENTS_AND_THEIR_GUARDIANS = 'STUDENTS_AND_THEIR_GUARDIANS';
+    case STUDENTS = 'STUDENTS';
+    case GUARDIANS = 'GUARDIANS';
 }
 

+ 9 - 25
src/Enum/Organization/SettingsProductEnum.php

@@ -3,35 +3,19 @@ declare(strict_types=1);
 
 namespace App\Enum\Organization;
 
-use MyCLabs\Enum\Enum;
+use App\Enum\EnumMethodsTrait;
 
 /**
  * Type de produit disponible pour une organisation
- * @method static SCHOOL()
- * @method static ARTIST()
- * @method static MANAGER()
- * @method static MANAGER_PREMIUM()
- * @method static ARTIST_PREMIUM()
- * @method static SCHOOL_PREMIUM()
  */
-class SettingsProductEnum extends Enum
+enum SettingsProductEnum: string
 {
-    private const ARTIST = 'artist';
-    private const ARTIST_PREMIUM = 'artist-premium';
-    private const SCHOOL = 'school';
-    private const SCHOOL_PREMIUM = 'school-premium';
-    private const MANAGER = 'manager';
-    private const MANAGER_PREMIUM = 'manager-premium';
+    use EnumMethodsTrait;
 
-    public static function isArtist(string $product): bool {
-        return $product === self::ARTIST || $product === self::ARTIST_PREMIUM;
-    }
-
-    public static function isSchool(string $product): bool {
-        return $product === self::SCHOOL || $product === self::SCHOOL_PREMIUM;
-    }
-
-    public static function isManager(string $product): bool {
-        return $product === self::MANAGER || $product === self::MANAGER_PREMIUM;
-    }
+    case ARTIST = 'artist';
+    case ARTIST_PREMIUM = 'artist-premium';
+    case SCHOOL = 'school';
+    case SCHOOL_PREMIUM = 'school-premium';
+    case MANAGER = 'manager';
+    case MANAGER_PREMIUM = 'manager-premium';
 }

+ 6 - 4
src/Enum/Organization/TypeEstablishmentDetailEnum.php

@@ -3,13 +3,15 @@ declare(strict_types=1);
 
 namespace App\Enum\Organization;
 
-use MyCLabs\Enum\Enum;
+use App\Enum\EnumMethodsTrait;
 
 /**
  * Détails du type de l'établissement
  */
-class TypeEstablishmentDetailEnum extends Enum
+enum TypeEstablishmentDetailEnum: string
 {
-    private const MAIN_BUILDING = 'MAIN_BUILDING';
-    private const SECONDARY_SCHOOL = 'SECONDARY_SCHOOL';
+    use EnumMethodsTrait;
+
+    case MAIN_BUILDING = 'MAIN_BUILDING';
+    case SECONDARY_SCHOOL = 'SECONDARY_SCHOOL';
 }

+ 6 - 4
src/Enum/Organization/TypeEstablishmentEnum.php

@@ -3,14 +3,16 @@ declare(strict_types=1);
 
 namespace App\Enum\Organization;
 
-use MyCLabs\Enum\Enum;
+use App\Enum\EnumMethodsTrait;
 
 /**
  * Type d'établissement
  *
  */
-class TypeEstablishmentEnum extends Enum
+enum TypeEstablishmentEnum: string
 {
-    private const UNIQUE = 'UNIQUE';
-    private const MULTIPLE = 'MULTIPLE';
+    use EnumMethodsTrait;
+
+    case UNIQUE = 'UNIQUE';
+    case MULTIPLE = 'MULTIPLE';
 }

+ 6 - 4
src/Enum/Person/AddressPostalPersonTypeEnum.php

@@ -3,13 +3,15 @@ declare(strict_types=1);
 
 namespace App\Enum\Person;
 
-use MyCLabs\Enum\Enum;
+use App\Enum\EnumMethodsTrait;
 
 /**
  * Type d'adresse postale pour une Person
  */
-class AddressPostalPersonTypeEnum extends Enum
+enum AddressPostalPersonTypeEnum: string
 {
-    private const ADDRESS_PRINCIPAL = 'ADDRESS_PRINCIPAL';
-    private const ADDRESS_OTHER = 'ADDRESS_OTHER';
+    use EnumMethodsTrait;
+
+    case ADDRESS_PRINCIPAL = 'ADDRESS_PRINCIPAL';
+    case ADDRESS_OTHER = 'ADDRESS_OTHER';
 }

+ 6 - 6
src/Enum/Person/GenderEnum.php

@@ -3,15 +3,15 @@ declare(strict_types=1);
 
 namespace App\Enum\Person;
 
-use MyCLabs\Enum\Enum;
+use App\Enum\EnumMethodsTrait;
 
 /**
  * Genres des personnes
- * @method static MISS()
- * @method static MISTER()
  */
-class GenderEnum extends Enum
+enum GenderEnum: string
 {
-    private const MISTER = 'MISTER';
-    private const MISS = 'MISS';
+    use EnumMethodsTrait;
+
+    case MISTER = 'MISTER';
+    case MISS = 'MISS';
 }

+ 6 - 7
src/Enum/Public/PublicEventOriginEnum.php

@@ -1,17 +1,16 @@
 <?php
-
 declare(strict_types=1);
 
 namespace App\Enum\Public;
 
-use MyCLabs\Enum\Enum;
+use App\Enum\EnumMethodsTrait;
 
 /**
- * @method static AWIN()
- * @method static OPENTALENT()
  */
-class PublicEventOriginEnum extends Enum
+enum PublicEventOriginEnum: string
 {
-    private const OPENTALENT = 'opentalent';
-    private const AWIN = 'awin';
+    use EnumMethodsTrait;
+
+    case OPENTALENT = 'opentalent';
+    case AWIN = 'awin';
 }

+ 5 - 4
src/Enum/Utils/EnvironnementVarEnum.php

@@ -3,14 +3,15 @@ declare(strict_types=1);
 
 namespace App\Enum\Utils;
 
-use MyCLabs\Enum\Enum;
+use App\Enum\EnumMethodsTrait;
 
 /**
  * Liste des variables d'environnement qu'il est possible de requêter via le service Utils/Environnement
  *
- * @method static APP_ENV()
  */
-class EnvironnementVarEnum extends Enum
+enum EnvironnementVarEnum: string
 {
-    private const APP_ENV = 'APP_ENV';
+    use EnumMethodsTrait;
+
+    case APP_ENV = 'APP_ENV';
 }

+ 2 - 3
src/Repository/Access/AccessRepository.php

@@ -7,7 +7,6 @@ use App\DQL\DateConditions;
 use App\Entity\Access\Access;
 use App\Entity\Organization\Organization;
 use App\Enum\Access\FunctionEnum;
-use App\Filter\Doctrine\TimeConstraint\DatetimeFilter;
 use DateTime;
 use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
 use Doctrine\Persistence\ManagerRegistry;
@@ -141,11 +140,11 @@ class AccessRepository extends ServiceEntityRepository implements UserLoaderInte
      * Retourne tous les accesses de l'organization ayant la fonction donnée à la date donnée
      *
      * @param Organization $organization
-     * @param string $function
+     * @param FunctionEnum $function
      * @param DateTime|null $date
      * @return list<Access>
      */
-    public function findByOrganizationAndMission(Organization $organization, string $function, \DateTime $date = null): array
+    public function findByOrganizationAndMission(Organization $organization, FunctionEnum $function, \DateTime $date = null): array
     {
         if ($date === null)
             $date = new DateTime();

+ 5 - 4
src/Repository/Core/ContactPointRepository.php

@@ -6,6 +6,7 @@ namespace App\Repository\Core;
 use App\Entity\Core\ContactPoint;
 use App\Entity\Organization\Organization;
 use App\Entity\Person\Person;
+use App\Enum\Core\ContactPointTypeEnum;
 use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
 use Doctrine\Persistence\ManagerRegistry;
 
@@ -24,11 +25,11 @@ class ContactPointRepository extends ServiceEntityRepository
 
     /**
      * Récupération des points de contacts d'une organization et d'un type précis
-     * @param String $type
+     * @param ContactPointTypeEnum $type
      * @param Organization $organization
      * @return list<ContactPoint>
      */
-    public function getByTypeAndOrganization(String $type, Organization $organization): array
+    public function getByTypeAndOrganization(ContactPointTypeEnum $type, Organization $organization): array
     {
         return $this->createQueryBuilder('contact_point')
             ->innerJoin('contact_point.organization', 'organization')
@@ -43,11 +44,11 @@ class ContactPointRepository extends ServiceEntityRepository
 
     /**
      * Récupération des points de contacts d'une person et d'un type précis
-     * @param String $type
+     * @param ContactPointTypeEnum $type
      * @param Person $person
      * @return list<ContactPoint>
      */
-    public function getByTypeAndPerson(String $type, Person $person): array
+    public function getByTypeAndPerson(ContactPointTypeEnum $type, Person $person): array
     {
         return $this->createQueryBuilder('contact_point')
             ->innerJoin('contact_point.person', 'person')

+ 8 - 8
src/Repository/Network/NetworkOrganizationRepository.php

@@ -45,12 +45,12 @@ class NetworkOrganizationRepository extends ServiceEntityRepository
             and (neto.endDate is null or neto.endDate = \"0000-00-00\" or neto.endDate > CURDATE())
         GROUP BY is_last_parent
         ORDER BY is_last_parent DESC",
-            PrincipalTypeEnum::NATIONAL_FEDERATION(),
-            PrincipalTypeEnum::REGIONAL_FEDERATION(),
-            PrincipalTypeEnum::LOCAL_FEDERATION(),
-            PrincipalTypeEnum::GROUPMENT(),
-            PrincipalTypeEnum::DEPARTEMENTAL_FEDERATION(),
-            PrincipalTypeEnum::DELEGATION(),
+            PrincipalTypeEnum::NATIONAL_FEDERATION->value,
+            PrincipalTypeEnum::REGIONAL_FEDERATION->value,
+            PrincipalTypeEnum::LOCAL_FEDERATION->value,
+            PrincipalTypeEnum::GROUPMENT->value,
+            PrincipalTypeEnum::DEPARTEMENTAL_FEDERATION->value,
+            PrincipalTypeEnum::DELEGATION->value,
             $organization->getId()
         );
 
@@ -103,8 +103,8 @@ class NetworkOrganizationRepository extends ServiceEntityRepository
                ) tmp
                WHERE FIND_IN_SET(o.id, parents)
          ",
-            OrganizationIdsEnum::_2IOS(),
-            OrganizationIdsEnum::OPENTALENT_BASE(),
+            OrganizationIdsEnum::_2IOS->value,
+            OrganizationIdsEnum::OPENTALENT_BASE->value,
             $organization->getId()
         );
 

+ 3 - 2
src/Repository/Organization/OrganizationAddressPostalRepository.php

@@ -5,6 +5,7 @@ namespace App\Repository\Organization;
 
 use App\Entity\Organization\Organization;
 use App\Entity\Organization\OrganizationAddressPostal;
+use App\Enum\Organization\AddressPostalOrganizationTypeEnum;
 use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
 use Doctrine\Persistence\ManagerRegistry;
 
@@ -23,11 +24,11 @@ class OrganizationAddressPostalRepository extends ServiceEntityRepository
 
     /**
      * Récupération des adresses postal d'une organization et d'un type précis
-     * @param String $type
+     * @param AddressPostalOrganizationTypeEnum $type
      * @param Organization $organization
      * @return list<OrganizationAddressPostal>|null
      */
-    public function getByType(String $type, Organization $organization): ?array
+    public function getByType(AddressPostalOrganizationTypeEnum $type, Organization $organization): ?array
     {
         return $this->createQueryBuilder('organizationAddressPostal')
             ->where('organizationAddressPostal.type = :type')

+ 2 - 2
src/Security/Voter/EntityVoter/Core/FileVoter.php

@@ -36,7 +36,7 @@ class FileVoter extends AbstractEntityVoter
         }
 
         // File has public visibility
-        if ($subject->getVisibility() === FileVisibilityEnum::EVERYBODY()->getValue()) {
+        if ($subject->getVisibility() === FileVisibilityEnum::EVERYBODY) {
             return true;
         }
 
@@ -193,7 +193,7 @@ class FileVoter extends AbstractEntityVoter
             // TODO: clarifier le ou les cas particulier(s) et les sortir de cette méthode (celle ci devrait tenir en deux lignes max)
             if (
                 $user &&
-                $file->getType() === FileTypeEnum::BILL()->getValue() &&
+                $file->getType() === FileTypeEnum::BILL &&
                 $this->accessUtils->hasRole($user, 'ROLE_BILLACCOUNTING')
             ) {
                 return true;

+ 3 - 3
src/Service/Access/AccessProfileCreator.php

@@ -17,9 +17,9 @@ use Symfony\Component\Security\Core\Exception\AuthenticationException;
 class AccessProfileCreator
 {
     public function __construct(
-        private OrganizationProfileCreator $organizationProfileCreator,
-        private AccessRepository $accessRepository,
-        private Utils $accessUtils
+        private readonly OrganizationProfileCreator $organizationProfileCreator,
+        private readonly AccessRepository           $accessRepository,
+        private readonly Utils $accessUtils
     )
     { }
 

+ 2 - 2
src/Service/Access/OptionalsRoles/CriteriaNotationOptionalRole.php

@@ -10,7 +10,7 @@ use App\Enum\Access\FunctionEnum;
 
 class CriteriaNotationOptionalRole implements OptionalsRolesInterface {
     public function __construct(
-        private AccessRepository $accessRepository
+        private readonly AccessRepository $accessRepository
     )
     {}
 
@@ -23,7 +23,7 @@ class CriteriaNotationOptionalRole implements OptionalsRolesInterface {
      */
     public function support(Access $access): bool
     {
-        $isActiveTeacher = $this->accessRepository->hasGotFunctionAtThisDate($access, FunctionEnum::TEACHER(), new \DateTime('now'));
+        $isActiveTeacher = $this->accessRepository->hasGotFunctionAtThisDate($access, FunctionEnum::TEACHER, new \DateTime('now'));
         return $isActiveTeacher && !$access->getOrganization()->getParameters()->getEditCriteriaNotationByAdminOnly();
     }
 

+ 1 - 1
src/Service/Core/ContactPointUtils.php

@@ -29,7 +29,7 @@ class ContactPointUtils
     public function getPersonContactPointPrincipal(Access $access): ?ContactPoint
     {
         $contactPoints = $this->contactPointRepository->getByTypeAndPerson(
-            ContactPointTypeEnum::PRINCIPAL()->getValue(),
+            ContactPointTypeEnum::PRINCIPAL,
             $access->getPerson()
         );
 

+ 2 - 2
src/Service/Cotisation/CotisationCreator.php

@@ -14,8 +14,8 @@ use App\Repository\Organization\OrganizationRepository;
 class CotisationCreator
 {
     public function __construct(
-        private OrganizationRepository $organizationRepository,
-        private Utils $cotisationUtils
+        private readonly OrganizationRepository $organizationRepository,
+        private readonly Utils $cotisationUtils
     )
     { }
 

+ 10 - 10
src/Service/Cotisation/Utils.php

@@ -23,10 +23,10 @@ class Utils
     const SUBMIT_IN_PROGRESS = 540; // Affiliation in progress
 
     public function __construct(
-        private NetworkUtils                     $networkUtils,
-        private OrganizationUtils                $organizationUtils,
-        private NetworkOrganizationRepository    $networkOrganizationRepository,
-        private CotisationApiResourcesRepository $cotisationApiResourcesRepository
+        private readonly NetworkUtils                  $networkUtils,
+        private readonly OrganizationUtils             $organizationUtils,
+        private readonly NetworkOrganizationRepository $networkOrganizationRepository,
+        private readonly CotisationApiResourcesRepository $cotisationApiResourcesRepository
     )
     {}
 
@@ -101,23 +101,23 @@ class Utils
      *
      * @param Organization $organization
      * @param int $year
-     * @return string|null
+     * @return AlertStateEnum|null
      * @see UtilsTest::testGetAlertStateAffiliation()
      */
-    public function getAlertState(Organization $organization, int $year): ?string
+    public function getAlertState(Organization $organization, int $year): ?AlertStateEnum
     {
         $state = $this->cotisationApiResourcesRepository->getAffiliationState($organization->getId(), $year);
 
         $alertState = null;
 
         if ($state == self::MEMBERSHIP_WAITING || $state == self::SUBMIT_IN_PROGRESS) {
-            $alertState = AlertStateEnum::AFFILIATION()->getValue();
+            $alertState = AlertStateEnum::AFFILIATION;
         } else if ($state == self::MEMBERSHIP_NOPAYMENT) {
-            $alertState = AlertStateEnum::INVOICE()->getValue();
+            $alertState = AlertStateEnum::INVOICE;
         } else if ($this->cotisationApiResourcesRepository->isInsuranceNotDone($organization->getId(), $year)) {
-            $alertState = AlertStateEnum::INSURANCE()->getValue();
+            $alertState = AlertStateEnum::INSURANCE;
         } else if ($this->cotisationApiResourcesRepository->isNotDGVCustomer($organization->getId())) {
-            $alertState = AlertStateEnum::ADVERTISINGINSURANCE()->getValue();
+            $alertState = AlertStateEnum::ADVERTISINGINSURANCE;
         }
 
         return $alertState;

+ 2 - 2
src/Service/Cron/Job/CleanTempFiles.php

@@ -190,8 +190,8 @@ class CleanTempFiles extends BaseCronJob implements CronjobInterface
                 )
             )
             ->setParameter('temporaryTrue', true)
-            ->setParameter('host', FileHostEnum::AP2I()->getValue())
-            ->setParameter('status', FileStatusEnum::DELETED()->getValue())
+            ->setParameter('host', FileHostEnum::AP2I)
+            ->setParameter('status', FileStatusEnum::DELETED)
             ->setParameter('maxDate', $maxDate->format('Y-m-d'))
         ;
     }

+ 35 - 33
src/Service/Dolibarr/DolibarrSyncService.php

@@ -19,6 +19,7 @@ use App\Repository\Access\AccessRepository;
 use App\Repository\Access\FunctionTypeRepository;
 use App\Repository\Organization\OrganizationRepository;
 use App\Service\Core\AddressPostalUtils;
+use App\Service\Organization\Utils;
 use App\Service\Rest\Operation\BaseRestOperation;
 use App\Service\Rest\Operation\CreateOperation;
 use App\Service\Rest\Operation\UpdateOperation;
@@ -57,6 +58,7 @@ class DolibarrSyncService
         private AddressPostalUtils $addressPostalUtils,
         private ArrayUtils $arrayUtils,
         private TranslatorInterface $translator,
+        private Utils $organizationUtils
     ) {}
 
     #[Required]
@@ -91,13 +93,13 @@ class DolibarrSyncService
 
         // Get all the missions with an admin default role
         $adminMissions = [];
-        foreach ($this->functionTypeRepository->findBy(['roleByDefault' => RoleEnum::ROLE_ADMIN()->getValue()]) as $functionType) {
+        foreach ($this->functionTypeRepository->findBy(['roleByDefault' => RoleEnum::ROLE_ADMIN]) as $functionType) {
             $adminMissions[] = $functionType->getMission();
         }
 
         // Store networks ids id dolibarr
-        $cmfDolibarrId = (int)($this->dolibarrApiService->getSociety(OrganizationIdsEnum::CMF()->getValue())['id']);
-        $ffecDolibarrId = (int)($this->dolibarrApiService->getSociety(OrganizationIdsEnum::FFEC()->getValue())['id']);
+        $cmfDolibarrId = (int)($this->dolibarrApiService->getSociety(OrganizationIdsEnum::CMF->value)['id']);
+        $ffecDolibarrId = (int)($this->dolibarrApiService->getSociety(OrganizationIdsEnum::FFEC->value)['id']);
 
         // Loop over the Opentalent organizations, and fill up the operations list
         $operations = [];
@@ -145,12 +147,12 @@ class DolibarrSyncService
             $newSocietyData['phone'] = $this->getOrganizationPhone($organization);
 
             // Sync Network
-            if (!in_array($organization->getId(), [NetworkEnum::CMF()->getValue(), NetworkEnum::FFEC()->getValue()], true)) {
+            if (!in_array($organization->getId(), [NetworkEnum::CMF, NetworkEnum::FFEC], true)) {
                 $newSocietyData['parent'] = '' . match (
                     $this->getOrganizationNetworkId($organization)
                     ) {
-                        NetworkEnum::CMF()->getValue() => $cmfDolibarrId,
-                        NetworkEnum::FFEC()->getValue() => $ffecDolibarrId,
+                        NetworkEnum::CMF->value => $cmfDolibarrId,
+                        NetworkEnum::FFEC->value => $ffecDolibarrId,
                         default => null
                     };
             }
@@ -158,13 +160,13 @@ class DolibarrSyncService
             // More infos
             $infos = [];
             $product = $organization->getSettings()->getProduct();
-            if (SettingsProductEnum::isSchool($product)) {
+            if ($this->organizationUtils->isSchool($organization)) {
                 $infos[] = $this->translator->trans('STUDENTS_COUNT') . " : " .
-                    $this->countWithMission([FunctionEnum::STUDENT()->getValue()], $organizationMembers);
+                    $this->countWithMission([FunctionEnum::STUDENT], $organizationMembers);
             }
-            if (SettingsProductEnum::isSchool($product) || SettingsProductEnum::isArtist($product)) {
+            if ($this->organizationUtils->isSchool($organization) || $this->organizationUtils->isArtist($organization)) {
                 $infos[] = $this->translator->trans('ADHERENTS_COUNT') . " : " .
-                    $this->countWithMission([FunctionEnum::ADHERENT()->getValue()], $organizationMembers);
+                    $this->countWithMission([FunctionEnum::ADHERENT], $organizationMembers);
             }
             $infos[] = $this->translator->trans('ADMIN_ACCESS_COUNT') . " : " .
                 $this->countWithMission($adminMissions, $organizationMembers);
@@ -174,7 +176,7 @@ class DolibarrSyncService
             $newSocietyData['array_options'] = $dolibarrSociety["array_options"];
             $newSocietyData['array_options']['options_2iopeninfoopentalent'] = implode("\n", $infos);
             if (!empty($product)) {
-                $newSocietyData['array_options']['options_2iopen_software_opentalent'] = $this->translator->trans($product);
+                $newSocietyData['array_options']['options_2iopen_software_opentalent'] = $this->translator->trans($product->value);
             }
 
             // Set the society as active (warning: use the field 'status' for societies, and not 'statut'!)
@@ -229,13 +231,13 @@ class DolibarrSyncService
 
                 // Build parameters for the query (we'll see later if a query is needed)
                 $newContactData = [
-                    'civility_code' => $person->getGender() ? $this->translator->trans($person->getGender()) : null,
+                    'civility_code' => $person->getGender() ? $this->translator->trans($person->getGender()->value) : null,
                     'lastname' => trim($person->getName()),
                     'firstname' => trim($person->getGivenName()),
                     'email' => $contact?->getEmail(),
                     'phone_pro' => $contact?->getTelphone() ? $this->formatPhoneNumber($contact->getTelphone()) : null,
                     'phone_mobile' => $contact?->getMobilPhone() ? $this->formatPhoneNumber($contact->getMobilPhone()): null,
-                    'poste' => $this->formatContactPosition($missions, $person->getGender()),
+                    'poste' => $this->formatContactPosition($missions, $person->getGender()->value),
                     'statut' => '1'
                 ];
 
@@ -532,11 +534,11 @@ class DolibarrSyncService
     protected function getOrganizationPostalAddress(Organization $organization): ?AddressPostal
     {
         $addressPriorities = [
-            AddressPostalOrganizationTypeEnum::ADDRESS_BILL()->getValue(),
-            AddressPostalOrganizationTypeEnum::ADDRESS_CONTACT()->getValue(),
-            AddressPostalOrganizationTypeEnum::ADDRESS_HEAD_OFFICE()->getValue(),
-            AddressPostalOrganizationTypeEnum::ADDRESS_PRACTICE()->getValue(),
-            AddressPostalOrganizationTypeEnum::ADDRESS_OTHER()->getValue()
+            AddressPostalOrganizationTypeEnum::ADDRESS_BILL,
+            AddressPostalOrganizationTypeEnum::ADDRESS_CONTACT,
+            AddressPostalOrganizationTypeEnum::ADDRESS_HEAD_OFFICE,
+            AddressPostalOrganizationTypeEnum::ADDRESS_PRACTICE,
+            AddressPostalOrganizationTypeEnum::ADDRESS_OTHER
         ];
 
         $organizationAddressPostal = $organization->getOrganizationAddressPostals();
@@ -560,10 +562,10 @@ class DolibarrSyncService
     protected function getOrganizationPhone(Organization $organization): ?string
     {
         $contactPriorities = [
-            ContactPointTypeEnum::BILL()->getValue(),
-            ContactPointTypeEnum::CONTACT()->getValue(),
-            ContactPointTypeEnum::PRINCIPAL()->getValue(),
-            ContactPointTypeEnum::OTHER()->getValue()
+            ContactPointTypeEnum::BILL,
+            ContactPointTypeEnum::CONTACT,
+            ContactPointTypeEnum::PRINCIPAL,
+            ContactPointTypeEnum::OTHER
         ];
 
         $contactPoints = $organization->getContactPoints();
@@ -592,10 +594,10 @@ class DolibarrSyncService
     protected function getOrganizationEmail(Organization $organization): ?string
     {
         $contactPriorities = [
-            ContactPointTypeEnum::BILL()->getValue(),
-            ContactPointTypeEnum::CONTACT()->getValue(),
-            ContactPointTypeEnum::PRINCIPAL()->getValue(),
-            ContactPointTypeEnum::OTHER()->getValue()
+            ContactPointTypeEnum::BILL,
+            ContactPointTypeEnum::CONTACT,
+            ContactPointTypeEnum::PRINCIPAL,
+            ContactPointTypeEnum::OTHER
         ];
 
         $contactPoints = $organization->getContactPoints();
@@ -651,8 +653,8 @@ class DolibarrSyncService
     protected function getPersonContact(Person $person): ?ContactPoint
     {
         $contactPriorities = [
-            ContactPointTypeEnum::PRINCIPAL()->getValue(),
-            ContactPointTypeEnum::OTHER()->getValue()
+            ContactPointTypeEnum::PRINCIPAL,
+            ContactPointTypeEnum::OTHER
         ];
 
         $contactPoints = $person->getContactPoints();
@@ -677,9 +679,9 @@ class DolibarrSyncService
     protected function formatContactPosition(array $missions, ?string $gender = 'X'): string
     {
         $to_exclude = [
-            FunctionEnum::ADHERENT()->getValue(),
-            FunctionEnum::STUDENT()->getValue(),
-            FunctionEnum::OTHER()->getValue()
+            FunctionEnum::ADHERENT->value,
+            FunctionEnum::STUDENT->value,
+            FunctionEnum::OTHER->value
         ];
 
         $poste = implode(
@@ -689,8 +691,8 @@ class DolibarrSyncService
                     return $this->translator->trans(
                         $m,
                         ['gender' => [
-                                GenderEnum::MISS()->getValue() => 'F',
-                                GenderEnum::MISTER()->getValue() => 'M'
+                                GenderEnum::MISS->value=> 'F',
+                                GenderEnum::MISTER->value => 'M'
                             ][$gender] ?? 'X']
                     );
                 },

+ 1 - 1
src/Service/Education/EducationNotationUtils.php

@@ -55,7 +55,7 @@ class EducationNotationUtils
         if(
             is_null($educationNotation->getNote()) ||
             !$educationNotation->getCriteriaNotation() ||
-            $educationNotation->getCriteriaNotation()->getType() !== TypeCriteriaEnum::WITH_NOTATION()->getValue()
+            $educationNotation->getCriteriaNotation()->getType() !== TypeCriteriaEnum::WITH_NOTATION
         ) {
             return null;
         }

+ 5 - 5
src/Service/Export/BaseExporter.php

@@ -85,7 +85,7 @@ abstract class BaseExporter
         $html = $this->render($model);
 
         // Encode le html au format voulu
-        $content = $this->encode($html, $exportRequest->getFormat());
+        $content = $this->encode($html, $exportRequest->getFormat()->value);
 
         // Met à jour ou créé l'enregistrement du fichier en base
         if ($exportRequest->getFileId() !== null) {
@@ -121,8 +121,8 @@ abstract class BaseExporter
         }
 
         $filename = $this->getFileBasename($exportRequest);
-        if (!preg_match('/^.+\.' . $exportRequest->getFormat() . '$/i', $filename)) {
-            $filename .= '.' . $exportRequest->getFormat();
+        if (!preg_match('/^.+\.' . $exportRequest->getFormat()->value . '$/i', $filename)) {
+            $filename .= '.' . $exportRequest->getFormat()->value;
         }
 
         return $this->fileManager->prepareFile(
@@ -132,7 +132,7 @@ abstract class BaseExporter
             $requester,
             true,
             'NOBODY',
-            $this->fileUtils->getMimeTypeFromExt($exportRequest->getFormat()),
+            $this->fileUtils->getMimeTypeFromExt($exportRequest->getFormat()->value),
             $flushFile
         );
     }
@@ -230,6 +230,6 @@ abstract class BaseExporter
      */
     protected function getFileType(): FileTypeEnum
     {
-        return FileTypeEnum::UNKNOWN();
+        return FileTypeEnum::UNKNOWN;
     }
 }

+ 1 - 1
src/Service/Export/Encoder/DocXEncoder

@@ -15,7 +15,7 @@ class DocXEncoder implements EncoderInterface
 
   public function support(string $format): bool
   {
-    return $format === ExportFormatEnum::DOCX()->getValue();
+    return $format === ExportFormatEnum::DOCX
   }
 
   /**

+ 1 - 1
src/Service/Export/Encoder/DocXEncoder.php

@@ -15,7 +15,7 @@ class DocXEncoder implements EncoderInterface
 
   public function support(string $format): bool
   {
-    return $format === ExportFormatEnum::DOCX()->getValue();
+    return $format === ExportFormatEnum::DOCX->value;
   }
 
 //  TODO: resolve Phpstan errors

+ 2 - 2
src/Service/Export/Encoder/PdfEncoder.php

@@ -27,11 +27,11 @@ class PdfEncoder implements EncoderInterface
     ];
 
     public function __construct(
-        private Pdf $knpSnappy
+        private readonly Pdf $knpSnappy
     ) {}
 
     public function support(string $format): bool {
-        return $format === ExportFormatEnum::PDF()->getValue();
+        return $format === ExportFormatEnum::PDF->value;
     }
 
     /**

+ 2 - 2
src/Service/Export/LicenceCmfExporter.php

@@ -66,7 +66,7 @@ class LicenceCmfExporter extends BaseExporter implements ExporterInterface
             $licenceCmf->setLogo($logo);
         }
 
-        $presidents = $this->accessRepository->findByOrganizationAndMission($organization, FunctionEnum::PRESIDENT()->getValue());
+        $presidents = $this->accessRepository->findByOrganizationAndMission($organization, FunctionEnum::PRESIDENT);
         if (count($presidents) > 0) {
             $president = $presidents[0]->getPerson();
             if ($president !== null) {
@@ -105,7 +105,7 @@ class LicenceCmfExporter extends BaseExporter implements ExporterInterface
      */
     protected function getFileType(): FileTypeEnum
     {
-        return FileTypeEnum::LICENCE_CMF();
+        return FileTypeEnum::LICENCE_CMF;
     }
 
     /**

+ 1 - 1
src/Service/File/Storage/ApiLegacyStorage.php

@@ -57,6 +57,6 @@ class ApiLegacyStorage implements FileStorageInterface
      */
     public function support(File $file): bool
     {
-        return $file->getHost() === FileHostEnum::API1()->getValue();
+        return $file->getHost() === FileHostEnum::API1;
     }
 }

+ 10 - 10
src/Service/File/Storage/LocalStorage.php

@@ -83,7 +83,7 @@ class LocalStorage implements FileStorageInterface
         ?FileTypeEnum $type = null
     ): array {
         return $this->filesystem->listKeys(
-            $this->getPrefix($owner, false, $type?->getValue())
+            $this->getPrefix($owner, false, $type)
         );
     }
 
@@ -170,13 +170,13 @@ class LocalStorage implements FileStorageInterface
             ->setOrganization($organization)
             ->setPerson($person)
             ->setSlug(null)
-            ->setType($type->getValue())
+            ->setType($type)
             ->setVisibility($visibility)
             ->setIsTemporaryFile($isTemporary)
             ->setMimeType($mimeType ?? $this->fileUtils->guessMimeTypeFromFilename($filename))
             ->setCreateDate(new DateTime())
             ->setCreatedBy($createdBy->getId())
-            ->setStatus(FileStatusEnum::PENDING()->getValue());
+            ->setStatus(FileStatusEnum::PENDING);
 
         $this->entityManager->persist($file);
 
@@ -231,7 +231,7 @@ class LocalStorage implements FileStorageInterface
         $size = $this->filesystem->write($key, $content, true);
 
         $file->setSize($size)
-             ->setStatus(FileStatusEnum::READY()->getValue());
+             ->setStatus(FileStatusEnum::READY);
 
         if ($isNewFile) {
             $file->setSlug($key)
@@ -301,7 +301,7 @@ class LocalStorage implements FileStorageInterface
      */
     public function softDelete(File $file, Access $author): File
     {
-        $file->setStatus(FileStatusEnum::DELETED()->getValue())
+        $file->setStatus(FileStatusEnum::DELETED)
              ->setSize(0)
              ->setUpdatedBy($author->getId());
 
@@ -334,13 +334,13 @@ class LocalStorage implements FileStorageInterface
      *
      * @param Organization|Access|Person $owner
      * @param bool $isTemporary
-     * @param string|null $type
+     * @param FileTypeEnum|null $type
      * @return string
      */
     protected function getPrefix(
         Organization | Access | Person $owner,
         bool $isTemporary,
-        string $type = null
+        FileTypeEnum $type = null
     ): string
     {
         if ($owner instanceof Access) {
@@ -355,8 +355,8 @@ class LocalStorage implements FileStorageInterface
             $prefix = Path::join('temp', $prefix);
         }
 
-        if ($type !== null && $type !== FileTypeEnum::NONE()->getValue()) {
-            $prefix = Path::join($prefix, strtolower($type));
+        if ($type !== null && $type !== FileTypeEnum::NONE) {
+            $prefix = Path::join($prefix, strtolower($type->value));
         }
 
         return $prefix;
@@ -388,6 +388,6 @@ class LocalStorage implements FileStorageInterface
      */
     public function support(File $file): bool
     {
-        return $file->getHost() === FileHostEnum::AP2I()->getValue();
+        return $file->getHost() === FileHostEnum::AP2I;
     }
 }

+ 8 - 6
src/Service/Mailer/Builder/AbstractBuilder.php

@@ -6,6 +6,8 @@ namespace App\Service\Mailer\Builder;
 use App\Entity\Access\Access;
 use App\Entity\Core\ContactPoint;
 use App\Entity\Organization\Organization;
+use App\Enum\Core\ContactPointTypeEnum;
+use App\Enum\Core\EmailSendingTypeEnum;
 use App\Enum\Message\ReportMessageStatusEnum;
 use App\Repository\Core\ContactPointRepository;
 use App\Service\Mailer\Email;
@@ -67,12 +69,12 @@ class AbstractBuilder implements AbstractBuilderInterface
     /**
      * @param Email $email
      * @param Access|Organization|string $target
-     * @param string $sendType
-     * @param string|null $contactPointType
+     * @param EmailSendingTypeEnum $sendType
+     * @param ContactPointTypeEnum|null $contactPointType
      *
      * @see AbstractBuilderTest::testAddRecipient()
      */
-    public function addRecipient(Email $email, Access|Organization|string $target, string $sendType, string $contactPointType = null): void{
+    public function addRecipient(Email $email, Access|Organization|string $target, EmailSendingTypeEnum $sendType, ContactPointTypeEnum $contactPointType = null): void{
         $emailRecipient = (new EmailRecipient())
             ->setSendType($sendType);
 
@@ -85,7 +87,7 @@ class AbstractBuilder implements AbstractBuilderInterface
             $emailRecipient->setName($target->getName());
             $this->setMailToRecipient($this->contactPointRepository->getByTypeAndOrganization($contactPointType, $target), $emailRecipient);
         }else{
-            $emailRecipient->setSendStatus(ReportMessageStatusEnum::DELIVERED()->getValue());
+            $emailRecipient->setSendStatus(ReportMessageStatusEnum::DELIVERED);
             $emailRecipient->setEmailAddress($target);
         }
 
@@ -100,10 +102,10 @@ class AbstractBuilder implements AbstractBuilderInterface
      */
     public function setMailToRecipient(array $contactPoints, EmailRecipient $recipient): void {
         if($contactPoint = $this->getFirstContactPointWithEmail($contactPoints)){
-            $recipient->setSendStatus(ReportMessageStatusEnum::DELIVERED()->getValue());
+            $recipient->setSendStatus(ReportMessageStatusEnum::DELIVERED);
             $recipient->setEmailAddress($contactPoint->getEmail());
         }else{
-            $recipient->setSendStatus(ReportMessageStatusEnum::MISSING()->getValue());
+            $recipient->setSendStatus(ReportMessageStatusEnum::MISSING);
         }
     }
 

+ 3 - 1
src/Service/Mailer/Builder/AbstractBuilderInterface.php

@@ -6,6 +6,8 @@ namespace App\Service\Mailer\Builder;
 use App\Entity\Access\Access;
 use App\Entity\Message\Email as EmailEntity;
 use App\Entity\Organization\Organization;
+use App\Enum\Core\ContactPointTypeEnum;
+use App\Enum\Core\EmailSendingTypeEnum;
 use App\Service\Mailer\Email;
 
 interface AbstractBuilderInterface {
@@ -19,5 +21,5 @@ interface AbstractBuilderInterface {
 
     public function buildEmailEntity(string $subject, Access $author, string $content): EmailEntity;
 
-    public function addRecipient(Email $email, Access|Organization|string $target, string $sendType, string $contactPointType = null): void;
+    public function addRecipient(Email $email, Access|Organization|string $target, EmailSendingTypeEnum $sendType, ContactPointTypeEnum $contactPointType = null): void;
 }

+ 4 - 4
src/Service/Mailer/Builder/OnSubdomainChangeMailBuilder.php

@@ -22,9 +22,9 @@ use Doctrine\ORM\EntityManagerInterface;
 class OnSubdomainChangeMailBuilder extends AbstractBuilder implements BuilderInterface
 {
     public function __construct(
-        private EntityManagerInterface $entityManager,
-        private string $opentalentNoReplyEmailAddress,
-        private AccessUtils $accessUtils
+        private readonly EntityManagerInterface $entityManager,
+        private readonly string                 $opentalentNoReplyEmailAddress,
+        private readonly AccessUtils            $accessUtils
     )
     {
     }
@@ -61,7 +61,7 @@ class OnSubdomainChangeMailBuilder extends AbstractBuilder implements BuilderInt
             ->setFrom($this->opentalentNoReplyEmailAddress)
             ->setFromName($organization->getName())
         ;
-        $this->addRecipient($email, $admin, EmailSendingTypeEnum::TO()->getValue(), ContactPointTypeEnum::PRINCIPAL()->getValue());
+        $this->addRecipient($email, $admin, EmailSendingTypeEnum::TO, ContactPointTypeEnum::PRINCIPAL);
 
         return new ArrayCollection([$email]);
     }

+ 8 - 6
src/Service/Mailer/EmailRecipient.php

@@ -5,36 +5,38 @@ namespace App\Service\Mailer;
 
 use App\Entity\Access\Access;
 use App\Entity\Organization\Organization;
+use App\Enum\Core\EmailSendingTypeEnum;
+use App\Enum\Message\ReportMessageStatusEnum;
 
 /**
  * Classe AbstractRecipient qui contient les informations des destinataires
  */
 class EmailRecipient
 {
-    private string $sendStatus;
+    private ReportMessageStatusEnum $sendStatus;
     private string $name = '';
     private string $emailAddress;
-    private string $sendType;
+    private EmailSendingTypeEnum $sendType;
     private ?Access $access = null;
     private ?Organization $organization = null;
 
-    public function getSendType(): string
+    public function getSendType(): EmailSendingTypeEnum
     {
         return $this->sendType;
     }
 
-    public function setSendType(string $sendType): self
+    public function setSendType(EmailSendingTypeEnum $sendType): self
     {
         $this->sendType = $sendType;
         return $this;
     }
 
-    public function getSendStatus(): string
+    public function getSendStatus(): ReportMessageStatusEnum
     {
         return $this->sendStatus;
     }
 
-    public function setSendStatus(string $sendStatus): self
+    public function setSendStatus(ReportMessageStatusEnum $sendStatus): self
     {
         $this->sendStatus = $sendStatus;
         return $this;

+ 16 - 16
src/Service/Mailer/Mailer.php

@@ -28,13 +28,13 @@ use Symfony\Component\Mime\Email as SymfonyEmail;
 class Mailer
 {
     public function __construct(
-        private MailerInterface $symfonyMailer,
-        private string $opentalentNoReplyEmailAddress,
-        private BuilderIterator $builderIterator,
-        private StringsUtils $stringsUtils,
-        private EntityManagerInterface $entityManager,
-        private Environnement $environnement,
-        private LoggerInterface $logger
+        private readonly MailerInterface        $symfonyMailer,
+        private readonly string                 $opentalentNoReplyEmailAddress,
+        private readonly BuilderIterator        $builderIterator,
+        private readonly StringsUtils           $stringsUtils,
+        private readonly EntityManagerInterface $entityManager,
+        private readonly Environnement          $environnement,
+        private readonly LoggerInterface $logger
     )
     {}
 
@@ -63,7 +63,7 @@ class Mailer
         foreach ($emailsCollection as $email){
             //si l'email n'a pas de destinataire, on ne l'envoi pas...
             if($email->getEmailRecipients()->isEmpty()){
-                $email->getEmailEntity()->setStatus(MessageStatusEnum::NO_RECIPIENT()->getValue());
+                $email->getEmailEntity()->setStatus(MessageStatusEnum::NO_RECIPIENT);
                 continue;
             }
 
@@ -108,13 +108,13 @@ class Mailer
         //On tente d'envoyer
         try {
             $this->symfonyMailer->send($symfonyMail);
-            $email->getEmailEntity()->setStatus(MessageStatusEnum::SEND()->getValue());
+            $email->getEmailEntity()->setStatus(MessageStatusEnum::SEND);
             $email->getEmailEntity()->setDateSent(new \DateTime('now'));
         } catch (\Exception $e) {
             $this->logger->error('Error while sending email');
             $this->logger->error($e->getMessage());
 
-            $email->getEmailEntity()->setStatus(MessageStatusEnum::FAILED()->getValue());
+            $email->getEmailEntity()->setStatus(MessageStatusEnum::FAILED);
         }
     }
 
@@ -210,9 +210,9 @@ class Mailer
             $emailRecipients = $email->getEmailRecipients();
             /** @var EmailRecipient $emailRecipient */
             foreach ($emailRecipients as $emailRecipient){
-                if($emailRecipient->getSendStatus() === ReportMessageStatusEnum::MISSING()->getValue()){
+                if($emailRecipient->getSendStatus() === ReportMessageStatusEnum::MISSING){
                     $unDelivered[] = $emailRecipient;
-                }else if($emailRecipient->getSendStatus() === ReportMessageStatusEnum::DELIVERED()->getValue()){
+                }else if($emailRecipient->getSendStatus() === ReportMessageStatusEnum::DELIVERED){
                     $delivered[] = $emailRecipient;
                 }
             }
@@ -266,7 +266,7 @@ class Mailer
      */
     public function reduceEmailsCollectionInPreproduction(ArrayCollection $emailsCollection): ArrayCollection
     {
-        if($this->environnement->get(EnvironnementVarEnum::APP_ENV()->getValue()) !== 'prod' && $emailsCollection->count() > 20) {
+        if($this->environnement->get(EnvironnementVarEnum::APP_ENV->value) !== 'prod' && $emailsCollection->count() > 20) {
             $startEmails = $emailsCollection->slice(0, 10);
             $endEmails = $emailsCollection->slice($emailsCollection->count() - 11, 10);
             return new ArrayCollection([...$startEmails, ...$endEmails]);
@@ -321,13 +321,13 @@ class Mailer
                 $allReadySend[] = $addressMail;
 
                 switch($emailRecipient->getSendType()){
-                    case EmailSendingTypeEnum::TO()->getValue():
+                    case EmailSendingTypeEnum::TO:
                         $symfonyMail->addTo($addressMail);
                         break;
-                    case EmailSendingTypeEnum::BBC()->getValue():
+                    case EmailSendingTypeEnum::BBC:
                         $symfonyMail->addBcc($addressMail);
                         break;
-                    case EmailSendingTypeEnum::CC()->getValue():
+                    case EmailSendingTypeEnum::CC:
                         $symfonyMail->addCc($addressMail);
                         break;
                 }

Some files were not shown because too many files changed in this diff