All Downloads are FREE. Search and download functionalities are using the official Maven repository.

de.svws_nrw.db.utils.lupo.mdb.ABPSchuelerFaecher Maven / Gradle / Ivy

Go to download

Diese Bibliothek unterstützt bei dem Zugriff auf Datenbanken für die Schulverwaltungssoftware in NRW

There is a newer version: 1.0.1
Show newest version
package de.svws_nrw.db.utils.lupo.mdb;

import java.io.IOException;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.ArrayList;

import com.healthmarketscience.jackcess.ColumnBuilder;
import com.healthmarketscience.jackcess.DataType;
import com.healthmarketscience.jackcess.Database;
import com.healthmarketscience.jackcess.IndexBuilder;
import com.healthmarketscience.jackcess.PropertyMap;
import com.healthmarketscience.jackcess.Row;
import com.healthmarketscience.jackcess.Table;
import com.healthmarketscience.jackcess.TableBuilder;

import de.svws_nrw.core.data.gost.GostLeistungen;
import de.svws_nrw.core.data.gost.GostLeistungenFachbelegung;
import de.svws_nrw.core.data.gost.GostLeistungenFachwahl;
import de.svws_nrw.core.data.schueler.Sprachbelegung;
import de.svws_nrw.core.types.Note;
import de.svws_nrw.core.types.gost.GostAbiturFach;
import de.svws_nrw.core.types.gost.GostHalbjahr;
import de.svws_nrw.core.types.gost.GostKursart;
import de.svws_nrw.core.utils.schueler.SprachendatenUtils;
import de.svws_nrw.db.dto.current.gost.DTOGostSchueler;
import de.svws_nrw.db.dto.current.schild.schueler.DTOSchueler;

/**
 * Diese Klasse wird für den Import der Tabelle ABP_SchuelerFaecher aus einer LuPO-Datenbank
 * im Access-Format genutzt.
 */
public final class ABPSchuelerFaecher {

	/** Eine laufende ID der Zuordnung von Fächern zum Schüler */
	public int ID = -1;

	/** Die LuPO-Schüler-ID */
	public int Schueler_ID = -1;

	/** Die ID ds zugeordneten Faches */
	public int Fach_ID = -1;

	/** Das Kürzel des zugeordneten Faches */
	public String FachKrz;

	/** Gibt an, ab welchem Jahrgang die Fremdsprache belegt wurde. */
	public String FS_BeginnJg = null;

	/** Gibt an, als wievielte Fremdsprache eine Fremdsprache gewählt wurde. */
	public String Sprachenfolge = null;

	/** Gibt die Kursart des gewählten Faches in der EF im 1. Halbjahr an */
	public String Kursart_E1 = null;

	/** Gibt die Notenpunkte des gewählten Faches in der EF im 1. Halbjahr an, falls bereits Noten vorliegenen */
	public String Punkte_E1 = null;

	/** Gibt an, ob die Wahl des Faches in der EF im 1. Halbjahr in Konflikt zu einer anderen Wahl steht. */
	public boolean Konflikt_E1 = false;

	/** Gibt die Kursart des gewählten Faches in der EF im 2. Halbjahr an */
	public String Kursart_E2 = null;

	/** Gibt die Notenpunkte des gewählten Faches in der EF im 2. Halbjahr an, falls bereits Noten vorliegenen */
	public String Punkte_E2 = null;

	/** Gibt an, ob die Wahl des Faches in der EF im 2. Halbjahr in Konflikt zu einer anderen Wahl steht. */
	public boolean Konflikt_E2 = false;

	/** Gibt die Kursart des gewählten Faches in der Q-Phase im 1. Halbjahr an */
	public String Kursart_Q1 = null;

	/** Gibt die Notenpunkte des gewählten Faches in der Q-Phase im 1. Halbjahr an, falls bereits Noten vorliegenen */
	public String Punkte_Q1 = null;

	/** Gibt an, ob die Wahl des Faches in der Q-Phase im 1. Halbjahr in Konflikt zu einer anderen Wahl steht. */
	public boolean Konflikt_Q1 = false;

	/** Gibt die Kursart des gewählten Faches in der Q-Phase im 2. Halbjahr an */
	public String Kursart_Q2 = null;

	/** Gibt die Notenpunkte des gewählten Faches in der Q-Phase im 2. Halbjahr an, falls bereits Noten vorliegenen */
	public String Punkte_Q2 = null;

	/** Gibt an, ob die Wahl des Faches in der Q-Phase im 2. Halbjahr in Konflikt zu einer anderen Wahl steht. */
	public boolean Konflikt_Q2 = false;

