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

FIX: final report required parameters for 1C SOAP, discipline exam type #284

parent d8f55bf3
Branches
No related merge requests found
...@@ -14,9 +14,10 @@ BEGIN ...@@ -14,9 +14,10 @@ BEGIN
END END
$function$; $function$;
DROP FUNCTION IF EXISTS public.finalreport_getbysemesteryearplan(pyear integer, pnum integer, pplanexternalid integer);
CREATE OR REPLACE FUNCTION public.finalreport_getbysemesteryearplan(pyear integer, pnum integer, pplanexternalid integer) CREATE OR REPLACE FUNCTION public.finalreport_getbysemesteryearplan(pyear integer, pnum integer, pplanexternalid integer)
RETURNS TABLE("SemesterYear" integer, "SemesterNum" integer, "PlanExternalID" integer, RETURNS TABLE("SemesterYear" integer, "SemesterNum" integer, "PlanExternalID" integer,
"SubjectExternalID" character varying, "RecordBookExternalID" character varying, "SubjectExternalID" character varying, "RecordBookExternalID" character varying, "ExamType" exam_credit_grading_credit,
"SemesterRate" bigint, "ExamRate" integer, "Exam2Rate" integer, "Exam3Rate" integer, "SemesterRate" bigint, "ExamRate" integer, "Exam2Rate" integer, "Exam3Rate" integer,
"ExtraRate" integer, "Extra2Rate" integer) "ExtraRate" integer, "Extra2Rate" integer)
LANGUAGE plpgsql LANGUAGE plpgsql
...@@ -31,9 +32,10 @@ BEGIN ...@@ -31,9 +32,10 @@ BEGIN
END END
$function$; $function$;
DROP FUNCTION IF EXISTS public.finalreport_getbysemesteryeardiscipline(pyear integer, pnum integer, pdisciplineexternalid character varying);
CREATE OR REPLACE FUNCTION public.finalreport_getbysemesteryeardiscipline(pyear integer, pnum integer, pdisciplineexternalid character varying) CREATE OR REPLACE FUNCTION public.finalreport_getbysemesteryeardiscipline(pyear integer, pnum integer, pdisciplineexternalid character varying)
RETURNS TABLE("SemesterYear" integer, "SemesterNum" integer, "PlanExternalID" integer, RETURNS TABLE("SemesterYear" integer, "SemesterNum" integer, "PlanExternalID" integer,
"SubjectExternalID" character varying, "RecordBookExternalID" character varying, "SubjectExternalID" character varying, "RecordBookExternalID" character varying, "ExamType" exam_credit_grading_credit,
"SemesterRate" bigint, "ExamRate" integer, "Exam2Rate" integer, "Exam3Rate" integer, "SemesterRate" bigint, "ExamRate" integer, "Exam2Rate" integer, "Exam3Rate" integer,
"ExtraRate" integer, "Extra2Rate" integer) "ExtraRate" integer, "Extra2Rate" integer)
LANGUAGE plpgsql LANGUAGE plpgsql
...@@ -48,78 +50,62 @@ BEGIN ...@@ -48,78 +50,62 @@ BEGIN
END END
$function$; $function$;
CREATE OR REPLACE VIEW view_final_report AS drop view if exists public.view_final_report;
SELECT DISTINCT CREATE OR REPLACE VIEW public.view_final_report
semesters.Year AS SemesterYear, AS SELECT DISTINCT semesters.year AS semesteryear,
semesters.Num AS SemesterNum, semesters.num AS semesternum,
study_plans.ExternalID AS PlanExternalID, study_plans.externalid AS planexternalid,
subjects.ExternalID AS SubjectExternalID, subjects.externalid AS subjectexternalid,
record_books.ExternalID AS RecordBookExternalID, record_books.externalid AS recordbookexternalid,
( disciplines.examtype as examtype,
SELECT SUM(rating_table.Rate) ( SELECT sum(rating_table.rate) AS sum
FROM rating_table FROM rating_table
INNER JOIN submodules ON rating_table.SubmoduleID = submodules.ID JOIN submodules ON rating_table.submoduleid = submodules.id
INNER JOIN modules ON submodules.ModuleID = modules.ID JOIN modules ON submodules.moduleid = modules.id
WHERE modules.DisciplineID = disciplines.ID AND WHERE modules.disciplineid = disciplines.id AND modules.type = 'regular'::regular_exam_bonus_extra AND rating_table.recordbookid = record_books.id
modules.Type = 'regular' AND GROUP BY modules.disciplineid, rating_table.recordbookid) AS semesterrate,
rating_table.RecordBookID = record_books.ID ( SELECT rating_table.rate
GROUP BY modules.DisciplineID, rating_table.RecordBookID FROM rating_table
) AS SemesterRate, JOIN submodules ON rating_table.submoduleid = submodules.id
( JOIN modules ON submodules.moduleid = modules.id
SELECT rating_table.Rate WHERE modules.disciplineid = disciplines.id AND modules.type = 'exam'::regular_exam_bonus_extra AND rating_table.recordbookid = record_books.id
FROM rating_table LIMIT 1) AS examrate,
INNER JOIN submodules ON rating_table.SubmoduleID = submodules.ID ( SELECT rating_table.rate
INNER JOIN modules ON submodules.ModuleID = modules.ID FROM rating_table
WHERE modules.DisciplineID = disciplines.ID AND JOIN submodules ON rating_table.submoduleid = submodules.id
modules.Type = 'exam' AND JOIN modules ON submodules.moduleid = modules.id
rating_table.RecordBookID = record_books.ID WHERE modules.disciplineid = disciplines.id AND modules.type = 'exam'::regular_exam_bonus_extra AND rating_table.recordbookid = record_books.id
LIMIT 1 OFFSET 1
) AS ExamRate, LIMIT 1) AS exam2rate,
( ( SELECT rating_table.rate
SELECT rating_table.Rate FROM rating_table
FROM rating_table JOIN submodules ON rating_table.submoduleid = submodules.id
INNER JOIN submodules ON rating_table.SubmoduleID = submodules.ID JOIN modules ON submodules.moduleid = modules.id
INNER JOIN modules ON submodules.ModuleID = modules.ID WHERE modules.disciplineid = disciplines.id AND modules.type = 'exam'::regular_exam_bonus_extra AND rating_table.recordbookid = record_books.id
WHERE modules.DisciplineID = disciplines.ID AND OFFSET 2
modules.Type = 'exam' AND LIMIT 1) AS exam3rate,
rating_table.RecordBookID = record_books.ID ( SELECT rating_table.rate
LIMIT 1 OFFSET 1 FROM rating_table
) AS Exam2Rate, JOIN submodules ON rating_table.submoduleid = submodules.id
( JOIN modules ON submodules.moduleid = modules.id
SELECT rating_table.Rate WHERE modules.disciplineid = disciplines.id AND modules.type = 'extra'::regular_exam_bonus_extra AND rating_table.recordbookid = record_books.id
FROM rating_table LIMIT 1) AS extrarate,
INNER JOIN submodules ON rating_table.SubmoduleID = submodules.ID ( SELECT rating_table.rate
INNER JOIN modules ON submodules.ModuleID = modules.ID FROM rating_table
WHERE modules.DisciplineID = disciplines.ID AND JOIN submodules ON rating_table.submoduleid = submodules.id
modules.Type = 'exam' AND JOIN modules ON submodules.moduleid = modules.id
rating_table.RecordBookID = record_books.ID WHERE modules.disciplineid = disciplines.id AND modules.type = 'extra'::regular_exam_bonus_extra AND rating_table.recordbookid = record_books.id
LIMIT 1 OFFSET 2 OFFSET 1
) AS Exam3Rate, LIMIT 1) AS extra2rate
( FROM semesters
SELECT rating_table.Rate JOIN disciplines ON disciplines.semesterid = semesters.id
FROM rating_table JOIN disciplines_study_plans ON disciplines_study_plans.disciplineid = disciplines.id
INNER JOIN submodules ON rating_table.SubmoduleID = submodules.ID JOIN study_plans ON study_plans.id = disciplines_study_plans.studyplanid
INNER JOIN modules ON submodules.ModuleID = modules.ID JOIN subjects ON subjects.id = disciplines.subjectid
WHERE modules.DisciplineID = disciplines.ID AND JOIN view_disciplines_recordbooks ON view_disciplines_recordbooks.disciplineid = disciplines.id AND 'attach'::attach_detach = COALESCE(view_disciplines_recordbooks.type, 'attach'::attach_detach)
modules.Type = 'extra' AND JOIN record_books ON record_books.id = view_disciplines_recordbooks.recordbookid;
rating_table.RecordBookID = record_books.ID
LIMIT 1 -- Permissions
) AS ExtraRate,
( ALTER TABLE public.view_final_report OWNER TO postgres;
SELECT rating_table.Rate GRANT ALL ON TABLE public.view_final_report TO postgres;
FROM rating_table
INNER JOIN submodules ON rating_table.SubmoduleID = submodules.ID
INNER JOIN modules ON submodules.ModuleID = modules.ID
WHERE modules.DisciplineID = disciplines.ID AND
modules.Type = 'extra' AND
rating_table.RecordBookID = record_books.ID
LIMIT 1 OFFSET 1
) AS Extra2Rate
FROM semesters
INNER JOIN disciplines ON disciplines.SemesterID = semesters.ID
INNER JOIN disciplines_study_plans ON disciplines_study_plans.DisciplineID = disciplines.ID
INNER JOIN study_plans ON study_plans.ID = disciplines_study_plans.StudyPlanID
INNER JOIN subjects ON subjects.ID = disciplines.SubjectID
INNER JOIN view_disciplines_recordbooks ON view_disciplines_recordbooks.DisciplineID = disciplines.ID AND
'attach' = coalesce(view_disciplines_recordbooks.Type, 'attach')
INNER JOIN record_books ON record_books.ID = view_disciplines_recordbooks.RecordBookID;
\ No newline at end of file
...@@ -20,7 +20,8 @@ class Controller_Api_V0_FinalReport extends Controller_Handler_Api { ...@@ -20,7 +20,8 @@ class Controller_Api_V0_FinalReport extends Controller_Handler_Api {
$response = []; $response = [];
/** @var Model_FinalReportItem $row */ /** @var Model_FinalReportItem $row */
foreach ($finalReport as $row) { foreach ($finalReport as $row) {
$response[$row->PlanExternalID][$row->SubjectExternalID][$row->RecordBookExternalID] = [ $response[$row->PlanExternalID][$row->SubjectExternalID]['type'] = $row->ExamType;
$response[$row->PlanExternalID][$row->SubjectExternalID]['students'][$row->RecordBookExternalID] = [
'semester' => $row->SemesterRate, 'semester' => $row->SemesterRate,
'exam' => [$row->ExamRate, $row->Exam2Rate, $row->Exam3Rate], 'exam' => [$row->ExamRate, $row->Exam2Rate, $row->Exam3Rate],
'extra' => [$row->ExtraRate, $row->Extra2Rate], 'extra' => [$row->ExtraRate, $row->Extra2Rate],
......
...@@ -23,6 +23,7 @@ class Model_FinalReportItem extends Model ...@@ -23,6 +23,7 @@ class Model_FinalReportItem extends Model
$this->PlanExternalID = str_pad($row['PlanExternalID'], 9, '0', STR_PAD_LEFT); $this->PlanExternalID = str_pad($row['PlanExternalID'], 9, '0', STR_PAD_LEFT);
$this->SubjectExternalID = $row['SubjectExternalID']; $this->SubjectExternalID = $row['SubjectExternalID'];
$this->RecordBookExternalID = $row['RecordBookExternalID']; $this->RecordBookExternalID = $row['RecordBookExternalID'];
$this->ExamType = $row['ExamType'];
$this->SemesterRate = isset($row['SemesterRate']) ? (int)$row['SemesterRate'] : null; $this->SemesterRate = isset($row['SemesterRate']) ? (int)$row['SemesterRate'] : null;
$this->ExamRate = isset($row['ExamRate']) ? (int)$row['ExamRate'] : null; $this->ExamRate = isset($row['ExamRate']) ? (int)$row['ExamRate'] : null;
$this->Exam2Rate = isset($row['Exam2Rate']) ? (int)$row['Exam2Rate'] : null; $this->Exam2Rate = isset($row['Exam2Rate']) ? (int)$row['Exam2Rate'] : null;
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment