attend.js 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. /**
  2. * ЭЛЕКТРОННЫЙ ЖУРНАЛ «ШКАЛА»: СТАТИСТИКА ЯВКИ ЗА ОДИН ДЕНЬ
  3. * Copyright © 2020, А.М.Гольдин. Modified BSD License
  4. */
  5. "use strict";
  6. // Справочник предметов
  7. let attSbList = {};
  8. // Получение статистики явки за один день с сервера
  9. // (в запросе передается только дата в формате d123)
  10. // Сервер возвращает несортированный объект вида
  11. // {"10Б": {"Иванов Василий": ["s430", "s210"], ...}}
  12. const attendGet = async () => {
  13. let dt = dateConv(dqs("#attDt").value);
  14. let apiResp = await apireq("attendGet", [dt]);
  15. if (apiResp == "none") {
  16. dqs("#attResult").innerHTML = "<p>Не удалось получить данные</p>";
  17. return;
  18. }
  19. let drRusArr = dqs("#attDt").value.split('-'),
  20. dtRus = `${drRusArr[2]}.${drRusArr[1]}`;
  21. dqs("#attResult").innerHTML =
  22. `<h3>Учащиеся, пропустившие уроки ${dtRus}</h3>`;
  23. let attObj = JSON.parse(apiResp);
  24. if (!Object.keys(attObj).length) {
  25. dqs("#attResult").innerHTML += "<p>Учащиеся не найдены</p>";
  26. return;
  27. }
  28. let inner = "<table>";
  29. let clSort = Object.keys(attObj)
  30. . sort((x,y) => x.padStart(3,'0') > y.padStart(3,'0'));
  31. for (let cl of clSort) {
  32. let pups = Object.keys(attObj[cl]).sort((x,y) => x.localeCompare(y,"ru"));
  33. for (let pup of pups) {
  34. let sb = attObj[cl][pup].map(x => attSbList[x]).join("<br>");
  35. inner += `<tr><td>${cl}</td><td>${pup}</td><td>${sb}</td></tr>`;
  36. }
  37. }
  38. inner += "</table>";
  39. dqs("#attResult").innerHTML += inner;
  40. }
  41. // Формирование контента страницы
  42. createSection("attend", `
  43. <input id="attDt" type="date"
  44. min="${regYst}" max="${regYfin}" value="${regNow}">
  45. <button type="button" onclick="attendGet()">Обновить данные</button>
  46. <div id="attResult"><img src='static/preloader.gif'></div>
  47. `);
  48. // Динамически подгружаем контент страницы (имя метода = имени пункта меню!)
  49. getContent.attend = async () => {
  50. // Загружаем справочник предметов
  51. let apiResp = await apireq("subjList");
  52. let subjListDop = JSON.parse(apiResp);
  53. attSbList = {...subjDef, ...subjListDop};
  54. attendGet();
  55. }