	/** Gibt die Kursart des gewählten Faches in der Q-Phase im 3. Halbjahr an */
	public String Kursart_Q3 = null;

	/** Gibt die Notenpunkte des gewählten Faches in der Q-Phase im 3. Halbjahr an, falls bereits Noten vorliegenen */
	public String Punkte_Q3 = null;

	/** Gibt an, ob die Wahl des Faches in der Q-Phase im 3. Halbjahr in Konflikt zu einer anderen Wahl steht. */
	public boolean Konflikt_Q3 = false;

	/** Gibt die Kursart des gewählten Faches in der Q-Phase im 4. Halbjahr an */
	public String Kursart_Q4 = null;

	/** Gibt die Notenpunkte des gewählten Faches in der Q-Phase im 4. Halbjahr an, falls bereits Noten vorliegenen */
	public String Punkte_Q4 = null;

	/** Gibt an, ob die Wahl des Faches in der Q-Phase im 4. Halbjahr in Konflikt zu einer anderen Wahl steht. */
	public boolean Konflikt_Q4 = false;

	/** Gibt an, ob das Fach als 1., 2., 3., 4. Abiturfach oder nicht als Abiturfach gewählt wurde. */
	public Integer AbiturFach = null;

	/** Gibt an, ob es Konflikte bei der Wahl des Abuturfaches gibt. */
	public boolean Konflikt_AF = false;

	/** Bemerkungen zu dieser Fachwahl */
	public String Bemerkungen = null;

	/** Die Sortierung des Faches in der Wahl */
	public int Sortierung = 32000;

	/** Die Fachgruppe des Faches */
	public String Fachgruppe = null;

	/** Das Aufgabenfeld des Faches */
	public int Aufgabenfeld = -1;

	/** Gibt an, ob das Fach im 1. Halbjahr der EF vom Benutzer geändert werden darf */
	public String Aendern_E1 = null;

	/** Gibt an, ob das Fach im 2. Halbjahr der EF vom Benutzer geändert werden darf */
	public String Aendern_E2 = null;

	/** Gibt an, ob das Fach im 1. Halbjahr der Q-Phase vom Benutzer geändert werden darf */
	public String Aendern_Q1 = null;

	/** Gibt an, ob das Fach im 2. Halbjahr der Q-Phase vom Benutzer geändert werden darf */
	public String Aendern_Q2 = null;

	/** Gibt an, ob das Fach im 3. Halbjahr der Q-Phase vom Benutzer geändert werden darf */
	public String Aendern_Q3 = null;

	/** Gibt an, ob das Fach im 4. Halbjahr der Q-Phase vom Benutzer geändert werden darf */
	public String Aendern_Q4 = null;

	/** Gibt an, ob das Fach im 1. Halbjahr der Q-Phase für die Wertung in Block I des Abiturs markiert wurde. */
	public String Markiert_Q1 = null;

	/** Gibt an, ob das Fach im 2. Halbjahr der Q-Phase für die Wertung in Block I des Abiturs markiert wurde. */
	public String Markiert_Q2 = null;

	/** Gibt an, ob das Fach im 3. Halbjahr der Q-Phase für die Wertung in Block I des Abiturs markiert wurde. */
	public String Markiert_Q3 = null;

	/** Gibt an, ob das Fach im 4. Halbjahr der Q-Phase für die Wertung in Block I des Abiturs markiert wurde. */
	public String Markiert_Q4 = null;

	/** Gibt das Ergebnis in der Abiturprüfung an. */
	public Integer AbiPruefErgebnis = null;

	/** Gibt an, ob eine Mündliche Pflichtprüfung stattfinden muss. */
	public String MdlPflichtPruefung = null;

	/** Gibt das Ergebnis einer mündlichen Prüfung an. */
	public Integer MdlPruefErgebnis = null;


