seed.php 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. #!/usr/bin/env php
  2. <?php
  3. // Загружает первоначальные данные в БД
  4. // Аргументы:
  5. // 1. Год поступления первого курса
  6. // 2. Путь к файлу .CSV, где хранятся id семестров avers
  7. // 3. Путь к файлу .CSV, где хранятся все работники техникума, которых нужно
  8. // добавить
  9. use BotKit\Common\Database;
  10. use BotKit\Entities;
  11. require __DIR__ . '/../src/bootstrap.php';
  12. $em = Database::getEM();
  13. $start_year = $argv[1];
  14. $avers_period_path = $argv[2];
  15. $employee_path = $argv[3];
  16. // --Специальности и группы--
  17. $spec_names = ["СП","ТО","ТМ","ИС","ЭЛ","ПК","ОС","МО","ЭМ","НС","СВ","ТП"];
  18. foreach ($spec_names as $spec_name) {
  19. // Для каждой специальности создаётся запись специальности и 4 курса
  20. $spec = new Entities\CollegeSpec();
  21. $spec->setName($spec_name);
  22. $em->persist($spec);
  23. for ($i = 1; $i < 5; $i++) {
  24. $group = new Entities\CollegeGroup();
  25. $group->setSpec($spec);
  26. $group->setEnrollmentYear($start_year + $i - 1);
  27. $em->persist($group);
  28. }
  29. }
  30. $em->flush();
  31. // --Аверс--
  32. $av_data = file($avers_period_path);
  33. for ($y = 1; $y < count($av_data); $y++) {
  34. $row = explode(",", $av_data[$y]);
  35. // --Определяем какая группа имеется ввиду в этой строке--
  36. // Специальность
  37. $target_spec = $em->getRepository(Entities\CollegeSpec::class)->findOneBy([
  38. 'name' => $row[1]
  39. ]);
  40. if ($target_spec === null) {
  41. // Не будем разбираться -- просто игнорируем
  42. continue;
  43. }
  44. $target_enrolled_at = $row[2]; // Когда зачислилась
  45. $target_group = $em->getRepository(Entities\CollegeGroup::class)->findOneBy([
  46. 'spec' => $target_spec,
  47. 'enrollment_year' => $target_enrolled_at
  48. ]);
  49. // --Определение номера семестра--
  50. // Если WEEK_NUM1 - 1, то это начало нового учебного года, в одном году
  51. // два семестра.
  52. // Тем самым, номер семестра = ...
  53. if ($row[5] == 1) {
  54. // ... COURSE_NUM * 2 - 1
  55. $ord_num = $row[4] * 2 - 1;
  56. } else {
  57. // ... COURSE_NUM * 2
  58. $ord_num = $row[4] * 2;
  59. }
  60. // --Создаём запись--
  61. $period = new Entities\Period();
  62. $period->setGroup($target_group);
  63. $period->setOrdNumber($ord_num);
  64. $period->setAversId(trim($row[7]));
  65. $em->persist($period);
  66. }
  67. $employee_data = file($employee_path);
  68. for ($y = 1; $y < count($employee_data); $y++) {
  69. $row = explode(",", $employee_data[$y]);
  70. $employee = new Entities\Employee();
  71. $employee->setSurname($row[0]);
  72. $employee->setName($row[1]);
  73. $employee->setPatronymic($row[2]);
  74. $em->persist($employee);
  75. }
  76. $em->flush();
  77. echo "Старт базы данных проведён успешно!";