diff --git a/system/dbupdate_3.3.php b/system/dbupdate_3.3.php index 01839e4b9..759769df7 100644 --- a/system/dbupdate_3.3.php +++ b/system/dbupdate_3.3.php @@ -6259,6 +6259,172 @@ if($result = @$db->db_query("SELECT 1 FROM system.tbl_berechtigung WHERE berecht } } +// Neue Funktion get_ects_summe_schulisch +if(!@$db->db_query("SELECT public.get_ects_summe_schulisch('', 0, 0)")) +{ + $qry = 'CREATE FUNCTION public.get_ects_summe_schulisch(character varying, integer, integer) RETURNS numeric + LANGUAGE plpgsql + AS $_$ + DECLARE var_student_uid ALIAS FOR $1; + DECLARE var_prestudent_id ALIAS FOR $2; + DECLARE var_studiengang_kz ALIAS FOR $3; + DECLARE var_einstiegsausbildungssemester integer; + DECLARE var_einstiegsstudiensemester_kurzbz varchar(32); + DECLARE var_einstiegsorgform_kurzbz varchar(32); + DECLARE rec_quereinstiegs_studiensemester RECORD; + DECLARE sum_quereinstiegs_ects numeric(4, 1) := 0; + DECLARE sum_schulische_ects numeric(4, 1) := 0; + + + BEGIN + + -- IF STUDENT IS QUEREINSTEIGER, GET ECTS SUMME OF ANGERECHNETE SEMESTER + -- Get Einstiegssemester + SELECT INTO var_einstiegsausbildungssemester , var_einstiegsstudiensemester_kurzbz, var_einstiegsorgform_kurzbz ausbildungssemester, studiensemester_kurzbz, orgform_kurzbz from public.tbl_prestudentstatus + WHERE prestudent_id = var_prestudent_id + AND status_kurzbz = \'Student\' + ORDER BY datum, insertamum, ext_id + LIMIT 1; + + -- If Einstiegssemester > 1 (= Quereinsteiger) + IF (var_einstiegsausbildungssemester > 1) THEN + -- ...get all Quereinstiegssemester + FOR rec_quereinstiegs_studiensemester IN SELECT studiensemester_kurzbz FROM public.tbl_studiensemester + WHERE ende <= (select start from public.tbl_studiensemester WHERE studiensemester_kurzbz = var_einstiegsstudiensemester_kurzbz ) + ORDER BY start DESC + LIMIT (var_einstiegsausbildungssemester -1) + -- ...loop the Quereinstiegssemester + LOOP + -- ...and sum up ECTS of each Quereinstiegssemester + sum_quereinstiegs_ects = sum_quereinstiegs_ects + (SELECT + SUM(tbl_lehrveranstaltung.ects) + FROM + lehre.tbl_studienplan + JOIN lehre.tbl_studienplan_lehrveranstaltung USING (studienplan_id) + JOIN lehre.tbl_lehrveranstaltung USING (lehrveranstaltung_id) + WHERE + tbl_studienplan.studienplan_id = ( + SELECT + studienplan_id + FROM + lehre.tbl_studienordnung + JOIN lehre.tbl_studienplan USING (studienordnung_id) + JOIN lehre.tbl_studienplan_semester USING (studienplan_id) + WHERE tbl_studienordnung.studiengang_kz = var_studiengang_kz + AND tbl_studienplan_semester.semester = var_einstiegsausbildungssemester - 1 + AND tbl_studienplan_semester.studiensemester_kurzbz = rec_quereinstiegs_studiensemester.studiensemester_kurzbz + AND tbl_studienplan.orgform_kurzbz = var_einstiegsorgform_kurzbz + + LIMIT 1 + ) + AND tbl_studienplan_lehrveranstaltung.semester = var_einstiegsausbildungssemester + AND studienplan_lehrveranstaltung_id_parent IS NULL -- auf Modulebene + AND tbl_studienplan_lehrveranstaltung.export = TRUE); + + var_einstiegsausbildungssemester = var_einstiegsausbildungssemester - 1; + END LOOP; + END IF; + + + -- GET ECTS SUMME OF ALLE BISHER ANGERECHNETEN LEHRVERANSTALTUNGEN. ANRECHNUNGSGRUND: SCHULISCH. + SELECT INTO sum_schulische_ects COALESCE(SUM(ects), 0) FROM ( + SELECT + lehrveranstaltung_id, studiensemester_kurzbz, ects + FROM + lehre.tbl_zeugnisnote + LEFT JOIN lehre.tbl_anrechnung USING(lehrveranstaltung_id, studiensemester_kurzbz) + JOIN lehre.tbl_lehrveranstaltung USING(lehrveranstaltung_id) + JOIN public.tbl_student USING(student_uid) + WHERE + tbl_zeugnisnote.note = 6 + AND student_uid = var_student_uid + AND lehre.tbl_anrechnung.prestudent_id IN (tbl_student.prestudent_id, NULL) + AND begruendung_id != 4 -- schulisch + + UNION + + SELECT + lehrveranstaltung_id, studiensemester_kurzbz, ects + FROM + lehre.tbl_anrechnung + JOIN lehre.tbl_lehrveranstaltung USING(lehrveranstaltung_id) + JOIN public.tbl_student USING(prestudent_id) + WHERE + genehmigt_von IS NOT NULL + AND student_uid = var_student_uid + AND begruendung_id != 4 -- schulisch + ) lvsangerechnet; + + -- BUILD ECTS SUMME OF QUEREINSTIEGSSEMESTER- + ANGERECHNETEN LVs-ECTS + -- Summe aller bisher schulisch begründet angerechneten LVs + der Quereinstiegssemester + sum_schulische_ects = sum_schulische_ects + sum_quereinstiegs_ects; + + RETURN sum_schulische_ects ; + + END; + $_$; + + ALTER FUNCTION public.get_ects_summe_schulisch(character varying, integer, integer) OWNER TO fhcomplete;'; + + if(!$db->db_query($qry)) + echo 'public.get_ects_summe_schulisch(student_uid, prestudent_id, studiengang_kz): '.$db->db_last_error().'
'; + else + echo '
Funktion public.get_ects_summe_schulisch(student_uid, prestudent_id, studiengang_kz) hinzugefügt'; +} + +// Neue Funktion get_ects_summe_beruflich +if(!@$db->db_query("SELECT public.get_ects_summe_beruflich('')")) +{ + $qry = 'CREATE FUNCTION public.get_ects_summe_beruflich(character varying) RETURNS numeric + LANGUAGE plpgsql + AS $_$ + DECLARE var_student_uid ALIAS FOR $1; + DECLARE sum_berufliche_ects numeric(4, 1) := 0; + + BEGIN + + SELECT INTO sum_berufliche_ects COALESCE(SUM(ects), 0) FROM ( + SELECT + lehrveranstaltung_id, studiensemester_kurzbz, ects + FROM + lehre.tbl_zeugnisnote + LEFT JOIN lehre.tbl_anrechnung USING(lehrveranstaltung_id, studiensemester_kurzbz) + JOIN lehre.tbl_lehrveranstaltung USING(lehrveranstaltung_id) + JOIN public.tbl_student USING(student_uid) + WHERE + tbl_zeugnisnote.note = 6 + AND student_uid = var_student_uid + AND lehre.tbl_anrechnung.prestudent_id IN (tbl_student.prestudent_id, NULL) + AND begruendung_id = 4 -- beruflich + + UNION + + SELECT + lehrveranstaltung_id, studiensemester_kurzbz, ects + FROM + lehre.tbl_anrechnung + JOIN lehre.tbl_lehrveranstaltung USING(lehrveranstaltung_id) + JOIN public.tbl_student USING(prestudent_id) + WHERE + genehmigt_von is not null + AND student_uid = var_student_uid + AND begruendung_id = 4 -- beruflich + ) lvsangerechnet; + + RETURN sum_berufliche_ects; + + END; + $_$; + + ALTER FUNCTION public.get_ects_summe_beruflich(character varying) OWNER TO fhcomplete;'; + + if(!$db->db_query($qry)) + echo 'public.get_ects_summe_beruflich(student_uid): '.$db->db_last_error().'
'; + else + echo '
Funktion public.get_ects_summe_beruflich(student_uid) hinzugefügt'; +} + + // *** Pruefung und hinzufuegen der neuen Attribute und Tabellen echo '

Pruefe Tabellen und Attribute!

';