	private static final String fieldID = "ID";
	private static final String fieldSchueler_ID = "Schueler_ID";
	private static final String fieldFach_ID = "Fach_ID";
	private static final String fieldFachKrz = "FachKrz";
	private static final String fieldFS_BeginnJg = "FS_BeginnJg";
	private static final String fieldSprachenfolge = "Sprachenfolge";
	private static final String fieldKursart_E1 = "Kursart_E1";
	private static final String fieldPunkte_E1 = "Punkte_E1";
	private static final String fieldKonflikt_E1 = "Konflikt_E1";
	private static final String fieldKursart_E2 = "Kursart_E2";
	private static final String fieldPunkte_E2 = "Punkte_E2";
	private static final String fieldKonflikt_E2 = "Konflikt_E2";
	private static final String fieldKursart_Q1 = "Kursart_Q1";
	private static final String fieldPunkte_Q1 = "Punkte_Q1";
	private static final String fieldKonflikt_Q1 = "Konflikt_Q1";
	private static final String fieldKursart_Q2 = "Kursart_Q2";
	private static final String fieldPunkte_Q2 = "Punkte_Q2";
	private static final String fieldKonflikt_Q2 = "Konflikt_Q2";
	private static final String fieldKursart_Q3 = "Kursart_Q3";
	private static final String fieldPunkte_Q3 = "Punkte_Q3";
	private static final String fieldKonflikt_Q3 = "Konflikt_Q3";
	private static final String fieldKursart_Q4 = "Kursart_Q4";
	private static final String fieldPunkte_Q4 = "Punkte_Q4";
	private static final String fieldKonflikt_Q4 = "Konflikt_Q4";
	private static final String fieldAbiturFach = "AbiturFach";
	private static final String fieldKonflikt_AF = "Konflikt_AF";
	private static final String fieldBemerkungen = "Bemerkungen";
	private static final String fieldSortierung = "Sortierung";
	private static final String fieldFachgruppe = "Fachgruppe";
	private static final String fieldAufgabenfeld = "Aufgabenfeld";
	private static final String fieldAendern_E1 = "Aendern_E1";
	private static final String fieldAendern_E2 = "Aendern_E2";
	private static final String fieldAendern_Q1 = "Aendern_Q1";
	private static final String fieldAendern_Q2 = "Aendern_Q2";
	private static final String fieldAendern_Q3 = "Aendern_Q3";
	private static final String fieldAendern_Q4 = "Aendern_Q4";
	private static final String fieldMarkiert_Q1 = "Markiert_Q1";
	private static final String fieldMarkiert_Q2 = "Markiert_Q2";
	private static final String fieldMarkiert_Q3 = "Markiert_Q3";
	private static final String fieldMarkiert_Q4 = "Markiert_Q4";
	private static final String fieldAbiPruefErgebnis = "AbiPruefErgebnis";
	private static final String fieldMdlPflichtPruefung = "MdlPflichtPruefung";
	private static final String fieldMdlPruefErgebnis = "MdlPruefErgebnis";


