OrganizationFixtures.php 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  1. <?php
  2. namespace App\Tests\Fixture;
  3. use DateTime;
  4. use App\Service\Utils\Uuid;
  5. use App\Entity\Access\Access;
  6. use App\Entity\Booking\Event;
  7. use App\Entity\Person\Person;
  8. use App\Entity\Education\Cycle;
  9. use App\Entity\Network\Network;
  10. use App\Entity\Core\ContactPoint;
  11. use App\Entity\Education\Education;
  12. use App\Enum\Booking\VisibilityEnum;
  13. use App\Enum\Organization\LegalEnum;
  14. use App\Entity\Billing\AccessBilling;
  15. use App\Entity\Billing\ResidenceArea;
  16. use App\Entity\Organization\Settings;
  17. use App\Entity\Billing\BillingSetting;
  18. use App\Entity\Organization\Subdomain;
  19. use App\Entity\Organization\Parameters;
  20. use App\Enum\Core\ContactPointTypeEnum;
  21. use Doctrine\Persistence\ObjectManager;
  22. use Doctrine\ORM\EntityManagerInterface;
  23. use App\Entity\Education\EducationTiming;
  24. use App\Entity\Organization\Organization;
  25. use App\Entity\Education\CycleByEducation;
  26. use App\Entity\Education\EducationStudent;
  27. use App\Entity\Network\NetworkOrganization;
  28. use Doctrine\Bundle\FixturesBundle\Fixture;
  29. use App\Enum\Organization\PrincipalTypeEnum;
  30. use App\Entity\Education\EducationCurriculum;
  31. use Doctrine\Common\DataFixtures\Purger\ORMPurger;
  32. use Doctrine\Bundle\FixturesBundle\FixtureGroupInterface;
  33. use Symfony\Component\Serializer\Context\SerializerContextBuilder;
  34. class OrganizationFixtures extends Fixture implements FixtureGroupInterface
  35. {
  36. protected EntityManagerInterface $em;
  37. public static function getGroups(): array
  38. {
  39. return ['poc'];
  40. }
  41. /**
  42. * Delete all DB records before populating fixtures.
  43. *
  44. * @return void
  45. * @throws \Doctrine\DBAL\Exception
  46. */
  47. private function purgeDb()
  48. {
  49. if (!preg_match('/.*test.*/', $this->em->getConnection()->getDatabase())) {
  50. throw new \RuntimeException("The DB name shall contain 'test' in its name to be purge");
  51. }
  52. $this->em->getConnection()->exec('SET FOREIGN_KEY_CHECKS = 0;');
  53. $purger = new ORMPurger($this->em);
  54. $purger->setPurgeMode(ORMPurger::PURGE_MODE_DELETE);
  55. $purger->purge();
  56. $this->em->getConnection()->exec('SET FOREIGN_KEY_CHECKS = 1;');
  57. }
  58. public function load(ObjectManager $em): void
  59. {
  60. // purge DB
  61. $this->em = $em;
  62. $this->purgeDb();
  63. // create an organization with a network, legal status accesses, Param , name, id and settings
  64. $network = new Network();
  65. $network->setName('NET');
  66. $em->persist($network);
  67. $contactPoint0 = new ContactPoint();
  68. $contactPoint0->setContactType(ContactPointTypeEnum::PRINCIPAL()->getValue());
  69. $em->persist($contactPoint0);
  70. // Create the root organization (opentalent)
  71. $root = new Organization();
  72. $root->setName('Root');
  73. $root->setLegalStatus(LegalEnum::COMMERCIAL_SOCIETY()->getValue());
  74. $root->setPrincipalType(PrincipalTypeEnum::NATIONAL_FEDERATION()->getValue());
  75. $root->addContactPoint($contactPoint0);
  76. // subdomain fixtures
  77. $subdomain = new Subdomain();
  78. $subdomain->setOrganization($root);
  79. $subdomain->setSubdomain('subdomain');
  80. $subdomain->setActive(true);
  81. $parameters = new Parameters();
  82. $parameters->setFinancialDate(new DateTime());
  83. $parameters->setMusicalDate(new DateTime());
  84. $parameters->setStartCourseDate(new DateTime());
  85. $parameters->setEndCourseDate(new DateTime());
  86. $parameters->setAverage(20);
  87. $parameters->setEditCriteriaNotationByAdminOnly(true);
  88. $parameters->setSmsSenderName('MySender');
  89. $parameters->setLogoDonorsMove(false);
  90. $parameters->setSubDomain('subdomain');
  91. $parameters->setWebsite('https://www.example.com');
  92. $parameters->setOtherWebsite('https://www.otherwebsite.com');
  93. $parameters->setCustomDomain('https://www.customdomain.com');
  94. $parameters->setDesactivateOpentalentSiteWeb(false);
  95. $parameters->setBulletinPeriod('SomePeriod');
  96. $parameters->setBulletinWithTeacher(false);
  97. $parameters->setBulletinPrintAddress(false);
  98. $parameters->setBulletinSignatureDirector(true);
  99. $parameters->setBulletinDisplayLevelAcquired(true);
  100. $parameters->setBulletinShowEducationWithoutEvaluation(false);
  101. $parameters->setBulletinViewTestResults(false);
  102. $parameters->setBulletinShowAbsences(false);
  103. $parameters->setBulletinShowAverages(true);
  104. $parameters->setBulletinOutput('SomeOutput');
  105. $parameters->setBulletinEditWithoutEvaluation(true);
  106. $parameters->setBulletinReceiver('STUDENTS_AND_THEIR_GUARDIANS');
  107. $parameters->setBulletinCriteriaSort('BY_CRITERIA_INSERT');
  108. $parameters->setUsernameSMS('username');
  109. $parameters->setPasswordSMS('password');
  110. $parameters->setShowAdherentList(true);
  111. $parameters->setStudentsAreAdherents(false);
  112. $parameters->setTimezone('Europe/Paris');
  113. $parameters->setEducationPeriodicity('ANNUAL');
  114. $parameters->setAdvancedEducationNotationType('BY_EDUCATION');
  115. $parameters->setSendAttendanceEmail(false);
  116. $parameters->setSendAttendanceSms(false);
  117. $parameters->setGenerateAttendanceReport(true);
  118. $parameters->setConsultPedagogicResult(true);
  119. $parameters->setConsultTeacherListing(true);
  120. $parameters->setPeriodValidation(true);
  121. $parameters->setNotifyAdministrationAbsence(false);
  122. $root->setParameters($parameters);
  123. $settings = new Settings();
  124. $settings->setProduct('school');
  125. $settings->setModules(['BillingAdministration']);
  126. $root->setSettings($settings);
  127. //create acesses with orga
  128. $access = new Access();
  129. $access->setOrganization($root);
  130. $access->setRoles(["ROLE_ADMIN","ROLE_ADMIN_CORE","ROLE_SUPER_ADMIN"]);
  131. $teacherAccess = new Access();
  132. $teacherAccess->setOrganization($root);
  133. $teacherAccess->setRoles(["ROLE_TEACHER"]);
  134. // create a person :
  135. $person = new Person();
  136. $person->addAccess($access);
  137. $person->setUsername('username');
  138. $person->setPassword('password');
  139. // create BillingSetting with an organization
  140. $billingSetting = new BillingSetting();
  141. $billingSetting->setOrganization($root);
  142. $em->persist($billingSetting);
  143. $residenceArea = new ResidenceArea();
  144. $residenceArea->setLabel('label');
  145. $residenceArea->setBillingSetting($billingSetting);
  146. //create an AccessBilling with an access
  147. $accessBilling = new AccessBilling();
  148. $accessBilling->setAccess($access);
  149. $accessBilling->setResidenceArea($residenceArea);
  150. $education = new Education();
  151. $educationCurriculum = new EducationCurriculum();
  152. $cycleByEducation = new CycleByEducation();
  153. $cycle = new Cycle();
  154. $cycle->setOrganization($root);
  155. $cycle->setLabel('cycle');
  156. $cycle->setCycleEnum('CYCLE_1');
  157. $cycle->setIsSystem(false);
  158. $cycle->addCycleByEducation($cycleByEducation);
  159. // Booking
  160. $now = new \DateTime('now');
  161. $start = $now->add(new \DateInterval('P1M'));
  162. $end = $now->add(new \DateInterval('P1M1D'));
  163. $event = new Event();
  164. $event->setOrganization($root);
  165. $event->setName('My Event');
  166. $event->setDatetimeStart($start);
  167. $event->setDatetimeEnd($end);
  168. $event->setVisibility(VisibilityEnum::PUBLIC_VISIBILITY());
  169. $event->setUuid(Uuid::uuid());
  170. $em->persist($root);
  171. $em->persist($event);
  172. $em->persist($person);
  173. $em->persist($access);
  174. $em->persist($accessBilling);
  175. $em->persist($billingSetting);
  176. $em->persist($residenceArea);
  177. $em->persist($subdomain);
  178. $em->persist($parameters);
  179. $em->flush();
  180. }
  181. }