浏览代码

review mandatory fields for organization creation

Olivier Massot 1 年之前
父节点
当前提交
af9de78deb

+ 8 - 18
src/ApiResources/Organization/OrganizationCreationRequest.php

@@ -6,6 +6,7 @@ use ApiPlatform\Metadata\ApiProperty;
 use ApiPlatform\Metadata\ApiResource;
 use ApiPlatform\Metadata\Post;
 use App\Enum\Organization\LegalEnum;
+use App\Enum\Organization\OrganizationIdsEnum;
 use App\Enum\Organization\PrincipalTypeEnum;
 use App\Enum\Organization\SettingsProductEnum;
 use App\State\Processor\Organization\OrganizationCreationRequestProcessor;
@@ -25,6 +26,9 @@ use Symfony\Component\Validator\Constraints as Assert;
 )]
 class OrganizationCreationRequest
 {
+    private const FRANCE_COUNTRY_INTERNAL_ID = 72;
+    private const OPENTALENT_ID = 1;
+
     /**
      * Id 'bidon' ajouté par défaut pour permettre la construction
      * de l'IRI par api platform.
@@ -41,7 +45,7 @@ class OrganizationCreationRequest
 
     private string $name;
 
-    private LegalEnum $legalStatus;
+    private ?LegalEnum $legalStatus = null;
 
     private SettingsProductEnum $product;
 
@@ -67,7 +71,7 @@ class OrganizationCreationRequest
     )]
     private string $city;
 
-    private int $countryId = 72; // France's id
+    private int $countryId = self::FRANCE_COUNTRY_INTERNAL_ID;
 
     #[Assert\Length(
         min: 10,
@@ -87,12 +91,9 @@ class OrganizationCreationRequest
     private string $subdomain;
 
     #[Assert\Positive]
-    private int $parentId;
-
-    #[Assert\Positive]
-    private int $networkId;
+    private int $parentId = OrganizationIdsEnum::_2IOS->value;
 
-    private PrincipalTypeEnum $principalType;
+    private ?PrincipalTypeEnum $principalType = null;
 
     /**
      * Id d'une Person existante ou requête de création d'un nouvel access qui aura le
@@ -279,17 +280,6 @@ class OrganizationCreationRequest
         return $this;
     }
 
-    public function getNetworkId(): int
-    {
-        return $this->networkId;
-    }
-
-    public function setNetworkId(int $networkId): self
-    {
-        $this->networkId = $networkId;
-        return $this;
-    }
-
     public function getPrincipalType(): PrincipalTypeEnum
     {
         return $this->principalType;

+ 7 - 5
src/Service/Organization/OrganizationFactory.php

@@ -21,7 +21,6 @@ use App\Enum\Education\CycleEnum;
 use App\Enum\Organization\AddressPostalOrganizationTypeEnum;
 use App\Enum\Person\AddressPostalPersonTypeEnum;
 use App\Repository\Core\CountryRepository;
-use App\Repository\Network\NetworkRepository;
 use App\Repository\Organization\OrganizationRepository;
 use App\Repository\Person\PersonRepository;
 use App\Service\Dolibarr\DolibarrApiService;
@@ -39,6 +38,7 @@ use Symfony\Component\String\ByteString;
 use Symfony\Contracts\HttpClient\Exception\TransportExceptionInterface;
 use Symfony\Contracts\Service\Attribute\Required;
 use Throwable;
+use App\Service\Organization\Utils as OrganizationUtils;
 
 class OrganizationFactory
 {
@@ -48,7 +48,7 @@ class OrganizationFactory
         private readonly SubdomainService       $subdomainService,
         private readonly OrganizationRepository $organizationRepository,
         private readonly CountryRepository      $countryRepository,
-        private readonly NetworkRepository      $networkRepository,
+        private readonly OrganizationUtils      $organizationUtils,
         private readonly Typo3Service           $typo3Service,
         private readonly DolibarrApiService     $dolibarrApiService,
         private readonly EntityManagerInterface $entityManager,
@@ -354,11 +354,13 @@ class OrganizationFactory
             throw new \RuntimeException('No parent organization found for id ' . $organizationCreationRequest->getParentId());
         }
 
-        $network = $this->networkRepository->find($organizationCreationRequest->getNetworkId());
-        if (!$network) {
-            throw new \RuntimeException('No network found for id ' . $organizationCreationRequest->getNetworkId());
+        $networkOrganization = $this->organizationUtils->getActiveNetworkOrganization($parent);
+        if (!$networkOrganization) {
+            throw new \RuntimeException('No network found for parent ' . $organizationCreationRequest->getParentId());
         }
 
+        $network = $networkOrganization->getNetwork();
+
         $networkOrganization = new NetworkOrganization();
         $networkOrganization->setParent($parent);
         $networkOrganization->setNetwork($network);

+ 19 - 0
src/Service/Organization/Utils.php

@@ -4,6 +4,7 @@ declare(strict_types=1);
 
 namespace App\Service\Organization;
 
+use App\Entity\Network\NetworkOrganization;
 use App\Entity\Organization\Organization;
 use App\Enum\Organization\OrganizationIdsEnum;
 use App\Enum\Organization\SettingsProductEnum;
@@ -290,4 +291,22 @@ class Utils
 
         return !empty($modules) && in_array($module, $modules);
     }
+
+    /**
+     * Retourne le premier NetworkOrganization actif de la structure
+     *
+     * @param Organization $organization
+     * @return NetworkOrganization|null
+     * @throws \Exception
+     */
+    public function getActiveNetworkOrganization(Organization $organization): ?NetworkOrganization
+    {
+        foreach ($organization->getNetworkOrganizations() as $networkOrganization) {
+            if ($this->networkUtils->isNetworkOrganizationActiveNow($networkOrganization)) {
+                return $networkOrganization->getNetwork();
+            }
+        }
+
+        return null;
+    }
 }