Utils.php 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Service\Organization;
  4. use App\Entity\Organization\Organization;
  5. use App\Enum\Organization\OrganizationIdsEnum;
  6. use App\Enum\Organization\SettingsProductEnum;
  7. use App\Test\Service\Organization\UtilsTest;
  8. /**
  9. * Class OrganizationUtils : service rassemblant des fonctions d'aides pour les questions se rapportant à l'organisation
  10. * @package App\Service\Resource
  11. */
  12. class Utils
  13. {
  14. const START_DATE_KEY = 'dateStart';
  15. const END_DATE_KEY = 'dateEnd';
  16. /**
  17. * Test si l'organisation est considérée comme une structure == n'a pas un produit manager
  18. * @param Organization $organization
  19. * @return bool
  20. * @see UtilsTest::testIsStructureTest()
  21. */
  22. public function isStructure(Organization $organization): bool{
  23. return $organization->getSettings()->getProduct() != SettingsProductEnum::MANAGER()
  24. && $organization->getSettings()->getProduct() != SettingsProductEnum::MANAGER_PREMIUM();
  25. }
  26. /**
  27. * Test si l'organisation est considérée comme un manager == a un produit manager standard
  28. * @param Organization $organization
  29. * @return bool
  30. * @see UtilsTest::testIsManagerTest()
  31. */
  32. public function isManager(Organization $organization): bool{
  33. return $organization->getSettings()->getProduct() == SettingsProductEnum::MANAGER();
  34. }
  35. /**
  36. * Test si l'organisation est la structure 2iOpenservice
  37. * @param Organization $organization
  38. * @return bool
  39. * @see UtilsTest::testIsOrganizationIs2ios()
  40. */
  41. public function isOrganizationIs2ios(Organization $organization): bool{
  42. return $this->isOrganizationIdIs($organization, OrganizationIdsEnum::_2IOS());
  43. }
  44. /**
  45. * Test si l'organisation est la structure CMF
  46. * @param Organization $organization
  47. * @return bool
  48. * @see UtilsTest::testIsOrganizationIsCMF()
  49. */
  50. public function isOrganizationIsCMF(Organization $organization): bool{
  51. return $this->isOrganizationIdIs($organization, OrganizationIdsEnum::CMF());
  52. }
  53. /**
  54. * Test si l'id de l'organisation est celui passé en paramètre (doit faire partit des OrganizationIdsEnum)
  55. * @param Organization $organization
  56. * @param OrganizationIdsEnum $organizationIdsEnum
  57. * @return bool
  58. */
  59. private function isOrganizationIdIs(Organization $organization, OrganizationIdsEnum $organizationIdsEnum){
  60. return $organization->getId() === $organizationIdsEnum->getValue();
  61. }
  62. /**
  63. * Retourne dans quelles année d'activité on se situe aujourd'hui
  64. * @param Organization $organization
  65. * @return int
  66. * @throws \Exception
  67. * @see UtilsTest::testGetOrganizationCurrentActivityYear()
  68. */
  69. public static function getOrganizationCurrentActivityYear(Organization $organization): int{
  70. $today = new \DateTime();
  71. $year = intval($today->format('Y'));
  72. $musicalDate = $organization->getParameters()->getMusicalDate();
  73. if(empty($musicalDate)) $musicalDate = new \DateTime($year.'-08-31');
  74. $base_date = new \DateTime($musicalDate->format($year.'-m-d'));
  75. $dateStart = new \DateTime($year . '-01-01');
  76. if($today >= $dateStart && $today < $base_date)
  77. return $year - 1;
  78. else return $year;
  79. }
  80. /**
  81. * Fonction permettant de récupérer les dates de début et de fin d'activité d'une structure selon une année
  82. * @param Organization $organization
  83. * @param int $year
  84. * @return \DateTime[]
  85. * @throws \Exception
  86. * @see UtilsTest::testGetActivityPeriodsSwitchYear()
  87. */
  88. public static function getActivityPeriodsSwitchYear(Organization $organization, int $year): array
  89. {
  90. $musicalDate = $organization->getParameters()->getMusicalDate();
  91. if (empty($musicalDate)) {
  92. $dateStart = new \DateTime($year . "-09-01");
  93. $dateEnd = new \DateTime(($year + 1) . "-08-31");
  94. } else {
  95. $dateStart = new \DateTime($year . "-" . $musicalDate->format('m') . "-" . $musicalDate->format('d'));
  96. $dateEnd = clone($dateStart);
  97. $dateEnd->add(new \DateInterval('P1Y'))->sub(new \DateInterval('P1D'));
  98. }
  99. return [
  100. self::START_DATE_KEY => $dateStart->format('Y-m-d'),
  101. self::END_DATE_KEY => $dateEnd->format('Y-m-d')
  102. ];
  103. }
  104. /**
  105. * Permet de retrouver quelle sera la date d'activité correspondant à une date précise de l'année
  106. * @param Organization $organization
  107. * @param \DateTimeInterface $date
  108. * @return int
  109. * @throws \Exception
  110. * @see UtilsTest::testgetActivityYearSwitchDate()
  111. */
  112. public static function getActivityYearSwitchDate(Organization $organization, \DateTimeInterface $date): int
  113. {
  114. $year = $date->format('Y');
  115. $musicalDate = $organization->getParameters()->getMusicalDate();
  116. if (empty($musicalDate)) {
  117. $startDate = new \DateTime($year.'-08-31');
  118. }else{
  119. $startDate = new \DateTime($musicalDate->format($year.'-m-d'));
  120. }
  121. $pivotDate = new \DateTime($year . '-01-01');
  122. if($date >= $pivotDate && $date < $startDate)
  123. return (int) ($year - 1);
  124. else return (int) $year;
  125. }
  126. }