	/**
	 * Liest alle Einträge der Tabelle "ABP_SchuelerFaecher" aus der LuPO-Datei ein.
	 *
	 * @param db   die Datenbank, aus der die Tabelle gelesen werden soll
	 *
	 * @return die Liste der Fächerzuordnungen der Schüler aus der LuPO-Datei
	 */
	public static List read(final Database db) {
		try {
			final List liste = new ArrayList<>();
			final Table table = db.getTable("ABP_SchuelerFaecher");
			for (final Row r : table) {
				final ABPSchuelerFaecher zuordnung = new ABPSchuelerFaecher();
				zuordnung.ID = r.getInt(fieldID);
				zuordnung.Schueler_ID = r.getInt(fieldSchueler_ID);
				zuordnung.Fach_ID = r.getInt(fieldFach_ID);
				zuordnung.FachKrz = r.getString(fieldFachKrz);
				zuordnung.FS_BeginnJg = r.getString(fieldFS_BeginnJg);
				zuordnung.Sprachenfolge = r.getString(fieldSprachenfolge);
				zuordnung.Kursart_E1 = r.getString(fieldKursart_E1);
				zuordnung.Punkte_E1 = r.getString(fieldPunkte_E1);
				zuordnung.Konflikt_E1 = "J".equals(r.getString(fieldKonflikt_E1));
				if ((zuordnung.Kursart_E1 != null) && zuordnung.Kursart_E1.isEmpty())
					zuordnung.Kursart_E1 = null;
				if ((zuordnung.Punkte_E1 != null) && zuordnung.Punkte_E1.isEmpty())
					zuordnung.Punkte_E1 = null;
				zuordnung.Kursart_E2 = r.getString(fieldKursart_E2);
				zuordnung.Punkte_E2 = r.getString(fieldPunkte_E2);
				zuordnung.Konflikt_E2 = "J".equals(r.getString(fieldKonflikt_E2));
				if ((zuordnung.Kursart_E2 != null) && zuordnung.Kursart_E2.isEmpty())
					zuordnung.Kursart_E2 = null;
				if ((zuordnung.Punkte_E2 != null) && zuordnung.Punkte_E2.isEmpty())
					zuordnung.Punkte_E2 = null;
				zuordnung.Kursart_Q1 = r.getString(fieldKursart_Q1);
				zuordnung.Punkte_Q1 = r.getString(fieldPunkte_Q1);
				zuordnung.Konflikt_Q1 = "J".equals(r.getString(fieldKonflikt_Q1));
				zuordnung.Kursart_Q2 = r.getString(fieldKursart_Q2);
				zuordnung.Punkte_Q2 = r.getString(fieldPunkte_Q2);
				zuordnung.Konflikt_Q2 = "J".equals(r.getString(fieldKonflikt_Q2));
				zuordnung.Kursart_Q3 = r.getString(fieldKursart_Q3);
				zuordnung.Punkte_Q3 = r.getString(fieldPunkte_Q3);
				zuordnung.Konflikt_Q3 = "J".equals(r.getString(fieldKonflikt_Q3));
				zuordnung.Kursart_Q4 = r.getString(fieldKursart_Q4);
				zuordnung.Punkte_Q4 = r.getString(fieldPunkte_Q4);
				zuordnung.Konflikt_Q4 = "J".equals(r.getString(fieldKonflikt_Q4));
				if ((zuordnung.Kursart_Q1 != null) && zuordnung.Kursart_Q1.isEmpty())
					zuordnung.Kursart_Q1 = null;
				if ((zuordnung.Punkte_Q1 != null) && zuordnung.Punkte_Q1.isEmpty())
					zuordnung.Punkte_Q1 = null;
				if ((zuordnung.Kursart_Q2 != null) && zuordnung.Kursart_Q2.isEmpty())
					zuordnung.Kursart_Q2 = null;
				if ((zuordnung.Punkte_Q2 != null) && zuordnung.Punkte_Q2.isEmpty())
					zuordnung.Punkte_Q2 = null;
				if ((zuordnung.Kursart_Q3 != null) && zuordnung.Kursart_Q3.isEmpty())
					zuordnung.Kursart_Q3 = null;
				if ((zuordnung.Punkte_Q3 != null) && zuordnung.Punkte_Q3.isEmpty())
					zuordnung.Punkte_Q3 = null;
				if ((zuordnung.Kursart_Q4 != null) && zuordnung.Kursart_Q4.isEmpty())
					zuordnung.Kursart_Q4 = null;
				if ((zuordnung.Punkte_Q4 != null) && zuordnung.Punkte_Q4.isEmpty())
					zuordnung.Punkte_Q4 = null;
				zuordnung.AbiturFach = r.getInt(fieldAbiturFach);
				zuordnung.Konflikt_AF = "J".equals(r.getString(fieldKonflikt_AF));
				zuordnung.Bemerkungen = r.getString(fieldBemerkungen);
				zuordnung.Sortierung = (r.getInt(fieldSortierung) == null) ? 32000 : r.getInt(fieldSortierung);
				zuordnung.Fachgruppe = r.getString(fieldFachgruppe);
				zuordnung.Aufgabenfeld = (r.getInt(fieldAufgabenfeld) == null) ? -1 : r.getInt(fieldAufgabenfeld);
				zuordnung.Aendern_E1 = r.getString(fieldAendern_E1);
				zuordnung.Aendern_E2 = r.getString(fieldAendern_E2);
				zuordnung.Aendern_Q1 = r.getString(fieldAendern_Q1);
				zuordnung.Aendern_Q2 = r.getString(fieldAendern_Q2);
				zuordnung.Aendern_Q3 = r.getString(fieldAendern_Q3);
				zuordnung.Aendern_Q4 = r.getString(fieldAendern_Q4);
				zuordnung.Markiert_Q1 = r.getString(fieldMarkiert_Q1);
				zuordnung.Markiert_Q2 = r.getString(fieldMarkiert_Q2);
				zuordnung.Markiert_Q3 = r.getString(fieldMarkiert_Q3);
				zuordnung.Markiert_Q4 = r.getString(fieldMarkiert_Q4);
				zuordnung.AbiPruefErgebnis = r.getInt(fieldAbiPruefErgebnis);
				zuordnung.MdlPflichtPruefung = r.getString(fieldMdlPflichtPruefung);
				zuordnung.MdlPruefErgebnis = r.getInt(fieldMdlPruefErgebnis);
				liste.add(zuordnung);
			}
			return liste;
		} catch (@SuppressWarnings("unused") final IOException e) {
			return Collections.emptyList();
		}
	}


