OrganizationProfileCreator.php 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Service\Organization;
  4. use App\ApiResources\Profile\OrganizationProfile;
  5. use App\Entity\Organization\Organization;
  6. use App\Enum\Organization\PrincipalTypeEnum;
  7. use App\Service\Network\Tree;
  8. use App\Service\Organization\Utils as OrganizationUtils;
  9. use App\Service\Security\Module;
  10. use App\Test\Service\Organization\OrganizationProfileCreatorTest;
  11. /**
  12. * Class OrganizationProfileCreator : Service contenant les manipulations associés à la ressource OrganizationProfile.
  13. */
  14. class OrganizationProfileCreator
  15. {
  16. public function __construct(
  17. private Module $module,
  18. private Tree $tree,
  19. private OrganizationUtils $organizationUtils
  20. ) {
  21. }
  22. /**
  23. * Classe permettant de créer le profile d'une organisation à partir d'une entité Organization.
  24. *
  25. * @see OrganizationProfileCreatorTest::testCreateCompleteOrganizationProfile()
  26. */
  27. public function createCompleteOrganizationProfile(Organization $organization): OrganizationProfile
  28. {
  29. $organizationProfile = $this->createLightOrganizationProfile($organization);
  30. $organizationProfile->setModules($this->module->getOrganizationModules($organization));
  31. $organizationProfile->setProduct($organization->getSettings()->getProduct());
  32. $organizationProfile->setParametersId($organization->getParameters()->getId());
  33. $organizationProfile->setLegalStatus($organization->getLegalStatus());
  34. $organizationProfile->setHasChildren($organization->getNetworkOrganizationChildren()->count() > 1);
  35. $organizationProfile->setShowAdherentList(
  36. $organization->getParameters()->getShowAdherentList()
  37. && $organization->getPrincipalType() !== PrincipalTypeEnum::ARTISTIC_EDUCATION_ONLY
  38. );
  39. foreach ($organization->getNetworkOrganizations() as $networkOrganization) {
  40. $organizationProfile->addNetwork($networkOrganization->getNetwork()->getName());
  41. }
  42. /** @var Organization $parent */
  43. foreach ($this->tree->findAllParentsAndSortByType($organization) as $parent) {
  44. $parentProfile = $this->createLightOrganizationProfile($parent);
  45. $organizationProfile->addParent($parentProfile);
  46. }
  47. $organizationProfile->setCurrentYear($this->organizationUtils->getOrganizationCurrentActivityYear($organization));
  48. return $organizationProfile;
  49. }
  50. /**
  51. * Classe permettant de créer et Setter les éléments de base d'un profile d'organisation à partir d'une entité Organization.
  52. */
  53. public function createLightOrganizationProfile(Organization $organization): OrganizationProfile
  54. {
  55. $organizationProfile = new OrganizationProfile();
  56. $organizationProfile
  57. ->setId($organization->getId())
  58. ->setName($organization->getName())
  59. ->setWebsite($this->organizationUtils->getOrganizationWebsite($organization))
  60. ;
  61. return $organizationProfile;
  62. }
  63. }