Skip to content
Snippets Groups Projects
Select Git revision
  • a563e437e6cefa68c56546f4bf29f079752419a6
  • develop default
  • master
  • issue609_stub_nolink
  • hotfix/v2.9.3
  • issue608_journal_tristate
  • hotfix/v2.9.2
  • issue606_global_woes
  • issue299_add_subgroups
  • issue592_student_movement
  • issue606_globaldiscipline_bind
  • issue595_discipline_info
  • issue574_dash_norates
  • issue591_warn_global1c
  • issue593_1cexport_semester
  • issue327_admin_auth
  • issue590_issue_subject
  • issue589_tab_numbers
  • issue583_logaccount_formexport
  • issue584_block_formexport
  • issue527_exam_detached
  • v2.1.5
  • v2.0.3
  • v2.0.2
  • v2.0.1
  • v2.0.0
  • v1.1.2
  • v1.1.1
  • v1.1.0
  • v0.9.3
  • v0.9.1
  • v0.9.2
  • v1.03
  • v1.02
  • v1.01
  • v1.0
36 results

temp_tables.sql

Blame
  • Forked from it-lab / grade
    Source project has a limited visibility.
    temp_tables.sql 15.10 KiB
    CREATE OR REPLACE FUNCTION public.getgroupsfordisciplineall(pdisciplineid integer)
     RETURNS TABLE("ID" integer, "GroupNum" integer, "GradeID" integer, "GradeNum" integer, "Degree" bachelor_master_specialist, "SpecID" integer, "SpecName" character varying, "SpecAbbr" character varying)
     LANGUAGE plpgsql
    AS $function$
    
        DECLARE vSemesterID INT DEFAULT -1; vYear INT DEFAULT -1;
    BEGIN
        vSemesterID := GetDisciplineProperty(pDisciplineID, 'semester');
         SELECT "year"  into vYear from semesters where semesters.ID = vSemesterID;
    
        -- general + attached
    /*    drop table if exists tGroup; -- этого не было
       CREATE TEMPORARY TABLE IF NOT EXISTS tGroup AS (
            SELECT students_groups.GroupID
            FROM view_disciplines_recordbooks
            INNER JOIN students_groups ON students_groups.RecordBookID = view_disciplines_recordbooks.RecordBookID AND
                                          students_groups.SemesterID = vSemesterID AND
                                          students_groups.State <= 'outlet'
            WHERE view_disciplines_recordbooks.DisciplineID = pDisciplineID AND
                  'attach' = COALESCE(view_disciplines_recordbooks.Type, 'attach')
            GROUP BY students_groups.GroupID
        );
    */
        return query
        SELECT  view_groups.GroupID AS "ID",
                view_groups.GroupNum as "GroupNum",
                view_groups.GradeID	as "GradeID",
                view_groups.GradeNum as "GradeNum",
                view_groups."degree" as "Degree",
                view_groups.SpecID as "SpecID",
                view_groups.SpecName as "SpecName",
                view_groups.SpecAbbr as "SpecAbbr"
            FROM (SELECT students_groups.GroupID
            		FROM view_disciplines_recordbooks
            		INNER JOIN students_groups ON students_groups.RecordBookID = view_disciplines_recordbooks.RecordBookID AND
                                          students_groups.SemesterID = vSemesterID AND
                                          students_groups.State <= 'outlet'
            		WHERE view_disciplines_recordbooks.DisciplineID = pDisciplineID AND
                  				'attach' = COALESCE(view_disciplines_recordbooks.Type, 'attach')
            		GROUP BY students_groups.GroupID) tGroup
            INNER JOIN view_groups ON tGroup.GroupID = view_groups.GroupID AND view_groups.Year = vYear
            ORDER BY view_groups.GradeID ASC, view_groups.GroupID ASC;
    END;
    $function$;
    
    CREATE OR REPLACE FUNCTION public.getratesforgroup(pdisciplineid integer, pgroupid integer)
     RETURNS TABLE("ID" integer, "LastName" character varying, "FirstName" character varying, "SecondName" character varying, intermediate integer, bonus integer, exam integer)
     LANGUAGE plpgsql
    AS $function$
    
      -- DECLARE vInGeneralGroup BOOLEAN DEFAULT FALSE;
        declare vSemesterID INT DEFAULT -1;
    BEGIN
        vSemesterID = GetDisciplineProperty(pDisciplineID, 'semester');
        
        /*
             vInGeneralGroup = EXISTS(
            SELECT * FROM disciplines_groups
            WHERE disciplines_groups.DisciplineID = pDisciplineID AND
                  disciplines_groups.GroupID = pGroupID
            LIMIT 1
        );
    
    
        DROP TABLE IF EXISTS tStudents;
            CREATE TEMPORARY TABLE tStudents AS (
            SELECT students_groups.RecordBookID
            FROM students_groups
            LEFT JOIN disciplines_students ON disciplines_students.DisciplineID = pDisciplineID AND
                                              disciplines_students.RecordBookID = students_groups.RecordBookID
            WHERE   students_groups.SemesterID = vSemesterID AND
                    students_groups.State <= 'outlet' AND -- actual students
                    students_groups.GroupID = pGroupID AND
                    --CASE WHEN vInGeneralGroup THEN
                    --    NOT disciplines_students.Type <=> 'detach' -- not detached
                    --ELSE
                    --    COALESCE(disciplines_students.Type, 'attach') = 'attach'-- is attached
                    --END
                    (disciplines_students."type" is null or  disciplines_students."type" ='attach')
        );
    
        DROP TABLE IF EXISTS vRoadMap;
        CREATE TEMPORARY TABLE vRoadMap AS (
            SELECT  view_roadmap.SubmoduleID,
                    view_roadmap.ModuleType AS Type
                FROM view_roadmap
                WHERE view_roadmap.DisciplineID = pDisciplineID
        );
          */
    
        
        return query
        SELECT  students.ID			as "ID",
                accounts.LastName	as "LastName",
                accounts.FirstName	as "FirstName",
                accounts.SecondName	as "SecondName",
                vRates.RateRegular 	AS intermediate,
                vRates.RateBonus 	AS bonus,
                vRates.RateExam 	AS exam
            FROM (
                	--SELECT tStudents.RecordBookID,
                	select students_groups.recordbookid,
                       	cast(SUM(CASE WHEN vRoadMap.Type = 'regular' THEN  rt.Rate ELSE  0 end) as integer) AS RateRegular,
                       	cast(SUM(CASE WHEN vRoadMap.Type = 'extra' THEN  rt.Rate ELSE  0 END) as integer) AS RateExtra,
                       	cast(SUM(CASE WHEN vRoadMap.Type = 'bonus' THEN  rt.Rate ELSE  0 END) as integer) AS RateBonus,
                       	MAX(CASE WHEN vRoadMap.Type = 'exam' THEN  rt.Rate ELSE  0 END) AS RateExam
                    	FROM students_groups /*(SELECT students_groups.RecordBookID
            					FROM students_groups LEFT JOIN disciplines_students ON disciplines_students.DisciplineID = pDisciplineID AND
                                              									   	   disciplines_students.RecordBookID = students_groups.RecordBookID
            					WHERE   students_groups.SemesterID = vSemesterID AND
                    					--students_groups.State <= 'outlet' AND -- actual students
                    					students_groups.GroupID = pGroupID AND
                    					(disciplines_students."type" is null or  disciplines_students."type" ='attach')
                    		) tStudents*/
                    		CROSS JOIN (SELECT view_roadmap.SubmoduleID, view_roadmap.ModuleType AS Type
                							FROM view_roadmap
                							WHERE view_roadmap.DisciplineID = pDisciplineID
                			) vRoadMap
                    		LEFT JOIN rating_table as rt  ON rt.RecordBookID=students_groups.recordbookid and-- rt.RecordBookID = tStudents.RecordBookID AND
                                                          	   rt.SubmoduleID = vRoadMap.SubmoduleID
                            where students_groups.SemesterID = vSemesterID and students_groups.GroupID = pGroupID and students_groups.State <= 'outlet'                    	   
                		--GROUP BY tStudents.RecordBookID
                		group by students_groups.recordbookid
            ) vRates
            inner join record_books on record_books.id=vRates.recordbookid
            INNER JOIN students ON students.ID = record_books.studentid
            LEFT JOIN accounts ON students.AccountID = accounts.ID
            ORDER BY CONCAT(accounts.LastName, accounts.FirstName,  coalesce (accounts.SecondName,'')) ASC, 
                     students.ID ASC;
        	
        	             
    END
    $function$;
    
    CREATE OR REPLACE FUNCTION public.getratesforgroupall(pgroupid integer, psemesterid integer)
     RETURNS TABLE("StudentID" integer, "DisciplineID" integer, "CompoundDiscID" integer, intermediate integer, bonus integer, extra integer, exam integer, examcnt integer)
     LANGUAGE plpgsql
    AS $function$
    BEGIN
    /*    DROP TABLE IF EXISTS tDisc;
        CREATE TEMPORARY TABLE tDisc AS (
            SELECT view_disciplines_recordbooks.DisciplineID
            FROM view_disciplines_recordbooks
                INNER JOIN students_groups ON students_groups.RecordBookID = view_disciplines_recordbooks.RecordBookID AND
                                              students_groups.SemesterID = view_disciplines_recordbooks.semesterid --AND
                                              --students_groups.State <= 'outlet'
            WHERE students_groups.GroupID = pGroupID and students_groups.semesterid = pSemesterID --and
                --'attach' = COALESCE(view_disciplines_recordbooks."type" , 'attach')
            GROUP BY view_disciplines_recordbooks.DisciplineID
        );
    
        DROP TABLE IF EXISTS tStudents;
        CREATE TEMPORARY TABLE tStudents AS (
            SELECT students_groups.RecordBookID,
                    record_books.StudentID
                FROM students_groups
                INNER JOIN record_books ON record_books.ID = students_groups.RecordBookID
                WHERE   students_groups.GroupID = pGroupID
                        and students_groups.SemesterID = pSemesterID
        );*/
    
        DROP TABLE IF EXISTS vRoadMap;
        CREATE TEMPORARY TABLE vRoadMap AS (
            SELECT  --tDisc.DisciplineID as DisciplineID,
            		view_roadmap.disciplineid,
                    view_roadmap.ModuleType,-- as ModuleType,
                    view_roadmap.SubmoduleID
            --FROM tDisc
            --LEFT JOIN view_roadmap ON view_roadmap.DisciplineID = tDisc.DisciplineID
            from view_roadmap where view_roadmap.disciplineid in (SELECT view_disciplines_recordbooks.DisciplineID
            														FROM view_disciplines_recordbooks
                													INNER JOIN students_groups ON students_groups.RecordBookID = view_disciplines_recordbooks.RecordBookID AND
                                              														students_groups.SemesterID = view_disciplines_recordbooks.semesterid and
                                              														students_groups.state <= 'outlet'
            														WHERE students_groups.GroupID = pGroupID and students_groups.semesterid = pSemesterID 
            														GROUP BY view_disciplines_recordbooks.DisciplineID)
        );
        
       return query
        SELECT  vRates.StudentID as "StudentID",
                vRates.DisciplineID as "DisciplineID",
                disciplines.CompoundDiscID as "CompoundDiscID",
                vRates.RateRegular AS intermediate,
                vRates.RateBonus AS bonus,
                vRates.RateExtra AS extra,
                vRates.RateExam AS exam,
                vRates.CntExam AS examCnt
        FROM (
            SELECT  tStudents.StudentID,
                    vRoadMap.DisciplineID,
                   cast(SUM(CASE WHEN vRoadMap.ModuleType = 'regular' THEN  rt.Rate ELSE  0 END) as integer)AS RateRegular,
                    cast(SUM(CASE WHEN vRoadMap.ModuleType = 'extra' THEN  rt.Rate ELSE  0 END)as integer) AS RateExtra,
                    cast(SUM(CASE WHEN vRoadMap.ModuleType = 'bonus' THEN  rt.Rate ELSE  0 END)as integer) AS RateBonus,
                    MAX(CASE WHEN vRoadMap.ModuleType = 'exam' THEN  rt.Rate ELSE  0 END) AS RateExam,
                   cast( SUM(CASE WHEN vRoadMap.ModuleType = 'exam' THEN  1 ELSE  0 END)as integer) AS CntExam
                FROM (select vs.recordbookid, vs.studentid from view_students as vs where vs.groupid=pgroupid and vs.semesterid=psemesterid) tStudents
                CROSS join vRoadMap
                LEFT JOIN rating_table as rt  ON  rt.RecordBookID = tStudents.RecordBookID AND
                                                    rt.SubmoduleID = vRoadMap.SubmoduleID
                WHERE rt.Rate IS NOT NULL
                GROUP BY tStudents.StudentID, vRoadMap.DisciplineID
        ) vRates
            INNER JOIN students ON students.ID = vRates.StudentID
            INNER JOIN accounts ON students.AccountID = accounts.ID
            INNER JOIN disciplines ON disciplines.id = vRates.DisciplineID
            ORDER BY    CONCAT(accounts.LastName, accounts.FirstName,  coalesce(accounts.SecondName,'')) ASC,
                        vRates.DisciplineID ASC;
    END
    $function$;
    
    CREATE OR REPLACE FUNCTION public.getratesforgroupbystage(pdisciplineid integer, pgroupid integer, pmilestone integer)
     RETURNS TABLE("StudentID" integer, "Semester" integer, "Bonus" integer, "Extra" integer, "PreviousExtra" integer, "Exam" integer, "PreviousExam" integer, "Option" absence_pass, "AutoPassed" integer, "LastName" character varying, "FirstName" character varying, "SecondName" character varying)
     LANGUAGE plpgsql
    AS $function$
    
        DECLARE vSemesterID INT DEFAULT -1; vGroupID INT DEFAULT -1;
        --vInGeneralGroup BOOL DEFAULT FALSE;
    BEGIN
        vSemesterID := GetDisciplineProperty(pDisciplineID, 'semester');
        
        -- check that group attached to discipline. Otherwise vGroupID = -1;
    /*    vInGeneralGroup = EXISTS(
            SELECT * FROM disciplines_groups
            WHERE disciplines_groups.DisciplineID = pDisciplineID AND
                  disciplines_groups.GroupID = pGroupID
            LIMIT 1
        );
    
        DROP TABLE IF EXISTS tStudents;
        CREATE TEMPORARY TABLE tStudents AS (
          SELECT record_books.ID, record_books.StudentID
          FROM students_groups
            LEFT JOIN record_books ON record_books.ID = students_groups.RecordBookID
            LEFT JOIN disciplines_students ON disciplines_students.DisciplineID = pDisciplineID AND
                                                disciplines_students.RecordBookID = record_books.ID
          WHERE   students_groups.SemesterID = vSemesterID AND
                  students_groups.State <= 'outlet' AND --actual students
                  students_groups.GroupID = pGroupID and
                  COALESCE(disciplines_students.Type, 'attach') = 'attach'
        );*/
    
      return query
        SELECT  tRes.*,
                accounts.LastName as "LastName",
                accounts.FirstName as "FirstName",
                accounts.SecondName as "SecondName"
            FROM (
                SELECT  tStudents.StudentID as "StudentID",
                        cast (SUM(tRate.Rate*iif_sql(tMap.ModuleType = 'regular',1,0)) as integer) AS "Semester",
                        cast (SUM(tRate.Rate*iif_sql(tMap.ModuleType = 'bonus',1,0)) as integer) AS "Bonus",
                        cast (SUM(tRate.Rate*iif_sql(tMap.ModuleType = 'extra',1,0)*iif_sql(tMap.SubmoduleOrderNum < pMilestone,1,0)) as integer) AS "Extra",
                        cast (SUM(tRate.Rate*iif_sql(tMap.ModuleType = 'extra',1,0)*iif_sql(tMap.SubmoduleOrderNum < pMilestone - 1,1,0)) as integer) AS "PreviousExtra",
                        cast (SUM(tRate.Rate*iif_sql(tMap.ModuleType = 'exam',1,0)*iif_sql(tMap.SubmoduleOrderNum = pMilestone,1,0)) as integer) AS "Exam",
                        MAX(tRate.Rate*iif_sql(tMap.ModuleType = 'exam',1,0)*iif_sql(tMap.SubmoduleOrderNum < pMilestone,1,0)) AS "PreviousExam",
                        MAX(CASE WHEN tMap.SubmoduleOrderNum = pMilestone THEN  exam_period_options."type" ELSE  NULL END) As "Option",
                        MAX(CASE WHEN exam_period_options."type" = 'pass' THEN  1 ELSE  0 END) As "AutoPassed"
                    FROM (select record_books.id, record_books.studentid 
                    		from students_groups left join record_books on record_books.id=students_groups.recordbookid
                    		where students_groups.groupid=pgroupid and students_groups.semesterid=vsemesterid and students_groups.state <= 'outlet') tStudents
                    LEFT JOIN view_roadmap AS tMap   ON  tMap.DisciplineID = pDisciplineID
                    LEFT JOIN rating_table AS tRate  ON  tRate.RecordbookID = tStudents.ID AND
                                                        tRate.SubmoduleID = tMap.SubmoduleID
                    LEFT JOIN exam_period_options ON  exam_period_options.submoduleID = tMap.SubmoduleID AND
                                                        exam_period_options.RecordbookID = tStudents.ID
                                                        
                    GROUP BY tStudents.StudentID
                ) tRes
            INNER JOIN students ON students.ID = tRes."StudentID"
            INNER JOIN accounts ON students.AccountID = accounts.ID
            ORDER BY    accounts.LastName ASC,
                        accounts.FirstName ASC,
                        accounts.SecondName ASC;
    
    END
    $function$