	/**
	 * Schreibt die angegebenen Schüler-Fächer-Zuordnung in die übergebene Datenbank
	 *
	 * @param db     die zu beschreibende Datenbank
	 * @param list   die Liste der zu schreibenden Schüler-Fächer-Zuordnung
	 */
	public static void write(final Database db, final List list) {
		try {
			final Table table = new TableBuilder("ABP_SchuelerFaecher")
					.addColumn(new ColumnBuilder(fieldID, DataType.LONG).putProperty(PropertyMap.REQUIRED_PROP, DataType.BOOLEAN, true))
					.addColumn(new ColumnBuilder(fieldSchueler_ID, DataType.LONG))
					.addColumn(new ColumnBuilder(fieldFach_ID, DataType.LONG))
					.addColumn(new ColumnBuilder(fieldFachKrz, DataType.TEXT).setLengthInUnits(20))
					.addColumn(new ColumnBuilder(fieldFS_BeginnJg, DataType.TEXT).setLengthInUnits(2))
					.addColumn(new ColumnBuilder(fieldSprachenfolge, DataType.TEXT).setLengthInUnits(1))
					.addColumn(new ColumnBuilder(fieldKursart_E1, DataType.TEXT).setLengthInUnits(5))
					.addColumn(new ColumnBuilder(fieldPunkte_E1, DataType.TEXT).setLengthInUnits(2))
					.addColumn(new ColumnBuilder(fieldKonflikt_E1, DataType.TEXT).setLengthInUnits(1))
					.addColumn(new ColumnBuilder(fieldKursart_E2, DataType.TEXT).setLengthInUnits(5))
					.addColumn(new ColumnBuilder(fieldPunkte_E2, DataType.TEXT).setLengthInUnits(2))
					.addColumn(new ColumnBuilder(fieldKonflikt_E2, DataType.TEXT).setLengthInUnits(1))
					.addColumn(new ColumnBuilder(fieldKursart_Q1, DataType.TEXT).setLengthInUnits(5))
					.addColumn(new ColumnBuilder(fieldPunkte_Q1, DataType.TEXT).setLengthInUnits(2))
					.addColumn(new ColumnBuilder(fieldKonflikt_Q1, DataType.TEXT).setLengthInUnits(1))
					.addColumn(new ColumnBuilder(fieldKursart_Q2, DataType.TEXT).setLengthInUnits(5))
					.addColumn(new ColumnBuilder(fieldPunkte_Q2, DataType.TEXT).setLengthInUnits(2))
					.addColumn(new ColumnBuilder(fieldKonflikt_Q2, DataType.TEXT).setLengthInUnits(1))
					.addColumn(new ColumnBuilder(fieldKursart_Q3, DataType.TEXT).setLengthInUnits(5))
					.addColumn(new ColumnBuilder(fieldPunkte_Q3, DataType.TEXT).setLengthInUnits(2))
					.addColumn(new ColumnBuilder(fieldKonflikt_Q3, DataType.TEXT).setLengthInUnits(1))
					.addColumn(new ColumnBuilder(fieldKursart_Q4, DataType.TEXT).setLengthInUnits(5))
					.addColumn(new ColumnBuilder(fieldPunkte_Q4, DataType.TEXT).setLengthInUnits(2))
					.addColumn(new ColumnBuilder(fieldKonflikt_Q4, DataType.TEXT).setLengthInUnits(1))
					.addColumn(new ColumnBuilder(fieldAbiturFach, DataType.LONG))
					.addColumn(new ColumnBuilder(fieldKonflikt_AF, DataType.TEXT).setLengthInUnits(1))
					.addColumn(new ColumnBuilder(fieldBemerkungen, DataType.TEXT).setLengthInUnits(50))
					.addColumn(new ColumnBuilder(fieldSortierung, DataType.LONG))
					.addColumn(new ColumnBuilder(fieldFachgruppe, DataType.TEXT).setLengthInUnits(5))
					.addColumn(new ColumnBuilder(fieldAufgabenfeld, DataType.LONG).putProperty(PropertyMap.DEFAULT_VALUE_PROP, DataType.TEXT, "0"))
					.addColumn(new ColumnBuilder(fieldAendern_E1, DataType.TEXT).setLengthInUnits(1))
					.addColumn(new ColumnBuilder(fieldAendern_E2, DataType.TEXT).setLengthInUnits(1))
					.addColumn(new ColumnBuilder(fieldAendern_Q1, DataType.TEXT).setLengthInUnits(1))
					.addColumn(new ColumnBuilder(fieldAendern_Q2, DataType.TEXT).setLengthInUnits(1))
					.addColumn(new ColumnBuilder(fieldAendern_Q3, DataType.TEXT).setLengthInUnits(1))
					.addColumn(new ColumnBuilder(fieldAendern_Q4, DataType.TEXT).setLengthInUnits(1))
					.addColumn(new ColumnBuilder(fieldMarkiert_Q1, DataType.TEXT).setLengthInUnits(1))
					.addColumn(new ColumnBuilder(fieldMarkiert_Q2, DataType.TEXT).setLengthInUnits(1))
					.addColumn(new ColumnBuilder(fieldMarkiert_Q3, DataType.TEXT).setLengthInUnits(1))
					.addColumn(new ColumnBuilder(fieldMarkiert_Q4, DataType.TEXT).setLengthInUnits(1))
					.addColumn(new ColumnBuilder(fieldAbiPruefErgebnis, DataType.LONG))
					.addColumn(new ColumnBuilder(fieldMdlPflichtPruefung, DataType.TEXT).setLengthInUnits(1))
					.addColumn(new ColumnBuilder(fieldMdlPruefErgebnis, DataType.LONG))
					.addIndex(new IndexBuilder(IndexBuilder.PRIMARY_KEY_NAME).addColumns(fieldID).setPrimaryKey())
					.toTable(db);
			if (list == null)
				return;
			for (final ABPSchuelerFaecher zuordnung : list) {
				table.addRow(
						zuordnung.ID,
						zuordnung.Schueler_ID,
						zuordnung.Fach_ID,
						zuordnung.FachKrz,
						zuordnung.FS_BeginnJg,
						zuordnung.Sprachenfolge,
						zuordnung.Kursart_E1,
						zuordnung.Punkte_E1,
						zuordnung.Konflikt_E1 ? "J" : "N",
						zuordnung.Kursart_E2,
						zuordnung.Punkte_E2,
						zuordnung.Konflikt_E2 ? "J" : "N",
						zuordnung.Kursart_Q1,
						zuordnung.Punkte_Q1,
						zuordnung.Konflikt_Q1 ? "J" : "N",
						zuordnung.Kursart_Q2,
						zuordnung.Punkte_Q2,
						zuordnung.Konflikt_Q2 ? "J" : "N",
						zuordnung.Kursart_Q3,
						zuordnung.Punkte_Q3,
						zuordnung.Konflikt_Q3 ? "J" : "N",
						zuordnung.Kursart_Q4,
						zuordnung.Punkte_Q4,
						zuordnung.Konflikt_Q4 ? "J" : "N",
						zuordnung.AbiturFach,
						zuordnung.Konflikt_AF ? "J" : "N",
						zuordnung.Bemerkungen,
						zuordnung.Sortierung,
						zuordnung.Fachgruppe,
						zuordnung.Aufgabenfeld,
						zuordnung.Aendern_E1,
						zuordnung.Aendern_E2,
						zuordnung.Aendern_Q1,
						zuordnung.Aendern_Q2,
						zuordnung.Aendern_Q3,
						zuordnung.Aendern_Q4,
						zuordnung.Markiert_Q1,
						zuordnung.Markiert_Q2,
						zuordnung.Markiert_Q3,
						zuordnung.Markiert_Q4,
						zuordnung.AbiPruefErgebnis,
						zuordnung.MdlPflichtPruefung,
						zuordnung.MdlPruefErgebnis);
			}
		} catch (final IOException e) {
			e.printStackTrace();
		}
	}


