OrganizationFixtures.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286
  1. <?php
  2. namespace App\Tests\Fixture;
  3. use App\Entity\Access\Access;
  4. use App\Entity\Billing\AccessBilling;
  5. use App\Entity\Billing\BillingSetting;
  6. use App\Entity\Billing\ResidenceArea;
  7. use App\Entity\Booking\Event;
  8. use App\Entity\Core\ContactPoint;
  9. use App\Entity\Education\Cycle;
  10. use App\Entity\Education\CycleByEducation;
  11. use App\Entity\Education\Education;
  12. use App\Entity\Education\EducationCategory;
  13. use App\Entity\Education\EducationComplement;
  14. use App\Entity\Education\EducationCurriculum;
  15. use App\Entity\Education\EducationStudent;
  16. use App\Entity\Education\EducationTiming;
  17. use App\Entity\Network\Network;
  18. use App\Entity\Organization\Organization;
  19. use App\Entity\Organization\Parameters;
  20. use App\Entity\Organization\Settings;
  21. use App\Entity\Organization\Subdomain;
  22. use App\Entity\Person\Person;
  23. use App\Enum\Booking\VisibilityEnum;
  24. use App\Enum\Core\ContactPointTypeEnum;
  25. use App\Enum\Core\TimeZoneEnum;
  26. use App\Enum\Education\AdvancedEducationNotationTypeEnum;
  27. use App\Enum\Education\CycleEnum;
  28. use App\Enum\Education\PeriodicityEnum;
  29. use App\Enum\Organization\BulletinCriteriaSortEnum;
  30. use App\Enum\Organization\BulletinOutputEnum;
  31. use App\Enum\Organization\BulletinPeriodEnum;
  32. use App\Enum\Organization\LegalEnum;
  33. use App\Enum\Organization\PrincipalTypeEnum;
  34. use App\Enum\Organization\SendToBulletinEnum;
  35. use App\Enum\Organization\SettingsProductEnum;
  36. use App\Service\Utils\Uuid;
  37. use Doctrine\Bundle\FixturesBundle\Fixture;
  38. use Doctrine\DBAL\Connection;
  39. use Doctrine\ORM\EntityManagerInterface;
  40. use Doctrine\Persistence\ObjectManager;
  41. class OrganizationFixtures extends Fixture
  42. {
  43. protected EntityManagerInterface $em;
  44. private Connection $connection;
  45. public function __construct(EntityManagerInterface $em, Connection $connection)
  46. {
  47. $this->em = $em;
  48. $this->connection = $connection;
  49. }
  50. public static function getGroups(): array
  51. {
  52. return ['poc'];
  53. }
  54. public function purgeDb(): void
  55. {
  56. // Exécutez la requête SQL brute pour effectuer un TRUNCATE FORCE
  57. $tableName = $this->em->getClassMetadata(Organization::class)->getTableName();
  58. $truncateSql = "TRUNCATE TABLE $tableName";
  59. $this->connection->executeQuery($truncateSql);
  60. $accessTable = $this->em->getClassMetadata(Access::class)->getTableName();
  61. $truncateSql = "TRUNCATE TABLE $accessTable";
  62. $this->connection->executeQuery($truncateSql);
  63. }
  64. public function load(ObjectManager $em): void
  65. {
  66. // Purge DB before populating new fixtures
  67. // $this->purgeDb();
  68. // create an organization with a network, legal status accesses, Param , name, id and settings
  69. $network = new Network();
  70. $network->setName('NET');
  71. $em->persist($network);
  72. $contactPoint0 = new ContactPoint();
  73. $contactPoint0->setContactType(ContactPointTypeEnum::PRINCIPAL);
  74. $em->persist($contactPoint0);
  75. // Create the root organization (opentalent)
  76. $root = new Organization();
  77. $root->setName('Root');
  78. $root->setLegalStatus(LegalEnum::ASSOCIATION_LAW_1901);
  79. $root->setPrincipalType(PrincipalTypeEnum::NATIONAL_FEDERATION);
  80. $root->addContactPoint($contactPoint0);
  81. // subdomain fixtures
  82. $subdomain = new Subdomain();
  83. $subdomain->setOrganization($root);
  84. $subdomain->setSubdomain('subdomain');
  85. $subdomain->setActive(true);
  86. $parameters = new Parameters();
  87. $parameters->setFinancialDate(new \DateTime());
  88. $parameters->setMusicalDate(new \DateTime());
  89. $parameters->setStartCourseDate(new \DateTime());
  90. $parameters->setEndCourseDate(new \DateTime());
  91. $parameters->setAverage(20);
  92. $parameters->setEditCriteriaNotationByAdminOnly(true);
  93. $parameters->setSmsSenderName('MySender');
  94. $parameters->setLogoDonorsMove(false);
  95. $parameters->setSubDomain('subdomain');
  96. $parameters->setWebsite('https://www.example.com');
  97. $parameters->setOtherWebsite('https://www.otherwebsite.com');
  98. $parameters->setCustomDomain('https://www.customdomain.com');
  99. $parameters->setDesactivateOpentalentSiteWeb(false);
  100. $parameters->setBulletinPeriod(BulletinPeriodEnum::YEAR);
  101. $parameters->setBulletinWithTeacher(false);
  102. $parameters->setBulletinPrintAddress(false);
  103. $parameters->setBulletinSignatureDirector(true);
  104. $parameters->setBulletinDisplayLevelAcquired(true);
  105. $parameters->setBulletinShowEducationWithoutEvaluation(false);
  106. $parameters->setBulletinViewTestResults(false);
  107. $parameters->setBulletinShowAbsences(false);
  108. $parameters->setBulletinShowAverages(true);
  109. $parameters->setBulletinOutput(BulletinOutputEnum::SEND_BY_EMAIL);
  110. $parameters->setBulletinEditWithoutEvaluation(true);
  111. $parameters->setBulletinReceiver(SendToBulletinEnum::STUDENTS_AND_THEIR_GUARDIANS);
  112. $parameters->setBulletinCriteriaSort(BulletinCriteriaSortEnum::ALPHANUM);
  113. $parameters->setUsernameSMS('username');
  114. $parameters->setPasswordSMS('password');
  115. $parameters->setShowAdherentList(true);
  116. $parameters->setStudentsAreAdherents(false);
  117. $parameters->setTimezone(TimeZoneEnum::EUROPE_PARIS);
  118. $parameters->setEducationPeriodicity(PeriodicityEnum::MONTHLY);
  119. $parameters->setAdvancedEducationNotationType(AdvancedEducationNotationTypeEnum::BY_EDUCATION);
  120. $parameters->setSendAttendanceEmail(false);
  121. $parameters->setSendAttendanceSms(false);
  122. $parameters->setGenerateAttendanceReport(true);
  123. $parameters->setConsultPedagogicResult(true);
  124. $parameters->setConsultTeacherListing(true);
  125. $parameters->setPeriodValidation(true);
  126. $parameters->setNotifyAdministrationAbsence(false);
  127. $root->setParameters($parameters);
  128. // settings fixtures
  129. $settings = new Settings();
  130. $settings->setProduct(SettingsProductEnum::SCHOOL);
  131. $settings->setModules(['BillingAdministration']);
  132. $root->setSettings($settings);
  133. // create acesses with orga
  134. $access = new Access();
  135. $access->setOrganization($root);
  136. $access->setRoles(['ROLE_ADMIN', 'ROLE_ADMIN_CORE', 'ROLE_SUPER_ADMIN']);
  137. $teacherAccess = new Access();
  138. $teacherAccess->setOrganization($root);
  139. $teacherAccess->setRoles(['ROLE_TEACHER']);
  140. // create a person :
  141. $person = new Person();
  142. $person->addAccess($access);
  143. $person->setUsername('username');
  144. $person->setPassword('password');
  145. // create BillingSetting with an organization
  146. $billingSetting = new BillingSetting();
  147. $billingSetting->setOrganization($root);
  148. $em->persist($billingSetting);
  149. // résidence area
  150. $residenceArea = new ResidenceArea();
  151. $residenceArea->setLabel('label');
  152. $residenceArea->setBillingSetting($billingSetting);
  153. // create an AccessBilling with an access
  154. $accessBilling = new AccessBilling();
  155. $accessBilling->setAccess($access);
  156. $accessBilling->setResidenceArea($residenceArea);
  157. // Création de quelques cycles
  158. $cycle1 = new Cycle();
  159. $cycle1->setOrganization($root);
  160. $cycle1->setLabel('Cycle 1');
  161. $cycle1->setCycleEnum(CycleEnum::CYCLE_1);
  162. $cycle2 = new Cycle();
  163. $cycle2->setOrganization($root);
  164. $cycle2->setLabel('Cycle 2');
  165. $cycle2->setCycleEnum(CycleEnum::CYCLE_2);
  166. // Création de l'entité EducationCategory
  167. $educationCategory = new EducationCategory();
  168. $educationCategory->setOrganization($root);
  169. // Création de l'entité EducationComplement
  170. $educationComplement = new EducationComplement();
  171. // Création d'une Education
  172. $education = new Education();
  173. $education->setEducationCategory($educationCategory);
  174. $education->setEducationComplement($educationComplement);
  175. // Création d'un CycleByEducation
  176. $cycleByEducation = new CycleByEducation();
  177. $cycleByEducation->setCycle($cycle1);
  178. $cycleByEducation->setEducation($education);
  179. // Ajout de cycleByEducation à cycle et education
  180. $cycle1->addCycleByEducation($cycleByEducation);
  181. $education->addCycleByEducation($cycleByEducation);
  182. $educationCurriculum = new EducationCurriculum();
  183. $educationTimings = new EducationTiming();
  184. $educationTimings->setTiming(45);
  185. $educationTimings->setOrganization($root);
  186. $educationStudent = new EducationStudent();
  187. $educationTimings->addEducationStudent($educationStudent);
  188. $educationTimings->addEducationCurriculum($educationCurriculum);
  189. $educationCurriculum->setCycle($cycle1);
  190. // // education complément
  191. // $educationComplement = new EducationComplement();
  192. // $education = (new Education());
  193. // $educationCategory = new EducationCategory();
  194. // $educationCategory->setOrganization($root);
  195. // // $educationCurriculum = new EducationCurriculum();
  196. // // $education->setEducationComplement($educationComplement);
  197. // // $educationCategory->setOrganization($root);
  198. // // $educationCategory->addEducation($education);
  199. // $education->setEducationCategory($educationCategory);
  200. // $education->setEducationComplement($educationComplement);
  201. // $cycleByEducation = new CycleByEducation();
  202. // // Cycle
  203. // $cycle = new Cycle();
  204. // $cycle->setOrganization($root);
  205. // $cycle->setCycleEnum(CycleEnum::INITIATION_CYCLE);
  206. // $cycle->setIsSystem(false);
  207. // $cycle->setLabel('toto');
  208. // $cycle->setOrder(1);
  209. // // $cycleByEducation->setEducation();
  210. // $cycle->addCycleByEducation($cycleByEducation);
  211. // $cycle->setIsSystem(false);
  212. // $em->persist($cycle);
  213. // Booking
  214. $now = new \DateTime('now');
  215. $start = $now->add(new \DateInterval('P1M'));
  216. $end = $now->add(new \DateInterval('P1M1D'));
  217. $event = new Event();
  218. $event->setOrganization($root);
  219. $event->setName('My Event');
  220. $event->setDatetimeStart($start);
  221. $event->setDatetimeEnd($end);
  222. $event->setVisibility(VisibilityEnum::PUBLIC_VISIBILITY);
  223. $event->setUuid(Uuid::uuid());
  224. $em->persist($cycle1);
  225. $em->persist($cycle2);
  226. $em->persist($educationCategory);
  227. $em->persist($educationComplement);
  228. $em->persist($education);
  229. $em->persist($cycleByEducation);
  230. // $em->persist($educationComplement);
  231. // $em->persist($educationCurriculum);
  232. // $em->persist($educationCategory);
  233. // $em->persist($education);
  234. // $em->persist($cycleByEducation);
  235. $em->persist($root);
  236. $em->persist($event);
  237. $em->persist($person);
  238. $em->persist($access);
  239. $em->persist($accessBilling);
  240. $em->persist($billingSetting);
  241. $em->persist($residenceArea);
  242. $em->persist($subdomain);
  243. $em->persist($parameters);
  244. $em->flush();
  245. // A circular reference has been detected when serializing the object of
  246. // class \u0022App\\Entity\\Education\\CycleByEducation\u0022
  247. }
  248. }