From d2f07f99ba5dbb047722e43d29b8d552a768726e Mon Sep 17 00:00:00 2001
From: Anton Bagliy <taccessviolation@gmail.com>
Date: Fri, 19 Apr 2019 16:13:44 +0300
Subject: [PATCH] ADD: discipline_clear and discipline_delete functions #416

---
 db/postgresql/issue416_delete_discipline.sql | 95 ++++++++++++++++++++
 1 file changed, 95 insertions(+)
 create mode 100644 db/postgresql/issue416_delete_discipline.sql

diff --git a/db/postgresql/issue416_delete_discipline.sql b/db/postgresql/issue416_delete_discipline.sql
new file mode 100644
index 000000000..14efd6b7d
--- /dev/null
+++ b/db/postgresql/issue416_delete_discipline.sql
@@ -0,0 +1,95 @@
+DROP FUNCTION IF EXISTS public.discipline_clear(pauthorteacherid integer, pdisciplineid integer);
+CREATE OR REPLACE FUNCTION public.discipline_clear(pauthorteacherid integer, pdisciplineid integer)
+ RETURNS integer
+ LANGUAGE plpgsql
+AS $function$
+declare vRow int;
+BEGIN
+    if NOT InternalIsTeacherAuthor(pAuthorTeacherID, pDisciplineID) THEN
+        RETURN -1;
+    END if;
+
+
+    -- clear logs
+    DELETE FROM logs_rating
+        WHERE logs_rating.SubmoduleID IN
+            (SELECT view_roadmap.SubmoduleID
+                FROM view_roadmap
+                WHERE view_roadmap.DisciplineID = pDisciplineID);
+
+    -- clear rating
+    DELETE FROM rating_table
+        WHERE rating_table.SubmoduleID IN
+            (SELECT view_roadmap.SubmoduleID
+             FROM view_roadmap
+             WHERE view_roadmap.DisciplineID = pDisciplineID);
+
+	-- clear exam_period_options
+	DELETE FROM exam_period_options
+        WHERE exam_period_options.SubmoduleID IN
+            (SELECT view_roadmap.SubmoduleID
+             FROM view_roadmap
+             WHERE view_roadmap.DisciplineID = pDisciplineID);
+
+    -- unlock discipline
+    UPDATE disciplines
+        SET IsLocked = 0
+        WHERE ID = pDisciplineID;
+        --LIMIT 1;
+        get diagnostics vRow=ROW_COUNT;
+    RETURN vRow-1;
+END
+$function$;
+
+DROP FUNCTION IF EXISTS public.discipline_delete(pdisciplineid integer);
+CREATE OR REPLACE FUNCTION public.discipline_delete(pdisciplineid integer)
+ RETURNS integer
+ LANGUAGE plpgsql
+AS $function$
+declare pauthorid int;
+declare vTemp int;
+begin
+--	select public.discipline_delete(
+--	:pdisciplineid 	-- put the pdisciplineid parameter value instead of 'pdisciplineid' (int4)
+--);
+
+	select authorid into pauthorid from disciplines where id=pdisciplineid;
+	select discipline_clear(pauthorid, pdisciplineid) into vTemp;
+
+    -- delete roadmap
+    DELETE FROM submodules
+        WHERE submodules.moduleID in (
+            select modules.id FROM modules
+            WHERE modules.DisciplineID = pDisciplineID
+        );
+
+    DELETE FROM modules
+        WHERE modules.DisciplineID = pDisciplineID;
+
+    -- detach all entities from discipline
+    DELETE FROM disciplines_teachers
+        WHERE disciplines_teachers.DisciplineID = pDisciplineID;
+    DELETE FROM disciplines_students
+        WHERE disciplines_students.DisciplineID = pDisciplineID;
+    DELETE FROM disciplines_groups
+        WHERE disciplines_groups.DisciplineID = pDisciplineID;
+
+    DELETE FROM logs_binds_groups
+        WHERE logs_binds_groups.DisciplineID = pDisciplineID;
+    DELETE FROM logs_binds_students
+        WHERE logs_binds_students.DisciplineID = pDisciplineID;
+
+    --new logs to delete
+    delete from logs_discipline_forms
+    	where logs_discipline_forms.discipline_id = pDisciplineID;
+    delete from logs_form_export
+    	where logs_form_export.discipline_id = pDisciplineID;
+
+    -- delete discipline
+    DELETE FROM disciplines
+        WHERE disciplines.ID = pDisciplineID;
+        --LIMIT 1;
+
+    RETURN 0;
+END;
+$function$;
\ No newline at end of file
-- 
GitLab