	/**
	 * Gibt den Standard-Eintrag für die Tabelle ABPSchuelerFaecher zurück.
	 *
	 * @return der Standard-Eintrag für die Tabelle ABPSchuelerFaecher
	 */
	public static List getDefault() {
		return new ArrayList<>();
	}


	/**
	 * Gibt den zu der angegebenen Belegung gehörigen String für die Kursart zurück
	 *
	 * @param belegung   die Belegung
	 *
	 * @return der in der LuPO-MDB verwendete String für die Kursart
	 */
	private static String getKursart(final GostLeistungenFachbelegung belegung) {
		return switch (GostKursart.fromKuerzel(belegung.kursartKuerzel).kuerzel) {
			case "GK" -> belegung.istSchriftlich ? "S" : "M";
			case "LK" -> "LK";
			case "PJK" -> "M";
			case "VTF" -> "M";
			case "ZK" -> "ZK";
			default -> "M";
		};
	}


	/**
	 * Erstellt die Einträge für die Tabelle ABPSchuelerFaecher aus den DTOs
	 * der SVWS-Server-Datenbank.
	 *
	 * @param faecher            die für die LuPO-Datei definierten Faecher
	 * @param fachgruppen        die Zuordnung der Fächer zu den einzelnen Fachgruppen
	 * @param schuelerListe      die SVWS-Server-DTOs für die Schüler
	 * @param schuelerLupoInfo   die LuPO-Information zu dem Schüler, die in der
	 *                           SVWS-Datenbank hinterlegt sind.
	 * @param gostInfo           die Leistungen des Schülers in der gymnasialen Oberstufe
	 *
	 * @return die Liste der Einträge für die Tabelle ABPSchuelerFaecher
	 */
	public static List get(final Map faecher, final Map fachgruppen,
			final List schuelerListe, final Map schuelerLupoInfo, final Map gostInfo) {
		final List liste = new ArrayList<>();
		if (schuelerListe == null)
			return liste;
		int j = 1;   // TODO mit Maximum+1 aus DTOGostSchuelerFachbelegungen anfangen...
		for (int sid = 0; sid < schuelerListe.size(); sid++) {
			final DTOSchueler schueler = schuelerListe.get(sid);
			// TODO DTOGostSchuelerFachbelegungen lupoSchuelerFacher.get(schueler.getID());
			final GostLeistungen gostLeistungen = gostInfo.get(schueler.ID);
			for (final GostLeistungenFachwahl fachwahl : gostLeistungen.faecher) {
				final ABPSchuelerFaecher eintrag = new ABPSchuelerFaecher();
				eintrag.ID = j;
				eintrag.Schueler_ID = sid + 1;
				eintrag.FachKrz = fachwahl.fach.kuerzelAnzeige;
				final ABPFaecher fach = faecher.get(eintrag.FachKrz);
				eintrag.Fach_ID = fach.ID;
				if (fach.IstSprache) {
					final Sprachbelegung belegung = SprachendatenUtils.getSprachbelegung(gostLeistungen.sprachendaten,
							fach.StatistikKrz.toUpperCase().substring(0, 1));
					if (belegung != null) {
						eintrag.FS_BeginnJg = "" + belegung.belegungVonJahrgang;
						eintrag.Sprachenfolge = "" + belegung.reihenfolge;
					}
				}
				eintrag.Sortierung = fach.Sortierung;
				final ABPFachgruppen fachgruppe = fachgruppen.get(fach.StatistikKrz);
				if (fachgruppe == null)   // Eine Fachgruppe muss definiert sein, damit das Fach übernommen wird
					continue;
				eintrag.Fachgruppe = fachgruppe.FachgruppeKrz;
				eintrag.Aufgabenfeld = fachgruppe.Aufgabenfeld;
				eintrag.AbiturFach = (GostAbiturFach.fromID(fachwahl.abiturfach) == null) ? null : fachwahl.abiturfach;
				for (final GostHalbjahr halbjahr : GostHalbjahr.values()) {
					GostLeistungenFachbelegung belegung = null;
					for (final GostLeistungenFachbelegung tmpBelegung : fachwahl.belegungen) {
						if (!tmpBelegung.abschnittGewertet)
							continue;
						if (halbjahr == GostHalbjahr.fromKuerzel(tmpBelegung.halbjahrKuerzel)) {
							belegung = tmpBelegung;
							break;
						}
					}
					if (belegung != null) {
						final String note = Note.fromKuerzel(belegung.notenKuerzel).istNote() ? ("" + Note.fromKuerzel(belegung.notenKuerzel).notenpunkte)
								: Note.fromKuerzel(belegung.notenKuerzel).kuerzel;
						if (halbjahr == GostHalbjahr.EF1) {
							eintrag.Kursart_E1 = getKursart(belegung);
							eintrag.Punkte_E1 = note;
						} else if (halbjahr == GostHalbjahr.EF2) {
							eintrag.Kursart_E2 = getKursart(belegung);
							eintrag.Punkte_E2 = note;
						} else if (halbjahr == GostHalbjahr.Q11) {
							eintrag.Kursart_Q1 = getKursart(belegung);
							eintrag.Punkte_Q1 = note;
						} else if (halbjahr == GostHalbjahr.Q12) {
							eintrag.Kursart_Q2 = getKursart(belegung);
							eintrag.Punkte_Q2 = note;
						} else if (halbjahr == GostHalbjahr.Q21) {
							eintrag.Kursart_Q3 = getKursart(belegung);
							eintrag.Punkte_Q3 = note;
						} else if (halbjahr == GostHalbjahr.Q22) {
							eintrag.Kursart_Q4 = getKursart(belegung);
							eintrag.Punkte_Q4 = note;
						}
					}
				}
				// TODO Abiturdaten: eintrag.AbiPruefErgebnis;
				// TODO Abiturdaten: eintrag.MdlPflichtPruefung;
				// TODO Abiturdaten: eintrag.MdlPruefErgebnis;
				liste.add(eintrag);
				j++;
			}
			// Füge ggf. Fächer der Sprachenfolge hinzu, die nicht in den Leistungsdaten vorhanden sind, deren Belegung aber relevant ist -> Prüfung zweite Fremdsprache
// TODO Hinzufügen von Einträgen für alle Sprachfächer aus dem Methoden-Parameter faecher (LUPO-Export)
			/*			for (Sprachbelegung belegung: gostLeistungen.getSprachenNichtFortgefuehrt()) {
							ABPSchuelerFaecher eintrag = new ABPSchuelerFaecher();
							eintrag.ID = j;
							eintrag.Schueler_ID = sid+1;
							ABPFaecher fach = faecher.get(belegung.fachKuerzel);
							if (fach == null)
								fach = faecher.get(belegung.sprache);
							eintrag.FachKrz = fach.StatistikKrz;
							eintrag.Fach_ID = fach.ID;
							if (fach.IstSprache) {
								eintrag.FS_BeginnJg = "" + belegung.belegungVonJahrgang;
								if (belegung.istSprachpruefungSI) {
									eintrag.Sprachenfolge = "P";
								} else if (belegung.istSprachnachweisSI) {
									eintrag.Sprachenfolge = "N";
								} else {
									eintrag.Sprachenfolge = "" + belegung.reihenfolge;
								}
							}
							eintrag.Sortierung = fach.Sortierung;
							ABPFachgruppen fachgruppe = fachgruppen.get(fach.StatistikKrz);
							if (fachgruppe == null)   // Eine Fachgruppe muss definiert sein, damit das Fach übernommen wird
								continue;
							eintrag.Fachgruppe = fachgruppe.FachgruppeKrz;
							eintrag.Aufgabenfeld = fachgruppe.Aufgabenfeld;
							liste.add(eintrag);
							j++;
						}*/
		}
		return liste;
	}


	@Override
	public String toString() {
		return "ABPSchuelerFaecher [ID=" + ID + ", Schueler_ID=" + Schueler_ID + ", Fach_ID=" + Fach_ID + ", FachKrz="
				+ FachKrz + ", FS_BeginnJg=" + FS_BeginnJg + ", Sprachenfolge=" + Sprachenfolge + ", Kursart_E1="
				+ Kursart_E1 + ", Punkte_E1=" + Punkte_E1 + ", Konflikt_E1=" + Konflikt_E1 + ", Kursart_E2="
				+ Kursart_E2 + ", Punkte_E2=" + Punkte_E2 + ", Konflikt_E2=" + Konflikt_E2 + ", Kursart_Q1="
				+ Kursart_Q1 + ", Punkte_Q1=" + Punkte_Q1 + ", Konflikt_Q1=" + Konflikt_Q1 + ", Kursart_Q2="
				+ Kursart_Q2 + ", Punkte_Q2=" + Punkte_Q2 + ", Konflikt_Q2=" + Konflikt_Q2 + ", Kursart_Q3="
				+ Kursart_Q3 + ", Punkte_Q3=" + Punkte_Q3 + ", Konflikt_Q3=" + Konflikt_Q3 + ", Kursart_Q4="
				+ Kursart_Q4 + ", Punkte_Q4=" + Punkte_Q4 + ", Konflikt_Q4=" + Konflikt_Q4 + ", AbiturFach="
				+ AbiturFach + ", Konflikt_AF=" + Konflikt_AF + ", Bemerkungen=" + Bemerkungen + ", Sortierung="
				+ Sortierung + ", Fachgruppe=" + Fachgruppe + ", Aufgabenfeld=" + Aufgabenfeld + ", Aendern_E1="
				+ Aendern_E1 + ", Aendern_E2=" + Aendern_E2 + ", Aendern_Q1=" + Aendern_Q1 + ", Aendern_Q2="
				+ Aendern_Q2 + ", Aendern_Q3=" + Aendern_Q3 + ", Aendern_Q4=" + Aendern_Q4 + ", Markiert_Q1="
				+ Markiert_Q1 + ", Markiert_Q2=" + Markiert_Q2 + ", Markiert_Q3=" + Markiert_Q3 + ", Markiert_Q4="
				+ Markiert_Q4 + ", AbiPruefErgebnis=" + AbiPruefErgebnis + ", MdlPflichtPruefung=" + MdlPflichtPruefung
				+ ", MdlPruefErgebnis=" + MdlPruefErgebnis + "]";
	}

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy