From 5633f621a63f678376ebe8b95c10fd081cde6ad1 Mon Sep 17 00:00:00 2001 From: Anton Bagliy <taccessviolation@gmail.com> Date: Sat, 1 Dec 2018 18:04:10 +0300 Subject: [PATCH] FEAT: evening and part-time groups in group filters, db patch to work with FormID in study_groups #50 --- .../alter_study_groups_formid_17.11.18.sql | 35 +++++++++++++++++-- db/postgresql/tables_and_views.sql | 6 ---- media/js/optionLoader.js | 7 ++++ .../classes/Controller/Api/V0/Student.php | 4 +-- .../classes/Controller/Teacher/Index.php | 4 +-- .../application/classes/Model/Discipline.php | 8 +++++ .../views/teacher/discipline/journal.twig | 8 +++++ .../views/teacher/discipline/rating/exam.twig | 8 +++++ .../views/teacher/discipline/rating/rate.twig | 7 ++++ 9 files changed, 74 insertions(+), 13 deletions(-) diff --git a/db/postgresql/alter_study_groups_formid_17.11.18.sql b/db/postgresql/alter_study_groups_formid_17.11.18.sql index a37f8873c..34f637969 100644 --- a/db/postgresql/alter_study_groups_formid_17.11.18.sql +++ b/db/postgresql/alter_study_groups_formid_17.11.18.sql @@ -4,10 +4,15 @@ ALTER TABLE public.study_groups ALTER COLUMN formid SET NOT NULL; ALTER TABLE public.study_groups ALTER COLUMN formid SET DEFAULT 1; ALTER TABLE public.study_groups DROP CONSTRAINT study_groups_facultyid_gradeid_groupnum_key; -ALTER TABLE ONLY study_groups +ALTER TABLE ONLY public.study_groups ADD CONSTRAINT study_groups_facultyid_gradeid_groupnum_formid_key UNIQUE (facultyid, gradeid, groupnum, formid); -ALTER TABLE ONLY study_groups +INSERT INTO public.study_form(id, formname) VALUES + (1, 'очная'), + (2, 'очно-заочная'), + (3, 'заочная'); + +ALTER TABLE ONLY public.study_groups ADD CONSTRAINT study_groups_ibfk_4 FOREIGN KEY (formid) REFERENCES study_form(id); DROP FUNCTION IF EXISTS public.creategroup(pgradeid integer, pgroupnum integer, pspecname character varying, pfacultyid integer, pyear integer); @@ -134,4 +139,28 @@ CREATE OR REPLACE VIEW public.view_groups JOIN study_groups ON groups_years.groupid = study_groups.id JOIN specializations ON groups_years.specializationid = specializations.id JOIN grades ON study_groups.gradeid = grades.id - JOIN faculties ON faculties.id = specializations.facultyid; \ No newline at end of file + JOIN faculties ON faculties.id = specializations.facultyid; + +DROP FUNCTION IF EXISTS public.getgroups(pgradeid integer, pfacultyid integer, psemesterid integer); +CREATE OR REPLACE FUNCTION public.getgroups(pgradeid integer, pfacultyid integer, psemesterid integer) + RETURNS TABLE("ID" integer, "GroupNum" integer, "SpecID" integer, "SpecName" character varying, "SpecAbbr" character varying, "FormID" character varying) +LANGUAGE sql +AS $function$ +--select * from public.getgroups( +-- :pgradeid, -- put the pgradeid parameter value instead of 'pgradeid' (int4) +-- :pfacultyid, -- put the pfacultyid parameter value instead of 'pfacultyid' (int4) +-- :psemesterid -- put the psemesterid parameter value instead of 'psemesterid' (int4) +--); +SELECT view_groups.GroupID AS "ID", + view_groups.GroupNum as "GroupNum", + view_groups.SpecID as "SpecID", + view_groups.SpecName as "SpecName", + view_groups.SpecAbbr as "SpecAbbr", + (SELECT study_form.FormName from study_form WHERE study_form.id = view_groups.FormID) +FROM view_groups + INNER JOIN semesters ON semesters.ID = pSemesterID +WHERE view_groups.GradeID = pGradeID AND + view_groups.FacultyID = pFacultyID AND + view_groups.Year = semesters.Year +ORDER BY view_groups.GroupNum ASC; +$function$ \ No newline at end of file diff --git a/db/postgresql/tables_and_views.sql b/db/postgresql/tables_and_views.sql index 84242288f..f074ec213 100644 --- a/db/postgresql/tables_and_views.sql +++ b/db/postgresql/tables_and_views.sql @@ -1295,9 +1295,3 @@ INSERT INTO lesson_types(id, lesson_type) values (2, 'лабораторная'), (3, 'семинар'), (4, 'практикум'); - -INSERT INTO public.study_form(id, formname) VALUES -(1, 'очная'), -(2, 'очно-заочная'), -(3, 'заочная'); - diff --git a/media/js/optionLoader.js b/media/js/optionLoader.js index b7bcb5c3a..8174ccce1 100644 --- a/media/js/optionLoader.js +++ b/media/js/optionLoader.js @@ -85,6 +85,13 @@ class OptionLoader { */ let getGroupOption = (data) => { let str = `группа ${data.GroupNum}`; + if (data.FormID === 'заочная') { + str = str+' ЗО'; + } + if (data.FormID === 'очно-заочная') { + str = str+' ВО'; + } + if (data.SpecName) { str += " - "; str += data.SpecName; diff --git a/~dev_rating/application/classes/Controller/Api/V0/Student.php b/~dev_rating/application/classes/Controller/Api/V0/Student.php index 8daa5c96b..019848d6f 100644 --- a/~dev_rating/application/classes/Controller/Api/V0/Student.php +++ b/~dev_rating/application/classes/Controller/Api/V0/Student.php @@ -147,11 +147,11 @@ class Controller_Api_V0_Student extends Controller_Handler_Api { break; case 'Очно-заочная': - $recordBookData->form = 3; + $recordBookData->form = 2; break; case 'Заочная': - $recordBookData->form = 2; + $recordBookData->form = 3; break; default: diff --git a/~dev_rating/application/classes/Controller/Teacher/Index.php b/~dev_rating/application/classes/Controller/Teacher/Index.php index 2f513f09b..5bf3647c2 100644 --- a/~dev_rating/application/classes/Controller/Teacher/Index.php +++ b/~dev_rating/application/classes/Controller/Teacher/Index.php @@ -43,10 +43,10 @@ class Controller_Teacher_Index extends Controller_Environment_Teacher if ($dis_group['FormID'] === 'очно-заочная') { $groupDesc = $groupDesc.' ВО'; } - if ($dis_group['FormID'] === 'зачная') { + if ($dis_group['FormID'] === 'заочная') { $groupDesc = $groupDesc.' ЗО'; } - $groups[$dis->ID][] = $dis_group['GroupNum'] . ' гр'; + $groups[$dis->ID][] = $dis_group['GroupNum'] . $groupDesc; } } diff --git a/~dev_rating/application/classes/Model/Discipline.php b/~dev_rating/application/classes/Model/Discipline.php index 72c155974..0d61cb4fb 100644 --- a/~dev_rating/application/classes/Model/Discipline.php +++ b/~dev_rating/application/classes/Model/Discipline.php @@ -104,6 +104,14 @@ class Model_Discipline extends Model_Container /** Get groups with separately attached students. */ public function getAllGroups() { + // http://gitlab.mmcs.sfedu.ru/it-lab/grade/issues/50 + // для получения списка групп для всех дисциплин на странице преподавателя + // нужно сделать несколько запросов к GetGroupsForDisciplineAll + // за одно подключение к базе данных + // но тогда функция возвращает один и тот же ответ + // поэтому каждый раз подключаемся заново + $db = Kohana_Database::instance(); + $db->disconnect(); $sql = 'SELECT * FROM GetGroupsForDisciplineAll(:id)'; return DB::query(Database::SELECT, $sql)->param(':id', $this->ID)->execute(); } diff --git a/~dev_rating/application/views/teacher/discipline/journal.twig b/~dev_rating/application/views/teacher/discipline/journal.twig index ce536ff4b..aa1c15425 100644 --- a/~dev_rating/application/views/teacher/discipline/journal.twig +++ b/~dev_rating/application/views/teacher/discipline/journal.twig @@ -102,6 +102,14 @@ {% endif %} {{ Group.GroupNum }} группа + + {% if Group.FormID == 'очно-заочная' %} + ВО + {% endif %} + + {% if Group.FormID == 'заочная' %} + ЗО + {% endif %} </option> {% endfor %} </select> diff --git a/~dev_rating/application/views/teacher/discipline/rating/exam.twig b/~dev_rating/application/views/teacher/discipline/rating/exam.twig index ad5808575..33cb4d87b 100644 --- a/~dev_rating/application/views/teacher/discipline/rating/exam.twig +++ b/~dev_rating/application/views/teacher/discipline/rating/exam.twig @@ -67,6 +67,14 @@ {% endif %} {{ Group.GroupNum }} группа + + {% if Group.FormID == 'очно-заочная' %} + ВО + {% endif %} + + {% if Group.FormID == 'заочная' %} + ЗО + {% endif %} </option> {% endfor %} </select> diff --git a/~dev_rating/application/views/teacher/discipline/rating/rate.twig b/~dev_rating/application/views/teacher/discipline/rating/rate.twig index 32fb0017b..5085c6d9a 100644 --- a/~dev_rating/application/views/teacher/discipline/rating/rate.twig +++ b/~dev_rating/application/views/teacher/discipline/rating/rate.twig @@ -59,6 +59,13 @@ {% endif %} {{ Group.GroupNum }} группа + {% if Group.FormID == 'очно-заочная' %} + ВО + {% endif %} + + {% if Group.FormID == 'заочная' %} + ЗО + {% endif %} </option> {% endfor %} </select> -- GitLab