Автор скрипта @OlegROA

Дисклеймер публикации

Я не против. Но не обещаю их поддерживать из-за недостатка свободного времени. На правах "as is".OlegROA

Не забывайте читать комментарии внутри скрипта!

Сам скрипт: js-код для получения расписания ДО учителя (2025-26 учебныый год)

Получение расписания занятий ДО конкретного учителя на заданную неделю

1. Заходите в справочник кадров и открываете карточку нужного учителя.
2. Кликаете мышкой в адресную строку браузера и сохраняете число в конце адреса — это ид учителя.
3. Заходите в старую админку, на любую страницу.
4. Открываете в браузере панель инструментов разработчика.
5. Переходите на закладку Консоль
6. Открываете файл со скриптом и копируете все его содержимое в окно консоли (в ФайрФоксе возможно придется подтвердить вставку кода ручным вводом указанной фразы).
7. Проверяете начальные параметры — код учебного года, номер недели и указываете записанный на шаге 2 ид учителя.
8. Жмете Enter и получаете здесь же, в консоли, расписание указанного учителя на заданной неделе. Сортировка по дням недели, в рамках одного дня — по времени начала занятия.

// =============================================================================
// Основные параметры
// !!! Менять код можно ТОЛЬКО в этом блоке !!!
//     вместо числа 20 - нужный номер недели
//     вместо числа 12345 - нужный Ид учителя
var week_num = 20; // Номер недели
var th_id = 12345; // Ид учителя (см. пункт 2 выше)
// =============================================================================

var year_id = 13; // Идентификатор учебного года (2025-2026)

var th_sch = new Map();

(async () => {
  async function fetchData(url) {
    const res = await fetch(url);
    const json = await res.json();
    return(json);
  };

  // Получаем ид недельного расписания ДО на заданную неделю
  const wsch = (await fetchData("core/api/ae_schedules?academic_year_id="+ year_id))
               .filter(function(sch){return sch.week_number == week_num});
  if (!wsch || !wsch.length || !wsch[0].id){
     throw new Error("Указан некорректный номер учебной недели!");
  };
  let sch_id = wsch[0].id;

  // Получаем программы ДО, которые ведет заданный учитель
  const prg = await fetchData("core/api/ae_programs?page=1&per_page=100&teacher_profile_id="+ th_id);
  if (!prg || !prg.length){
     throw new Error("Заданный учитель не ведет программы ДО!");
  };

  // Формируем очередь запросов для получения расписания ДО по найденным программам
  for (p of prg){
    sch = await fetchData("core/api/ae_schedule_items?ae_schedule_id="+ sch_id +
                          "&page=1&per_page=1000&ae_program_id="+ p.id);
    sch.forEach(function(ls){
      let day = (new Date(ls.date)).getDay();
      let key = day +"-"+ ls.begin_time;
      th_sch.set(key,
                 {"day":day,"ftime":ls.begin_time,"ltime":ls.end_time,
                  "prg":ls.ae_program_name,"grp":ls.ae_group_name}
                );
    });
  };

  if (!th_sch.size){
     throw new Error("У заданного учителя нет занятий ДО на заданной неделе!");
  };
  
  th_sch = new Map([...th_sch.entries()].sort());

  [...th_sch.values()].forEach(function(ls){
    console.log(["Воскресенье", "Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота"][ls.day] +
                " ("+ ls.ftime +" - "+ ls.ltime +"): "+ ls.prg +"; "+ ls.grp);
  });

})()

 


Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *