seed.php 3.2 KB

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