OrganizationProfileCreator.php 3.0 KB

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