Skip to content
Snippets Groups Projects
Commit f9a4810b authored by Anton Bagliy's avatar Anton Bagliy
Browse files

ADD: display global disciplines in bill with links for each student #547

parent 2e1b25e8
No related branches found
No related tags found
No related merge requests found
DROP FUNCTION IF EXISTS public.getdisciplinesforgroup(pgroupid integer, psemesterid integer, pshowhidden boolean); DROP FUNCTION IF EXISTS public.getdisciplinesforgroup(pgroupid integer, psemesterid integer, pshowhidden boolean);
DROP FUNCTION IF EXISTS public.getdisciplinesforgroup(pgroupid integer, psemesterid integer, pshowglobal boolean, pshowhidden boolean); DROP FUNCTION IF EXISTS public.getdisciplinesforgroup(pgroupid integer, psemesterid integer, pshowglobal boolean, pshowhidden boolean);
CREATE OR REPLACE FUNCTION public.getdisciplinesforgroup(pgroupid integer, psemesterid integer, pshowglobal boolean DEFAULT false, pshowhidden boolean DEFAULT false) CREATE OR REPLACE FUNCTION public.getdisciplinesforgroup(pgroupid integer, psemesterid integer, pshowglobal boolean DEFAULT false, pshowhidden boolean DEFAULT false)
RETURNS TABLE("ID" integer, "SubjectID" integer, "SubjectName" character varying, "Subtype" scientific_disciplinary_coursework, "Type" exam_credit_grading_credit, "CompoundDiscID" integer, "CompoundDiscName" character varying, "CurRate" integer, "MaxRate" integer, "IsGlobal" boolean) RETURNS TABLE("ID" integer, "SubjectID" integer, "SubjectName" character varying, "Subtype" scientific_disciplinary_coursework, "Type" exam_credit_grading_credit, "CompoundDiscID" integer, "CompoundDiscName" character varying, "CurRate" integer, "MaxRate" integer, "IsGlobal" boolean, "GlobalName" character varying)
LANGUAGE plpgsql LANGUAGE plpgsql
AS $function$ AS $function$
BEGIN BEGIN
...@@ -15,10 +15,12 @@ BEGIN ...@@ -15,10 +15,12 @@ BEGIN
view_disciplines.CompoundDiscName as "CompoundDiscName", view_disciplines.CompoundDiscName as "CompoundDiscName",
view_disciplines.CurRate as "CurRate", view_disciplines.CurRate as "CurRate",
view_disciplines.MaxRate as "MaxRate", view_disciplines.MaxRate as "MaxRate",
view_disciplines.isGlobal as "IsGlobal" view_disciplines.isGlobal as "IsGlobal",
global_disciplines.name as "GlobalName"
FROM students_groups FROM students_groups
LEFT JOIN view_disciplines_recordbooks ON students_groups.RecordBookID = view_disciplines_recordbooks.RecordBookID LEFT JOIN view_disciplines_recordbooks ON students_groups.RecordBookID = view_disciplines_recordbooks.RecordBookID
INNER JOIN view_disciplines ON view_disciplines_recordbooks.DisciplineID = view_disciplines.DisciplineID INNER JOIN view_disciplines ON view_disciplines_recordbooks.DisciplineID = view_disciplines.DisciplineID
LEFT JOIN global_disciplines ON view_disciplines.DisciplineID = global_disciplines.disciplineid
WHERE students_groups.GroupID = pGroupID AND WHERE students_groups.GroupID = pGroupID AND
students_groups.SemesterID = pSemesterID AND students_groups.SemesterID = pSemesterID AND
view_disciplines.SemesterID = pSemesterID AND view_disciplines.SemesterID = pSemesterID AND
......
...@@ -63,28 +63,28 @@ class Controller_Office_Bill extends Controller_Environment_Office ...@@ -63,28 +63,28 @@ class Controller_Office_Bill extends Controller_Environment_Office
protected static function processGlobal($disciplines, $students, $rates) { protected static function processGlobal($disciplines, $students, $rates) {
$res = []; $res = [];
$subjects = []; $subjectsToGlobals = [];
$globals = []; $disciplinesToGlobals = [];
$num = 1; $nextGlobalNum = 1;
foreach ($disciplines as $disc) { foreach ($disciplines as $disc) {
if ($disc['IsGlobal']) { if ($disc['IsGlobal']) {
$subj = $disc['SubjectID']; $subj = $disc['SubjectID'];
if (array_key_exists($subj, $subjects)) { if (array_key_exists($subj, $subjectsToGlobals)) {
$globals[$disc['ID']] = $num - 1; $disciplinesToGlobals[$disc['ID']] = $nextGlobalNum - 1;
} else { } else {
$subjects[$subj] = $num; $subjectsToGlobals[$subj] = $nextGlobalNum;
$globals[$disc['ID']] = $num; $disciplinesToGlobals[$disc['ID']] = $nextGlobalNum;
$newD = [ $newGlobalDiscipline = [
'ID' => $num, 'ID' => $nextGlobalNum,
'SubjectName' => $disc["SubjectName"], 'SubjectName' => $disc["SubjectName"],
]; ];
$res[$num] = $newD; $res[$nextGlobalNum] = $newGlobalDiscipline;
$num++; $nextGlobalNum++;
} }
foreach($students as $student) { foreach($students as $student) {
$rate = $rates[$student['ID']][$disc['ID']]; $rate = $rates[$student['ID']][$disc['ID']];
if ($rate) { if ($rate) {
$res[$globals[$disc['ID']]][$student['ID']] = $disc['ID']; $res[$disciplinesToGlobals[$disc['ID']]][$student['ID']] = $disc['ID'];
} }
} }
} }
...@@ -106,7 +106,7 @@ class Controller_Office_Bill extends Controller_Environment_Office ...@@ -106,7 +106,7 @@ class Controller_Office_Bill extends Controller_Environment_Office
$rates = Model_Rating::getRatesForGroupAll($groupID, $semesterID); $rates = Model_Rating::getRatesForGroupAll($groupID, $semesterID);
$ratesMap = self::getRateMap($rates, $disciplines); $ratesMap = self::getRateMap($rates, $disciplines);
$globalDisciplines = self::processGlobal($disciplines, $students, $rates); $globalDisciplines = self::processGlobal($disciplines, $students, $ratesMap);
$this->twig->set_filename(static::OFFICE . 'bill') $this->twig->set_filename(static::OFFICE . 'bill')
->set([ ->set([
......
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
</td> </td>
{% endfor %} {% endfor %}
{% for dis in Disciplines %} {% for dis in Disciplines %}
{% if not dis.IsGlobal %}
<td class="title"> <td class="title">
{% if dis.CompoundDiscID %} {% if dis.CompoundDiscID %}
{{ HTML.anchor('/compound_disciplines/' ~ dis.CompoundDiscID, {{ HTML.anchor('/compound_disciplines/' ~ dis.CompoundDiscID,
...@@ -16,6 +17,7 @@ ...@@ -16,6 +17,7 @@
{{ HTML.anchor('/discipline/' ~ dis.ID ~ '/rate', dis.SubjectName, {'title': dis.SubjectName })|raw }} {{ HTML.anchor('/discipline/' ~ dis.ID ~ '/rate', dis.SubjectName, {'title': dis.SubjectName })|raw }}
{% endif %} {% endif %}
</td> </td>
{% endif %}
{% endfor %} {% endfor %}
</tr> </tr>
...@@ -27,12 +29,22 @@ ...@@ -27,12 +29,22 @@
{% set id = GlobalDisciplines[disc.ID][stud.ID] %} {% set id = GlobalDisciplines[disc.ID][stud.ID] %}
{% set rate = Rates[stud.ID][id] %} {% set rate = Rates[stud.ID][id] %}
{% if rate %} {% if rate %}
<td class="{{ typeClasses[rate.Type] }}">{{ rate.rating }}</td> <td>
{{ HTML.anchor('/discipline/' ~ id ~ '/rate',
'<div class = ' ~ typeClasses[rate.Type] ~ '>' ~ rate.rating ~ '</div>',
{
'title': Disciplines[id].GlobalName,
'target': '_blank'
})|raw }}
</td>
{% else %} {% else %}
<td class="absent_rate"> -</td> <td class="absent_rate">
-
</td>
{% endif %} {% endif %}
{% endfor %} {% endfor %}
{% for disc in Disciplines %} {% for disc in Disciplines %}
{% if not disc.IsGlobal %}
{% set id = -disc.CompoundDiscID ?: disc.ID %} {% set id = -disc.CompoundDiscID ?: disc.ID %}
{% set rate = Rates[stud.ID][id] %} {% set rate = Rates[stud.ID][id] %}
...@@ -41,6 +53,7 @@ ...@@ -41,6 +53,7 @@
{% else %} {% else %}
<td class="absent_rate"> -</td> <td class="absent_rate"> -</td>
{% endif %} {% endif %}
{% endif %}
{% endfor %} {% endfor %}
</tr> </tr>
{% endfor %} {% endfor %}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment