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

de.svws_nrw.data.schild3.reporting.DataSchildReportingDatenquelleSchuelerSprachpruefungen 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.data.schild3.reporting;

import de.svws_nrw.core.data.schild3.reporting.SchildReportingSchuelerSprachpruefungen;
import de.svws_nrw.core.types.schild3.SchildReportingAttributTyp;
import de.svws_nrw.db.DBEntityManager;
import de.svws_nrw.db.dto.current.schild.schueler.DTOSchueler;
import de.svws_nrw.db.dto.current.schild.schueler.DTOSchuelerSprachpruefungen;
import de.svws_nrw.db.utils.ApiOperationException;
import jakarta.ws.rs.core.Response.Status;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * Die Definition einer Schild-Reporting-Datenquelle für die Fehler der Laufbahnplanung in der gymnasialen Oberstufe
 */
public final class DataSchildReportingDatenquelleSchuelerSprachpruefungen
		extends DataSchildReportingDatenquelle {

	/**
	 * Erstelle die Datenquelle SchildReportingSchuelerSprachpruefungen
	 */
	DataSchildReportingDatenquelleSchuelerSprachpruefungen() {
		super(SchildReportingSchuelerSprachpruefungen.class);
		this.setMaster("schuelerID", "Schueler", "id", SchildReportingAttributTyp.INT, Long.class);
		// Beispiel für die Einschränkung auf Schulformen: this.restrictTo(Schulform.GY, Schulform.GE)
	}

	@Override
	List getDaten(final DBEntityManager conn, final List params) throws ApiOperationException {
		// Prüfe, ob die Schüler in der DB vorhanden sind
		final Map schueler = conn.queryByKeyList(DTOSchueler.class, params).stream().collect(Collectors.toMap(s -> s.ID, s -> s));
		for (final Long schuelerID : params) {
			if (schueler.get(schuelerID) == null)
				throw new ApiOperationException(Status.NOT_FOUND, "Parameter der Abfrage ungültig: Ein Schüler mit der ID " + schuelerID.toString()
						+ " existiert nicht.");
		}

		// Aggregiere die benötigten Daten aus der Datenbank, wenn alle Schüler-IDs existieren
		final ArrayList result = new ArrayList<>();
		for (final Long schuelerID : params) {
			// Die Sprachprüfungsdaten der Schüler sammeln.
			final List schuelerSprachpruefungen = conn.queryList(DTOSchuelerSprachpruefungen.QUERY_BY_SCHUELER_ID,
					DTOSchuelerSprachpruefungen.class, schuelerID);

			if ((schuelerSprachpruefungen != null) && (!schuelerSprachpruefungen.isEmpty())) {
				// Nur wenn zum Schüler Sprachprüfungen vorhanden sind, werden diese zurückgegeben. Andernfalls wird ein leerer Vektor zurückgegeben.
				// Alternativ wäre der vollständige Abbruch im Fehlerfall: throw new ApiOperationException(Status.INTERNAL_SERVER_ERROR.exception("Parameter der Abfrage ungültig: Die GOSt-Daten oder Abiturdaten des Schülers mit der ID " + schuelerID.toString() + " konnten nicht ermittelt werden.")
				try {
					for (final DTOSchuelerSprachpruefungen dtoSP : schuelerSprachpruefungen) {
						final SchildReportingSchuelerSprachpruefungen schuelerSprachpruefung = new SchildReportingSchuelerSprachpruefungen();
						schuelerSprachpruefung.schuelerID = schuelerID;
						schuelerSprachpruefung.sprache = dtoSP.Sprache;
						schuelerSprachpruefung.jahrgang = dtoSP.ASDJahrgang;
						schuelerSprachpruefung.pruefungsdatum = dtoSP.Pruefungsdatum;
						schuelerSprachpruefung.anspruchsniveau = dtoSP.Anspruchsniveau.daten.kuerzel;
						schuelerSprachpruefung.istHSUPruefung = dtoSP.IstHSUPruefung;
						schuelerSprachpruefung.istFeststellungspruefung = dtoSP.IstFeststellungspruefung;
						schuelerSprachpruefung.kannErstePflichtfremdspracheErsetzen = dtoSP.KannErstePflichtfremdspracheErsetzen;
						schuelerSprachpruefung.kannZweitePflichtfremdspracheErsetzen = dtoSP.KannZweitePflichtfremdspracheErsetzen;
						schuelerSprachpruefung.kannWahlpflichtfremdspracheErsetzen = dtoSP.KannWahlpflichtfremdspracheErsetzen;
						schuelerSprachpruefung.kannBelegungAlsFortgefuehrteSpracheErlauben = dtoSP.KannBelegungAlsFortgefuehrteSpracheErlauben;
						schuelerSprachpruefung.referenzniveau = dtoSP.Referenzniveau.daten.kuerzel;
						schuelerSprachpruefung.note = dtoSP.NotePruefung.kuerzel;
						result.add(schuelerSprachpruefung);
					}
				} catch (final Exception ex) {
					throw new ApiOperationException(Status.INTERNAL_SERVER_ERROR, "Die Daten zu den Sprachprüfungen des Schülers mit der ID " + schuelerID
							+ " sind vermutlich inkonsistent. Folgender Fehler ist aufgetreten: " + ex.getMessage());
				}
			}
		}
		// Geben die Ergebnis-Liste mit den Core-DTOs zurück
		return result;
	}

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy