OrganizationProfileCreator.php 3.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  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\Service\Utils\DatesUtils;
  11. use App\Test\Service\Organization\OrganizationProfileCreatorTest;
  12. /**
  13. * Class OrganizationProfileCreator : Service contenant les manipulations associés à la ressource OrganizationProfile.
  14. */
  15. class OrganizationProfileCreator
  16. {
  17. public function __construct(
  18. private Module $module,
  19. private Tree $tree,
  20. private OrganizationUtils $organizationUtils,
  21. private Trial $trialService
  22. ) {
  23. }
  24. /**
  25. * Classe permettant de créer le profile d'une organisation à partir d'une entité Organization.
  26. *
  27. * @see OrganizationProfileCreatorTest::testCreateCompleteOrganizationProfile()
  28. */
  29. public function createCompleteOrganizationProfile(Organization $organization): OrganizationProfile
  30. {
  31. $organizationProfile = $this->createLightOrganizationProfile($organization);
  32. $organizationProfile->setModules($this->module->getOrganizationModules($organization));
  33. $organizationProfile->setProduct($organization->getSettings()->getProduct());
  34. $organizationProfile->setParametersId($organization->getParameters()->getId());
  35. $organizationProfile->setLegalStatus($organization->getLegalStatus());
  36. $organizationProfile->setPrincipalType($organization->getPrincipalType());
  37. $organizationProfile->setTrialActive($organization->getSettings()->isTrialActive());
  38. $organizationProfile->setTrialCountDown($this->trialService->getTrialCountdown($organization->getSettings()->getlLastTrialStartDate()));
  39. $organizationProfile->setHasChildren($organization->getNetworkOrganizationChildren()->count() > 1);
  40. $organizationProfile->setShowAdherentList(
  41. $organization->getParameters()->getShowAdherentList()
  42. && $organization->getPrincipalType() !== PrincipalTypeEnum::ARTISTIC_EDUCATION_ONLY
  43. );
  44. foreach ($organization->getNetworkOrganizations() as $networkOrganization) {
  45. // TODO: fix temporaire => retirer ce 'if' dès la résolution de https://ressources-opentalent.atlassian.net/browse/V8-6985
  46. if ($networkOrganization->getEndDate() === null || $networkOrganization->getEndDate() > DatesUtils::new()) {
  47. $organizationProfile->addNetwork($networkOrganization->getNetwork()->getName());
  48. }
  49. }
  50. /** @var Organization $parent */
  51. foreach ($this->tree->findAllParentsAndSortByType($organization) as $parent) {
  52. $parentProfile = $this->createLightOrganizationProfile($parent);
  53. $organizationProfile->addParent($parentProfile);
  54. }
  55. $organizationProfile->setCurrentYear($this->organizationUtils->getOrganizationCurrentActivityYear($organization));
  56. return $organizationProfile;
  57. }
  58. /**
  59. * Classe permettant de créer et Setter les éléments de base d'un profile d'organisation à partir d'une entité Organization.
  60. */
  61. public function createLightOrganizationProfile(Organization $organization): OrganizationProfile
  62. {
  63. $organizationProfile = new OrganizationProfile();
  64. $organizationProfile
  65. ->setId($organization->getId())
  66. ->setName($organization->getName())
  67. ->setWebsite($this->organizationUtils->getOrganizationWebsite($organization))
  68. ;
  69. return $organizationProfile;
  70. }
  71. }